如何删除将Jetpack相关内容添加到DOM的过滤器

时间:2014-03-09 作者:JPollock

我试图删除JetPack的相关帖子模块中的过滤器,该过滤器将元素添加到DOM中,该DOM由模块的JavaScript用相关帖子填充。一旦我删除了它,我就可以实现我的实际目标,即除了插件提供的选项之外,还可以将它添加到其他地方。

我试图删除的内容筛选器如下所示:

   public function filter_add_target_to_dom( $content ) {
    if ( !$this->_found_shortcode ) {
        $content .= "\\n" . $this->get_target_html();
    }

    return $content;
}
我在一个单独的插件中尝试过:

add_action( \'plugins_loaded\', \'slug_remove_jp_content_filter\' , 2001 );
function slug_remove_jp_content_filter() {
   $jprp = Jetpack_RelatedPosts( get_current_blog_id() );
   remove_filter( \'the_content\', array( $jprp, \'filter_add_target_to_dom\' )    );
}
我也尝试过:

class myclass{

function __construct() {
    add_action( \'plugins_loaded\', array( $this, \'remove_default_content_filter\' ), 2001 );
}
function remove_default_content_filter() {
    $jprp = Jetpack_RelatedPosts( get_current_blog_id() );
    remove_filter( \'the_content\', array( $jprp, \'filter_add_target_to_dom\' ) );
}


}

new myclass();
在这两种情况下,我都尝试使用$jprp = Jetpack_RelatedPosts::init(); 相反

在调试控制台中,我可以用这两个$jprp = Jetpack_RelatedPosts::init();$jprp = new Jetpack_RelatedPosts( get_current_blog_id() );

不知道还能尝试什么。

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

$jprp = Jetpack_RelatedPosts::init();
remove_filter( \'the_content\', array( $jprp, \'filter_add_target_to_dom\' ) );
应该很好。Jetpack\\u RelatedPosts init函数实现了singleton模式,因此调用它将返回已经实例化的实例,您可以使用该实例删除过滤器。

只需确保您调用代码的时间足够晚。主模块将add\\u操作挂接到来自“wp”操作挂钩的函数,因此您需要在此之后挂接。“plugins\\u-loaded”和“init”挂钩太早了。您可以自己连接到“wp”操作,优先级大于10,这样就可以了。

结束

相关推荐

Several loop in search result

我想在搜索后的结果中使用两个循环。首先,如果有结果,我开始循环<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> 并在循环后显示属于某个类别的文章<?php $cats = get_categories(); foreach ($cats as $cat) { query_posts(\'cat=\'.$cat-&g