将筛选器限制为仅在特定函数内运行

时间:2014-04-17 作者:helgatheviking

我想过滤get_terms(), 但我只想过滤get_terms() 当从wp_terms_checklist() 作用

我希望在清单的末尾添加一个“无术语”选项(单选按钮实际上是属于我的分类学单选按钮插件)。我已经这样做了,但发现它在restrict_manage_posts hook,所以我想知道是否有办法限制过滤器的应用。

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

wp_terms_checklist early trigger a filter \'wp_terms_checklist_args\' 因此,您可以使用该过滤器添加过滤器,并在第一次运行时自动删除它。

然而,这应该足够了,一旦挂钩是全局变量,为了确保更好地使用更强大的检查,函数中的静态变量是一个简单而好的技巧:

function switch_terms_filter( $_set = NULL ) {
  static $set;
  if ( ! is_null($_set) ) $set = $_set;
  return $set;
}

add_filter( \'wp_terms_checklist_args\', function( $args ) {

  // turn the switch ON
  switch_terms_filter(1);

  add_filter( \'get_terms\', \'your_filter_callback\', 10, 3 );

  return $args; // we don\'t want to affect wp_terms_checklist $args
} );


function your_filter_callback( $terms, $taxonomies, $args ) {
  // remove filter after 1st run
  remove_filter( current_filter(), __FUNCTION__, 10, 3 );

  // is the switch ON? If not do nothing.
  if ( switch_terms_filter() !== 1 ) return $terms;

  switch_terms_filter(0); // turn the switch OFF

  // ... filter terms here ...
  return $terms;
}
Untested.

结束

相关推荐

我可以在‘Get_the_Terms’中使用自定义元值吗?

我有一个自定义页面模板,这是我试图操纵的代码,根据我为特定页面编写的自定义元值进行更改。$terms = get_the_terms($post->id, \'custom-taxonomy\' ); 在CPT页面上,我有一个自定义元字段“分类名称”,自定义元值是“自定义分类”我试图用上面的代码做的是:$terms = get_the_terms($post->id, get_post_meta($post->ID,\'metafield-taxonomy-name\',TRU