很抱歉,短代码中仍然不允许使用括号,如中所示Shortcode API. 但是,可以使用封闭的短代码,这将允许使用括号。让我来演示一下:
短代码:[foo bar="No brackets here!"]...use [brackets] here[/foo]
您可以在functions.php
像这样:
add_shortcode( \'foo\', \'foo_shortcode\' );
function foo_shortcode( $atts, $content = null ) {
extract( shortcode_atts(
array(
\'bar\' => \'\',
), $atts )
);
return \'<p>\' . $bar . \' \' . $content . \'</p>\';
}
也可以将括号内的内容作为另一个快捷码执行:
短代码:[foo bar="No shortcodes here!"]...use [shortcodes] here[/foo]
add_shortcode( \'foo\', \'execute_foo_shortcode\' );
function execute_foo_shortcode( $atts, $content = null ) {
extract( shortcode_atts(
array(
\'bar\' => \'\',
), $atts )
);
return \'<p>\' . $bar . \' \' . do_shortcode($content) . \'</p>\';
}
但让我们保持简单。为什么不在短代码本身中添加括号呢?
短代码:[foo bar="shortcode"]
在你的functions.php
add_shortcode( \'foo\', \'build_foo_shortcode\' );
function build_foo_shortcode( $atts ) {
extract( shortcode_atts(
array(
\'bar\' => \'\',
), $atts )
);
if ( isset( $bar ) ) :
return \'<p>\' . do_shortcode( \'[\' . $bar . \']\' ) . \'</p>\';
endif;
}
如果您想继续使用您的短代码,可以在括号中添加类似的内容,通过regex识别并替换它:
短代码:[foo bar="Use your ___shortcode___ here"]
在您的functions.php
您可以替换___shortcode___
具有[shortcode]
然后再次通过do_shortcode()
add_shortcode( \'foo\', \'regex_foo_shortcode\' );
function regex_foo_shortcode( $atts ) {
extract( shortcode_atts(
array(
\'bar\' => \'\',
), $atts )
);
if ( isset( $bar ) ) :
$foo_bar = preg_replace_callback("/(.*)_{3}(.*)_{3}(.*)/", function($m) {
return $m[1] . do_shortcode(\'[\' . $m[2] . \']\') . $m[3];
}, $bar);
return \'<p>\' . $foo_bar . \'</p>\';
endif;
}
好吧,现在有点复杂了,不是吗?另一种方法(如果您不想通过短代码继续这样做)是自定义字段。
Custom fields 默认情况下可用,可以通过
Screen Options.
您可以使用the_meta() 或者通过get_post_meta() 函数可以在主题中轻松输出它们。此外,与短代码相比,它更容易处理输入和输出,并且没有人需要记住所有可用的短代码。
您还可以通过以下方式轻松生成高级自定义字段:the interface of a plugin 或build and style them on your own. 无论如何,您将在文本编辑器下方或旁边有很好的输入字段,没有任何限制(甚至文件上载、日期选择器…)。它看起来像这样: