web-dev-qa-db-ja.com

メタボックスを更新するためにwp_insert_postをどのように使用しますか?

フロントエンドの送信フォームを作成するためにwp_insert_postを使用しようとしているので、訪問者は投稿を作成し、その投稿のメタボックスフィールドを更新できます - カスタムフィールドではなく

たとえば、送信フォームで次のように入力したとします。

<?php update_post_meta($post_id, $meta_key, $meta_value); ?>

...新しく作成された投稿の組み込みカスタムフィールドセクションは更新されますが、私が作成したメタボックスは更新されません。何か案は?

1
Chris Molitor

それはすべて同じテーブルに入っています。挿入に正しいキー名を使用していないのかもしれません。カスタムフィールドキーとメタボックスに使用されるキーを区別する唯一のものは、メタボックスキーには通常カスタムフィールドセクションに表示されるリストから隠すためにアンダースコアが付いているということです。単一のエントリの下に複数のものを配列として格納することも可能です。メタボックスを生成するために何らかのメタボックスヘルパークラスを使用しているのであれば、これが当てはまります。メタボックスデータがどのように格納されているかを確認するには、テーブルを直接見てください。

2
Milo

これが私がフロントエンドフォームから投稿を追加するために使用したコードです。これはメタデータと分類用語も追加します。スニペットは、セキュリティ、データ検証、およびデータサニタイズのすべてを抽出することに注意してください。データをすべてサニタイズしたら、データベースに追加するためにデータに対して何をするのかを示すだけです。

// Submit the values if there are no errors
if(empty($errors))
{
    // Prepare title
    $term = get_term_by('id', $values['complaint_type'], 'complaint-type');
    $title = $values['address_clean'].' ('.$term->name.')';

    // Gather post data
    $post = array(
        'post_title' => $title,
        'post_content' => $values['description'],
        'post_status' => 'publish', 
        'post_type' => PREFIX_POST_TYPE_NAME,
        'post_author' => 1
    );

    // Attempt to add post
    if($id = wp_insert_post($post))
    {
        // Add metadata to post
        update_post_meta($id, '_'.PREFIX_PLUGIN_NAME_L.'_latitude', $values['latitude']);
        update_post_meta($id, '_'.PREFIX_PLUGIN_NAME_L.'_longitude', $values['longitude']);

        // Associate complaint-type
        if(!wp_set_post_terms($id, $values['complaint_type'], 'complaint-type'))
            $errors['wp_set_post_terms'] = 'There was an error adding the complaint type.';
    }
    else
        $errors['wp_insert_post'] = 'There was an error adding the complaint.';
}
2
tollmanz