我正在编写插件,并且代码如下:
add_shortcode('test','testfunc');
function testfunc(){
add_filter('the_content','mycontent',20);
}
function mycontent($content){
return "<p style='color:red'>extra content</p>";
}
我使用了短代码&#39; [测试]&#39;在我的帖子的一个上。
问题是当显示帖子列表时 - 例如,当使用类别视图时 - 内容会针对显示的帖子的所有进行更改 - 而不仅仅是包含短代码的内容。
任何想法如何更改它以便它只过滤代码
答案 0 :(得分:2)
你好,一个解决方案是不使用短代码钩子,但它会在内容中搜索它。
function content_custom_shortcode($content) {
// Search for shortcode
$shortcode = 'test';
preg_match('/\['.$shortcode.'\]/s', $content, $matches);
// If custom shortcode exists return custom content else return content
if (in_array('['.$shortcode.']', $matches)) return "<p style='color:red'>extra content</p>";
else return $content;
}
add_filter('the_content','content_custom_shortcode',20);
答案 1 :(得分:0)
每当您显示帖子列表并且其中一个包含您已创建的短代码时,它将更改所有显示的帖子,因为您已将其添加到the_content
,这是在The Loop的每次迭代中执行。删除过滤器,它应该按预期工作。
这会将[test]
和[/test]
所包含的内容包裹在<p>
标记中:
add_shortcode('test','testfunc');
function testfunc($atts, $content=NULL){
return "<p style='color:red'>{$content}</p>";
}
如果您想用替换文本替换帖子中的所有内容,请将上面示例中的变量{$content}
更改为您想要的任何文本。您仍需要将帖子内容包装在[test]
和[/test]
。
shortcodes上的WordPress Codex条目中有一个与此非常相似的例子。