web-dev-qa-db-ja.com

wp_update_post()の例...テキストエリアのthe_contentを更新する方法

フロントエンドから投稿メタを更新するために以下の関数を使用しています。 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);
    }

-

編集:

そのため、このスニペットはデータベースに変更をポストしていますが、送信時にページが更新されると、古い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 );
    }
6
torinagrippa

それはあなたがこれを使用している場所によって異なります。 global $ postは更新したい特定の投稿を与えていますか?あなたのWordpressの更新投稿コードは私には正しく見えますが、ifステートメントは有効です、そして$ post-> IDは正しいintをもたらしますか?

1
rocketman27

私は同じ問題を抱えています。私のコードはsingle.phpファイルにあります。私はこの記事のコードを使っています: フォームを使ったフロントエンドの投稿編集

送信をクリックした後、single.phpのコードは返された投稿IDでwp_update_post()を実行します。これはテンプレートファイルから実行されているので、wp_queryは既に生成されているので、ページは古い投稿データでレンダリングされます。送信せずに更新すると、新しいデータが入力されます。

これが最善の解決策かどうかはわかりませんが、うまくいきます。 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()を呼び出そうとしましたが、古い投稿データがまだ残っているので、キャッシュコピーにリセットしていると思います。

うまくいったもう一つの解決策は現在のURLを取得することでした:

global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request)); 

そしてwp_update_post()の後:

wp_redirect($current_url);

$ current_urlのコードは で見つかりました。

2
jer0dh