如何根据POST_UPDATED的返回值为POST_UPDATED_MESSAGES设置动态值?

时间:2015-05-22 作者:Josiah Sprague

我很熟悉how to set custom messages for post updates 使用post_updated_messages 行动挂钩。这个问题略有不同。

我有一个功能/动作挂钩post_updated:

function my_custom_function($post_id) {
  $response = ping_other_service_and_get_confirmation($post_id);
  syslog(LOG_INFO, \'Response:\' . $response[\'body\']);
  return $response[\'body\'];
}
add_action( \'post_updated\', \'my_custom_function\');
假设ping_other_service_and_get_confirmation() 函数ping其他一些web服务,让它知道帖子已经更新,并以字符串形式返回确认消息。现在,我正在将该字符串记录到系统日志中,这对于开发来说很好,但我需要在post updates消息中使用该字符串,以便客户端能够看到确认。我该怎么做?有可能吗?

2 个回复
最合适的回答,由SO网友:Josiah Sprague 整理而成

我终于想出了一个解决方案,使用查询变量将状态消息传递到下一个页面,以便在post_updated_messages. 这里是我所做工作的简化版本,为了简单起见,更改了所有函数名,以关注手头的问题;

首先,为$_POST var;

function my_custom_function($post_id) {
  $response = ping_other_service_and_get_confirmation($post_id);
  $_POST[\'status_response\'] = $response[\'body\'];
}
add_action( \'post_updated\', \'my_custom_function\');
然后,设置该值后,我将编辑后页面重定向到同一URL,并添加一个具有我需要的值的查询字符串;

function pass_status_response($location){
  if (isset($_POST[\'status_response\'])) {
    $location = esc_url_raw(add_query_arg(\'status_response\', $_POST[\'status_response\'], $location));
  }
  return $location;
}
add_filter(\'redirect_post_location\', \'pass_status_response\');
最后,我将该值附加到post_updated_messages.

function add_status_message($messages) {
  if ($_GET[\'status_response\']) {
    $post = get_post();
    $post_type = get_post_type($post);
    foreach ($messages[$post_type] as &$msg) {
      $msg = $msg . \'Status: \' . $_GET[\'status_response\'];
    }
  }
  return $messages;
}
add_filter(\'post_updated_messages\', \'add_status_message\');
这似乎工作得相当好,然而,这是非常实验性的。如果有人对我如何改进此解决方案有任何反馈,我将不胜感激。谢谢

SO网友:Mohammad Mursaleen

我相信你可以得到同样的结果,你正在寻找与过滤器挂钩post_updated_messages. 你只需要一个帖子id就可以确认你正在做的事情,你也可以在这里使用$_GET[\'post\'] 其中包含您的帖子id。

这是一个函数,它将完成这件事。

function your_modified_message( $messages ){

    if(isset($_GET[\'post\'])){

        $post_id = $_GET[\'post\'];

        // get your response for respective post_id 
        $response = ping_other_service_and_get_confirmation($post_id);
        syslog(LOG_INFO, \'Response:\' . $response[\'body\']);

        // get your information concatenated with update post message in next line
        $messages[\'post\'][1] = $messages[\'post\'][1] . \'<br>\' . $response[\'body\'];

        return $messages;

    } else {

        return $messages;

    }

}
// using filter hook to modify your message
add_filter( \'post_updated_messages\', \'your_modified_message\',10,1);
希望这对你有用。

结束

相关推荐

如何将POST_ROW_ACTIONS()与自定义操作函数链接

我在下面定义了一个自定义帖子类型,我想添加一个自定义行操作,以允许我通过管理面板“更新”帖子class LeagueCpt { function __construct() { add_action( \'init\', array(&$this,\'registerLeagueCPT\')); add_filter(\'post_row_actions\', array(&$this,\'post_r