两次调用Add_Filter()时发生冲突

时间:2019-10-05 作者:Revious

“Yoast SEO”插件有一个从网站地图中排除帖子的过滤器:wpseo_exclude_from_sitemap_by_post_ids

这是建议的用法(来自“Yoast SEO”官方文档):

add_filter( \'wpseo_exclude_from_sitemap_by_post_ids\', function () {
  return array( 311, 322 );
} );
我正按照建议尝试,但是\'404page\' plugin 用以下代码行覆盖我的数组:

add_filter( \'wpseo_exclude_from_sitemap_by_post_ids\', function () {
            return array( $this->settings()->get( \'page_id\' ) );
          } );
我尝试如下更改插件,但没有更改,另一个插件覆盖了我的数组:

add_filter( \'wpseo_exclude_from_sitemap_by_post_ids\', function ($alreadyExcluded) {
              var_dump($alreadyExcluded);
              $error_page_id = $this->settings()->get(\'page_id\');
              return array_push($alreadyExcluded, $error_page_id);
          } );

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

过滤器排队并按优先级排序,然后按发生顺序排序。除非另有规定,否则过滤器的默认优先级为10。发生顺序可能会受到插件启动顺序的影响(按插件名称的字母顺序)。

所以,当你开始研究这个问题时,两个过滤器的优先级是相等的。这意味着一个相当任意的因素导致一个过滤器优先于另一个过滤器。

因此,确保应用任何给定筛选器的唯一方法是确保其优先级高于您尝试修改/替换的筛选器。因此,在您的情况下,10000比需要的高,但代表了最合适的方法。

希望这个答案有帮助!

相关推荐

apply_filters to $GLOBALS

我正在使用Pootle页面构建插件构建一个单页网站。使用get\\u page,我在1页上显示每个单独的页面。为了针对Pootle页面生成器内容,我使用以下代码:$content = $GLOBALS[\'Pootle_Page_Builder_Render_Layout\']->panels_render( $page_data->ID ); 当我尝试实现一个像旋转木马这样的插件时,我需要使用一个短代码,但短代码不起作用。为了使短代码有效,我需要使用apply_filters(\'