WP_UPDATE_POST()示例...如何更新文本区域中的_CONTENT?

时间:2011-07-07 作者:m-torin

我正在使用下面的函数从前端更新post meta。如何添加最佳添加文本区域以更新the_content() 使用wp_update_post()?

if ( isset( $_POST[\'albums\'] ) && wp_verify_nonce($_POST[\'albums\'],\'update_albums_postmeta\') ) 
    { //if nonce check succeeds.
        global $post;
        $postid = $post->ID;
        $data = $_POST[\'priceone\'];
              update_post_meta($postid,\'_releasedate\',$data);
        $data = $_POST[\'pricetwo\'];
              update_post_meta($postid,\'_amazonlink\',$data);
    }
-

Edit:

因此,此代码段将更改发布到数据库中,但是当页面在提交旧的the_content() 正在显示。必须手动刷新帖子才能查看更改。

我的代码片段是否格式错误?

if ( isset( $_POST[\'drw_inventory\'] ) && wp_verify_nonce($_POST[\'drw_inventory\'],\'update_drw_postmeta\') ) 
    { //if nonce check succeeds.
        global $post;
        $data_content = $_POST[\'description\'];

        $my_post = array();
        $my_post[\'ID\'] = $post->ID;
        $my_post[\'post_content\'] = $data_content;
        wp_update_post( $my_post );
    }

3 个回复
最合适的回答,由SO网友:rocketman27 整理而成

这取决于你在哪里使用这个。global$post是否为您提供了要更新的特定帖子?我觉得您的Wordpress更新帖子代码很正确,但是if语句是否有效,以及$post->ID是否生成了正确的int?

SO网友:Lucas Bustamante

您可以覆盖WP_Post 属性并将其发送到wp_update_post:

/** @var WP_Post $post */
$post = get_post( 123 );

$post->post_content = "Some other content";

wp_update_post( $post );
我发现它比数组更简单。

SO网友:jer0dh

我也有同样的问题。我的代码在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.

结束

相关推荐