推特网址插件将过滤器添加到the_content中。这个过滤器扰乱了我的插件短代码输出的输出。因此,我希望只为我的短代码输出删除此筛选器。
add_filter('the_content', 'twitter_url');
我知道这可以用下面的过滤器删除
remove_filter('the_content', 'twitter_url');
但是,如何将此筛选器仅应用于我的短代码输出。
我的短代码
add_shortcode('xxx', 'func_xxx');
短码回调函数
function func_xxx(){
return 'xxx';
}
所以请引导我做这件事!
发布于 2013-05-27 16:04:59
the_content
上的过滤器不是在“每个短代码”的基础上应用的。将Post内容传递给第一个过滤器,然后将修改后的post内容传递给第二个过滤器,然后将前两个过滤器更改的内容传递给第三个过滤器,依此类推。
您不能只为您的短代码删除the_content
过滤器,因为过滤器不是这样应用的。
有时,您可以通过操作注册筛选器的优先级来避免筛选问题。
add_filter('the_content', 'twitter_url',1); // run the filter very early
add_filter('the_content', 'twitter_url',100); // run the filter late
但是,在你的例子中,这两个过滤器--添加twitter_url
和do_shortcodes
的过滤器--不是由您添加的,所以它更复杂,更容易出错。
您可以在do_shortcodes
运行的地方使用插件服务器。
remove_filter('the_content', 'do_shortcode', 11);
add_filter('the_content', 'do_shortcode', 100);
这也许能帮你解决这个问题。我在我维护的网站上做过这件事。值得关注的是,您的插件正在改变由Core注册的内容。这可能会给主题或其他插件带来麻烦。
这个答案(可能)是正确的,它不可能像你发布的虚拟代码那样构造,也不能确切解释Twitter插件对你的代码做了什么,那就是找出你的短代码发生了什么,以及为什么,并找到一种方法从插件内部或短代码本身中保护该短代码的内容。小的重构可能可以解决这个问题,但这意味着需要查看实际的代码,而不是一些没有意义的填充代码。
https://wordpress.stackexchange.com/questions/100874
复制相似问题