前回、「wp_insert_postの戻り値には記事ID(POST_ID)が返るらしい」という記事でPOST_IDが取得できる事が分かりましたが、POST_IDを元にカスタムフィールドを入力できないか試してみた所、出来ることが確認できたのでメモ。
確認環境
- WorPress 3.0.6
大まかな流れ
大まかには、以下のような流れになります。
- wp_insert_post関数を使って記事を投稿する(wp_insert_postの記述の詳細については「関数リファレンス/wp insert post – WordPress Codex 日本語版」)あたりを参考にしてください
- wp_insert_postを実行すると記事が投稿されつつ、返り値としてPOST_IDが取得できるので、適当な変数に入れておきます。(ここでは仮に$postidとします)
- $wpdb->queryを使い、カスタムフィールドに追加する
コード
// データベースに投稿を追加
//$postの中身はwp_insert_postの仕様を見ながら記事を作成してください
//記事が投稿されつつ、$postidには、返り値として記事IDが代入されます。
$postid = wp_insert_post( $post );
//$wpdb->queryを使いカスタムフィールドに値を追加する
$wpdb->query($wpdb->prepare(
"INSERT INTO {$wpdb->postmeta}
(
meta_id
,
post_id
,
meta_key
,
meta_value
)
VALUES
( NULL, '{$postid}', 'カスタムフィールド名1', '値' ),
( NULL, '{$postid}', 'カスタムフィールド名2', '値' )
;"
));
?>
解説&メモ
- 「wp-load.php」「wp-includes/post.php」「wp-blog-header.php」の読み込み先パスは、各自の環境で変更してください。
- $postの中身はwp_insert_postの仕様「関数リファレンス/wp insert post – WordPress Codex 日本語版」を見ながら記事を作成してください
- 「$wpdb->prepare()」は、SQLインジェクション対策のための処理です。
- $wpdb->postmetaは、追加するテーブルを指定しています。カスタムフィールドはwppostmetaに追加していきます。プレフィクス(wp)は省略して記述します。
- meta_idは、NULLにすることでWordPressが自動で番号を振ってくれます。’NULL’ではなく、NULLです。(シングルクォーテーションは不要)