更新帖子时未触发SAVE_POST

时间:2016-05-07 作者:enguerranws

我遇到了一些奇怪的事情。

我在函数上做了一个函数。保存或更新帖子时要触发的php。

function gh_set_inner_project_order($post_id){

  $parent_id = wp_get_post_parent_id( $post_id );

  var_dump($parent_id);
  if($parent_id == 4){
    $page_projects = gh_get_inner_project_order($post_id);
    $i = 0;
    foreach ($page_projects as $project_id) {
      update_field(\'inner_order\', $i, $project_id);
      $i++;
    }
  }

}
然后,简单地说:

add_action(\'save_post\', \'gh_set_inner_project_order\');
在我的localhost上,它工作得很好。当我保存帖子或更新帖子时,会触发该函数,它会记录$parent\\u id。

But on the distant server, it only works when I create a new post / page. I really can\'t figure out why.

有什么想法吗?

编辑:

为了确保这一点,我修改了我的函数,因此现在它实际上是最小的:

function gh_set_inner_project_order(){


  var_dump(\'---------- gh_set_inner_project_order ---------\');


}
但是,当我在远程服务器上更新帖子时,它仍然不起作用(在我的本地主机上没有问题)。

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

A.var_dump() 在里面save_post 操作不会在屏幕上显示任何信息。嗯,只有当您在“添加新”屏幕上时才会这样做。这是因为在创建新帖子或编辑帖子时,后续的操作顺序不同。

当你点击“发布”或“更新”按钮时,有一个请求,帖子被保存,save_post 操作被触发,然后重定向到编辑屏幕。

重定向意味着一个新请求,而这个新请求不会触发save_post 操作,因此您无法看到打印的任何信息,因为该操作不会触发以生成您看到的屏幕。

如果需要调试save_post 行动,你可以跟随this example (它需要WP_DEBUG on 并将信息存储在服务器的错误日志文件中,请参阅error_log() PHP function):

if(!function_exists(\'log_it\')){
 function log_it( $message ) {
   if( WP_DEBUG === true ){
     if( is_array( $message ) || is_object( $message ) ) {
       error_log( print_r( $message, true ) );
     } else {
       error_log( $message );
     }
   }
 }
}
然后,在save_post 回调:

add_action(\'save_post\', \'gh_set_inner_project_order\');
function gh_set_inner_project_order() {
    log_it( $parent_id );
    // .... 
}
请记住,您可以将自定义错误日志文件传递给error_log() 如果要将信息记录在不同于服务器日志的文件中,请使用此函数。看见error_log() docs 了解更多信息。例如:

error_log( $var_to_log, 3 , __DIR__ . "/my-log.txt" );

相关推荐

自定义发布类型的POST_ROW_ACTIONS

我正在使用this 在WordPress Admin中具有重复post函数的代码。但是,当我为自定义帖子类型添加过滤器时,如下所示:add_filter( \'directory_row_actions\', \'rd_duplicate_post_link\', 10, 2 ); (自定义帖子类型的注册名称为directory) - 它不会将其添加到条目标题下的操作行中。当我为帖子或页面执行此操作时,如下所示:add_filter( \'post_row_actions\', \'rd_dup