短码接口:如何获取匹配短码RegEx的名称?

时间:2015-01-03 作者:Sven

我正在寻找复制文档中所述内容的方法:An overloaded shortcode callback.

根据文件$atts 数组将包含与短代码RegEx匹配的字符串。内部位置$atts 取决于回调名称是否与短代码匹配。以下示例摘自文档:

add_shortcode(\'foo\',\'foo\'); // two shortcodes referencing the same callback
add_shortcode(\'bar\',\'foo\');
  produces this behavior:
[foo a=\'b\'] ==> callback to: foo(array(\'a\'=>\'b\'),NULL,"foo");
[bar a=\'c\'] ==> callback to: foo(array(0 => \'bar\', \'a\'=>\'c\'),NULL,"");
所以我注册了这样的短代码:

add_shortcode(\'foo\', \'foo\');
add_shortcode(\'bar\', \'foo\');
function foo($attributes, $content = null) {
    echo \'<pre>\';
    var_dump($attributes);
    echo \'</pre>\';
}
不幸的是,$attributes总是空的,它不包含短代码的名称(WP 4.0)。

这是文档中的错误还是我在哪里出错了?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

我想你只是忘了运行短代码[foo a=\'b\'][bar a=\'c\'] 通过do_shortcode 过滤器:

do_shortcode( \'[foo a=\'b\'] [bar a=\'c\']\' )
的输出the_content() 通过do_shortcode, 因此,您可以将其添加到编辑器中。

运行代码时,我得到以下输出$arguments 转储:

array (size=1)
  \'a\' => string \'b\' (length=1)
以及

array (size=1)
  \'a\' => string \'c\' (length=1)
所以没有\'0\' => \'bar\' 在这里分手。

但是您可以从third shortcode回调的参数(我第一次听说它是在this 由@toscho回答)

我刚查过来源如果我们查到do_shortcode_tag 我们将发现的功能:

// self-closing tag
return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, null,  $tag ) . $m[6];
在哪里$tag 是包含shortcode标记的第三个参数。

因此,在您的情况下,您可以将回调更改为:

function foo( $attributes = array(), $content = null, $tag = \'\' ) {

    echo $tag; // current shortcode tag

    echo \'<pre>\';
    var_dump($attributes);
    echo \'</pre>\';
}
获取有关当前快捷码标记的信息。

SO网友:chrisguitarguy

短代码回调获取具有短代码名称的第三个参数。文档中有一条关于此的注释:

从2.9.2开始,始终显示为第三个参数。

add_shortcode(\'foo\', \'wpse173855_shortcode\');
add_shortcode(\'bar\', \'wpse173855_shortcode\');

function wpse173855_shortcode($atts, $content, $name)
{
    echo \'<pre>\';
    var_dump($name);
    echo \'</pre>\';
}
A look at the source 显示始终传入匹配的短代码。

结束

相关推荐

你能不能不付费地编辑你的WordPress的Html和PHP?

对不起,我问了你一个问题。我是WP的新手。我不知道在哪里可以编辑我博客的HTML和PHP。我看到很多GUI选项可以更改颜色等,但没有任何东西可以更改我博客的源代码。我错过了什么?我花了12美元才有了一个自定义url,但编辑我博客的源代码需要花更多的钱吗?如果是这样的话,考虑到Tumblr免费提供这两种功能(自定义url、源代码编辑),这似乎很奇怪。