我正在尝试设置一个前端帖子提交表单。我得到一个错误:
Warning: Cannot modify header information - headers already sent by (output started at /home/sadlight/public_html/members/wp-content/themes/default-child/announcement-submit.php:1) in /home/sadlight/public_html/members/wp-includes/pluggable.php on line 876
公告提交。php是我下面的模板。
我试过了this solution, 但是不行。
此外,当我在下面的代码中使用wp\\u重定向时,它会插入两篇文章,而不是一篇。当我移除它时,它只进入一个。任何帮助都会很好!
仅供参考:我正在使用buddypress和默认的buddypress主题。
<?php
/*
* Template Name: Announcement Submit
*/
$postTitleError = \'\';
if ( isset( $_POST[\'submitted\'] ) ) {
if ( trim( $_POST[\'postTitle\'] ) === \'\' ) {
$postTitleError = \'Please enter a title.\';
$hasError = true;
}
}
get_header(); ?>
<div id="content">
<div class="padder">
<form action="" id="primaryPostForm" method="POST">
<fieldset>
<label for="postTitle"><?php _e(\'Post Title:\', \'framework\') ?></label>
<input type="text" name="postTitle" id="postTitle" class="required" value="<?php if ( isset( $_POST[\'postTitle\'] ) ) echo esc_attr( stripslashes( $_POST[\'postTitle\'] ) ); ?>" />
</fieldset>
<fieldset>
<?php wp_editor( \'Testing some content\', \'postcontent\'); ?>
</fieldset>
<fieldset>
<?php wp_nonce_field( \'post_nonce\', \'post_nonce_field\' ); ?>
<input type="hidden" name="submitted" id="submitted" value="true" />
<button type="submit"><?php _e(\'Add Post\', \'framework\') ?></button>
</fieldset>
</form>
<?php if ( $postTitleError != \'\' ) { ?>
<span class="error"><?php echo $postTitleError; ?></span>
<div class="clearfix"></div>
<?php } ?>
<?php
if ( isset( $_POST[\'submitted\'] ) && isset( $_POST[\'post_nonce_field\'] ) && wp_verify_nonce( $_POST[\'post_nonce_field\'], \'post_nonce\' ) ) {
if ( trim( $_POST[\'postTitle\'] ) === \'\' ) {
$postTitleError = \'Please enter a title.\';
$hasError = true;
}
$post_information = array(
\'post_title\' => wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => wp_kses_post( $_POST[\'postcontent\'] ),
\'post_type\' => \'post\',
\'post_status\' => \'pending\'
);
wp_insert_post( $post_information );
}
$post_id = wp_insert_post( $post_information );
if ( $post_id ) {
wp_redirect( home_url() );
exit;
}
?>
</div><!-- .padder -->
</div><!-- #content -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
最合适的回答,由SO网友:EAMann 整理而成
正如奥托所指出的,在调用之前,您正在向浏览器发送数据wp_redirect()
.
get_header()
将输出页面的HTML<head>
- 您正在将整个表单打印到页面,然后再进行处理
要解决“邮件头已发送”问题,您需要将所有表单处理从页面底部移动到页面顶部。如果你需要打电话
wp_redirect()
你必须打那个电话
before 您可以在页面上打印任何内容—HTML或其他任何内容。
至于重复的post条目,您有wp_insert_post()
在代码中输入两次:
if ( isset( $_POST[\'submitted\'] ) && isset( $_POST[\'post_nonce_field\'] ) && wp_verify_nonce( $_POST[\'post_nonce_field\'], \'post_nonce\' ) ) {
if ( trim( $_POST[\'postTitle\'] ) === \'\' ) {
$postTitleError = \'Please enter a title.\';
$hasError = true;
}
$post_information = array(
\'post_title\' => wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => wp_kses_post( $_POST[\'postcontent\'] ),
\'post_type\' => \'post\',
\'post_status\' => \'pending\'
);
wp_insert_post( $post_information );
}
$post_id = wp_insert_post( $post_information );
因此,您试图在每次页面加载时插入帖子,但如果没有提交任何内容,则
$post_information
不会设置变量,也不会插入任何内容。然而,当您提交表单时,您正在布尔检查内部和布尔检查外部创建一个新帖子。