在评论wp\\u update\\u post($post)时,update\\u post\\u meta工作正常。
是的,问题不在于update_post_meta()
, 但事实确实如此wp_update_post()
因为它使用wp_insert_post()
激发了save_post_foglalas
挂钩(即。save_post_<post type>
), 因为你的函数调用wp_update_post()
, 然后你的函数被无限地调用,最终导致了死亡白屏(WSOD)。一、 钩子调用你的函数,你的函数调用wp_update_post()
, 然后钩子再次调用您的函数,然后同样的事情一次又一次地发生,它永远不会结束,或者它以WSOD结束。。
因此,如果将函数挂接到该挂钩上(或save_post
hook), 函数需要调用wp_update_post()
或wp_insert_post()
, 然后,您需要取消钩住函数,然后重新钩住它,例如,在调用之后wp_update_post()
:
// Unhook the function to avoid infinite loop.
remove_action( \'save_post_foglalas\', \'foglalasi_adatok\' );
// Then update the post, which calls save_post_foglalas again.
wp_update_post( $post );
// And re-hook the function.
add_action( \'save_post_foglalas\', \'foglalasi_adatok\' );
此外,正如WordPress Codex团队在
this comment, 你应该打电话
wp_is_post_revision()
确保正在更新的帖子不是修订版。
下面是基于您的代码的完整示例:
function foglalasi_adatok( $post_id ) {
// Do nothing, if the post is a revision.
if ( wp_is_post_revision( $post_id ) ) {
return;
}
// Unhook this function to avoid infinite loop.
remove_action( \'save_post_foglalas\', \'foglalasi_adatok\' );
$post = array(
\'ID\' => $post_id,
\'post_title\' => $post_id,
\'post_name\' => $post_id,
);
wp_update_post( $post );
update_post_meta( $post_id, \'foglalas_szama\', $post_id );
// Now re-hook this function.
add_action( \'save_post_foglalas\', \'foglalasi_adatok\' );
}
add_action( \'save_post_foglalas\', \'foglalasi_adatok\' );