我正在为用户创建一个表单,以便从前端提交帖子。提交表单后,用户应被重定向到他们刚刚创建的帖子。
我的函数中有这段代码.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();
}
?>