在添加到操作挂钩的函数中返回自定义值

时间:2014-05-19 作者:SPi

我研究了action和filter挂钩之间的区别,据我所知,不可能有一个添加到actionreturn a (custom) value.

我的方案:

保存帖子后,我try 保存其他帖子。因此我使用add_action( \'save_post\', \'create_another_post\');true) 或者它没有(返回false)我将如何实施此true/false 脚本我感谢你的帮助和想法。

2 个回复
SO网友:s_ha_dum

对的动作挂钩不会返回内容,老实说,如果您需要一个动作挂钩来返回内容,那么很有可能您做错了什么。但是,如果结果证明这是您唯一的选择,那么最干净的方法就是使用静态变量:

function action_value_grab() {
  static $value = false;
  $is_hooked = current_filter();
  if (!empty($is_hooked)) {
    $value = true;
  }
  return $value;
}

// var_dump(action_value_grab()); // debug

add_action(\'test_hook\',\'action_value_grab\');
do_action(\'test_hook\');

// var_dump(action_value_grab()); // debug
只需调用函数--static_value_grab()-- 在钩子激发以获取$value.

SO网友:greenone83

在我看来,这是一个有效的方案,它是一种可靠的方式,可以将您的插件作为其他插件的接口,但每个插件都可以是活动的或非活动的,wp不会崩溃(与直接调用可能不存在的方法相比,因为插件没有激活

我通过传递一个对象来解决它,如下所示:

// define action with param for result transport

function some_action($someParam, $transport) {
    // do stuff
    if($someParam > 10) {
         $transport->return = true;
    } else {
         $transport->return = 5;
    }
}
add_action(\'some_action\', \'some_action\', 10, 2);


// call action

do_action(\'some_action\', 5, $transport = new stdClass());
var_dump($transport->return);
// output true

do_action(\'some_action\', 11, $transport = new stdClass());
var_dump($transport->return);
// output 5

结束

相关推荐

get_posts() and filters

我为添加了自定义筛选函数the_posts 在插件中筛选。add_filter(\'the_posts\', \'posts_filter\'); function posts_filter() { … } 这在主循环中运行得很好,这意味着帖子会按照我在posts_filter 作用但我正在打电话get_posts() 在ajax请求中获取一些帖子。在那里,过滤器不起作用。query_posts() 或自定义wp_query 不要工作太多。所以问题是:我如何才能在主循环旁获得按the_p