在插件类中,我想提供公共数据的简单字段:电子邮件,电话号码,Twitter等。可以扩展该列表。
有关详细信息,请参见GitHub上的插件Public Contact Data。
为了简化用法,我还想提供易于输入的短代码:
[public_email]
[public_phone]
[public_something]
唯一的区别是第二部分。我不想为简码提供更多参数,因为它们容易出错。因此,我为插件类中的所有字段注册了一个短代码处理程序:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
现在shortcode_handler()
必须知道调用了哪个简码。我的问题是:我该怎么做?
我当前的解决方法是另一个功能:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
这...适用于the_content()
。但是它既不优雅也不坚固。
我已经阅读了wp-includes/shortcodes.php
,但是现在看不到如何做得更好。
1
你们现在让我都很好奇。我会尽快对此进行调查。我知道shortcodes.php只是一堆函数,如果使用OOP正确编写它,那么无疑会有一个current_shortcode类变量,并使一切变得更容易。据我所知,Wordpress只将所有的短码和回调存储在一个数组中,我想知道是否有一种方法可以在处理过程中将每个短码存储到一个变量中,而又不会破坏核心文件?
—
Dwayne Charrington
@toscho同意,我认为这确实是一个问题,应该记住对短代码进行修改的方式(像Widgets那样包含更多的OOP)。我很乐意为您提供帮助,后来将其作为更新发送给Core。
—
Webord 2012年
@brasofilo对,我刚才做到了。
—
fuxia