为什么wp_UPDATE_POST会导致白屏?

时间:2021-05-19 作者:Jani

我制作了一个自定义的帖子类型,名为;福格拉斯;。福格拉斯帖子类型中的每一篇帖子都没有标题,也没有永久链接。它们都是保存后的自动拔模。因此,我想获取帖子ID,并将其设置为标题和永久链接。我使用以下代码:

    function foglalasi_adatok( $post_id ) {
       $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);
    }

add_action(\'save_post_foglalas\', \'foglalasi_adatok\');
在这种类型中添加新帖子时,Wordpress会抛出一个空白页。在评论wp\\u update\\u post($post)时,update\\u post\\u meta工作正常。

我做错了什么?

编辑:我选中了,没有插件冲突。

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

在评论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\' );

相关推荐