从Add_Filter()调用中进行Add_Filter()调用

时间:2013-12-06 作者:sceilig

我正在创建一个插件,在其中检查页面url中传递的参数,然后使用这些参数的值来更改标题、元标记和其他一些SEO更改。但我在尝试将操作和过滤器正确地结合起来以实现这一点时遇到了问题。下面是我正在做的一些事情的示例。首先,我注册在url中传递的变量

    add_action(\'init\', \'register_tag\');

    function register_tag() {
      add_rewrite_tag(\'%address%\',\'([^&]+)\');
    }
然后,我从$wp\\u查询中获取变量,并设置标题和其他内容。

    add_filter(\'wp_head\', \'seo_features\');

    function seo_features() {
       global $wp_query,$post,$address;
       $address = $wp_query->query_vars[\'address\'];
       if ($address) {
          $post->post_title = $address;
          add_filter(\'wp_title\', set_title);
          add_filter(\'wpseo_title\', set_title);
          remove_action(\'wp_head\', \'rel_canonical\');
       }
    }
    function set_title($title) {
       global $address;
       return $address;
    }
但我认为你做不到add_action()add_filter() 来自add_filter()?

我不知道如何正确地执行此操作。我必须使用add_action("init") 注册标记(并使用添加相关重写规则add_rewrite_rule() ). 但我似乎只能得到变量的值$address 从…起$wp_queryadd_filter 呼叫尝试在没有筛选器/操作的情况下访问它是行不通的,因为调用它太早了。

你知道我应该按什么顺序做吗?

1 个回复
SO网友:s_ha_dum

如果你掌握了正确的时机,你可以从其他钩子中添加或删除钩子,但我不明白你为什么把这个弄得如此复杂。

function set_title($title) {
  global $wp_query,$post,$address;
  $address = $wp_query->query_vars[\'address\'];
  if ($address) {
    return $address;
  }
}
add_filter(\'wp_title\', \'set_title\');
如果需要共享值,请使用static 变量:

function my_address() {
  static $address = \'\';
  global $wp_query;
  if (empty($address)) {
    $address = $wp_query->query_vars[\'address\'];
  }
  return $address;
}

function set_title($title) {
  return my_address();
}
add_filter(\'wp_title\', \'set_title\');
或者把整件事都放在一节课上。

结束

相关推荐

缺少WordPress Apply_Filters()参数

我正在定制Woocommerce Wordpress网站。在Woocommerce产品类别中(class-wc-product.php) 这个get_price 函数应用筛选器,如下所示:function get_price() { return apply_filters(\'woocommerce_get_price\', $this->price, $this); } 在我的功能中。php我想添加一个过滤器,如下所示:add_filter(\'woocomme