Wordpress短信过滤the_content修改列表中的所有帖子

时间:2014-04-21 20:34:20

标签: php wordpress plugins add-filter

我正在编写插件,并且代码如下:

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;在我的帖子的一个上。

问题是当显示帖子列表时 - 例如,当使用类别视图时 - 内容会针对显示的帖子的所有进行更改 - 而不仅仅是包含短代码的内容。

任何想法如何更改它以便它只过滤代码

2 个答案:

答案 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条目中有一个与此非常相似的例子。