或多或少是这样的post
作品您需要做的是WordPress在后端所做的事情。
提交表单,处理表单,重定向回原始页面这样,刷新不会通过post
数据这个过程有一个名字,但我现在记不起它是什么了。
get
顺便说一下,不会发出警告,但会“双重插入”。
您的问题很大一部分是代码的编写方式,每次加载页面时,您都在构建$myPost
变量和运行wp_insert_post( $myPost);
你甚至没有检查一下$_POST
进行此操作之前,请先查看数据。无论表单是否已提交,您都在尝试插入帖子。幸运的是wp_insert_post
如果缺少几个关键参数,它就会死掉。至少你应该。。。
if (!empty($_POST)) {
$title = $_POST[\'title\']; //from your form...
$content=$_POST[\'cntnt\'];
$excerpt=$_POST[\'excerpt\'];
$custom = $_POST[\'custom\'];
//-- Set up post values
$myPost = array(
\'ID\' => \'\',
\'post_title\' => $excerpt,
\'post_excerpt\' => $excerpt,
\'post_status\' => \'publish\',
\'post_type\' => \'post\',
\'post_author\' => $authorID,
\'post_content\' =>$content,
\'comment_status\' => \'closed\',
\'ping_status\' => \'closed\',
\'post_category\' => array(\'7\'),
);
$new_post = wp_insert_post( $myPost);
add_post_meta($new_post, \'rating\', $custom, true);
}
至少这不会在每次加载页面时都运行。但是,在使用元素之前,您应该真正检查它们。。。
$title = (isset($_POST[\'title\'])) ? $_POST[\'title\'] : \'\';
我会尽力
sanitize it 也然后,您应该在页面的早期而不是底部处理表单,并使用
wp_safe_redirect
, 如果表单提交成功。由于这是前端,这意味着您需要在
get_header
功能,以便在将任何内容发送到浏览器之前进行重定向。
真的,我无意冒犯你,但你的问题比你想象的要严重。您在那里的代码设计非常糟糕,有几种不同的方式。