我也有同样的问题。我的代码在single.php
文件我正在使用本文中的代码:Front end post editing using a form
单击submit后,中的代码single.php
是否运行wp_update_post()
返回post ID。由于这是从模板文件运行的,因此已经填充了wp\\u查询,因此页面仍然使用旧的post数据呈现。如果刷新而不提交,则会填充新数据。
我不确定这是否是最好的解决方案,但它确实有效。之后wp_update_post()
运行时,我覆盖全局$wp_query
变量,该变量使用调用此模板文件之前运行的同一查询。
global $wp_query;
if (\'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty($_POST[\'post_id\']) && !empty($_POST[\'post_title\']) && isset($_POST[\'update_post_nonce\']) && isset($_POST[\'post_content\'])) {
$post_id = $_POST[\'post_id\'];
$post_type = get_post_type($post_id);
$capability = (\'page\' == $post_type) ? \'edit_page\' : \'edit_post\';
if (current_user_can($capability, $post_id) && wp_verify_nonce($_POST[\'update_post_nonce\'], \'update_post_\' . $post_id)) {
$post = array(
\'ID\' => esc_sql($post_id),
\'post_content\' => wp_kses_post($_POST[\'post_content\']),
\'post_title\' => wp_strip_all_tags($_POST[\'post_title\'])
);
$result = wp_update_post($post, true);
if (is_wp_error($result)){
wp_die(\'Post not saved\');
}
$wp_query = new WP_Query($wp_query->query); //resets the global query so updated post data is available.
} else {
wp_die("You can\'t do that");
}
}
我试过打电话
wp_reset_postdata()
和
wp_reset_query()
相反,我猜它是重置为缓存副本,因为我仍然得到旧的post数据。
另一个可行的解决方案是使用以下方法获取当前url:
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
之后
wp_update_post()
:
wp_redirect($current_url);
$current\\u url的代码为
found here.