函数.php带wp_redirect($url);退出();使WordPress网站空白



我正在为用户创建一个表单,以便从前端提交帖子。提交表单后,用户应被重定向到他们刚刚创建的帖子。

我的函数中有这段代码.php。但是它使我的网站空白...

我认为它与 exit() 行有关,我试图修改它,但它不起作用,什么也没发生。它只显示一个白页。

  <?php 
    wp_register_script( 'validation', 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js', array( 'jquery' ) );
    wp_enqueue_script( 'validation' );

    $post_information = array(
        'post_title' => wp_strip_all_tags( $_POST['postTitle'] ),
        'post_content' => $_POST['postContent'],
        'post_type' => 'post',
        'post_status' => 'publish'
    );
    $post_id = wp_insert_post($post_information);
    $url = get_permalink( $post_id );
    wp_redirect($url);
    exit();
    ?>

你有什么想法吗?我该如何解决这个问题?谢谢!

好吧,它不会那样工作。首先,你不应该在加载函数.php时添加这样的脚本(因为它加载得太早了,在WP实际决定如何处理来自浏览器的请求之前) - 使用wp_enqueue_scripts:

<?php
function add_my_scripts() {
    wp_register_script( 'validation', 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js', array( 'jquery' ) );
    wp_enqueue_script( 'validation' );
}
add_action( 'wp_enqueue_scripts', "add_my_scripts");
?>

您创建新帖子会在每个请求上运行 - 即使您的浏览器想要显示该新帖子时,即使对于该请求也是如此。

根据你的确切需求,你可能也想把它放到一个动作钩子中,但如果你检查它实际上是一个包含 postTitle 的 POST 请求,它应该已经有所帮助了,如下所示:

<?php
if( $_SERVER["REQUEST_METHOD"] == "POST" && array_key_exists("postTitle", $_POST)) {
    $post_information = array(
        'post_title' => wp_strip_all_tags( $_POST['postTitle'] ),
        'post_content' => $_POST['postContent'],
        'post_type' => 'post',
        'post_status' => 'publish'
    );
    $post_id = wp_insert_post($post_information);
    if(is_wp_error($post_id)) {
        print "An error occured :(n";
        var_export($post_id);
    }
    else {
            $url = get_permalink( $post_id );
            wp_redirect($url);
    }
    exit();
}
?>

最新更新