我遇到了一些奇怪的事情。
我在函数上做了一个函数。保存或更新帖子时要触发的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 ---------\');
}
但是,当我在远程服务器上更新帖子时,它仍然不起作用(在我的本地主机上没有问题)。
最合适的回答,由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" );