WordPressでwp_insert_post関数を利用した投稿方法。(カスタムフィールド、WP to Twitter対応版)
WordPressで誰でも投稿できるフォームを作る際等に利用すると便利なwp_insert_post関数の使い方と、その覚書を。
また、wp_insert_post関数だけだとカスタムフィールドの投稿には対応していないので、そちらについても。
公式のドキュメントでwp_insert_post関数を確認するとわかるのですが、引数に配列で投稿データを渡すと投稿が実行されます。
$post_value = array(
'post_author' => 1,// 投稿者のID。
'post_title' => 'テストタイトル',// 投稿のタイトル。
'post_content' => 'テスト本文', // 投稿の本文。
'post_category' => array(1,5), // カテゴリーID(配列)。
'tags_input' => array('タグ1′,'タグ2′), // タグの名前(配列)。
'post_status' => 'publish' // 公開ステータス。
);
wp_insert_post($post_value);
ただ、wp_insert_post関数で投稿できるのは、「wp_posts」テーブルにある項目だけなので、update_post_meta関数を利用してカスタムフィールドに値を投稿します。
update_post_meta関数で投稿するには記事のIDが必要になるので、wp_insert_post関数が成功した時の戻り値(作成された記事の ID。失敗時は0)を利用します。
$post_value = array(
'post_author' => 1,// 投稿者のID。
'post_title' => 'テストタイトル',// 投稿のタイトル。
'post_content' => 'テスト本文', // 投稿の本文。
'post_category' => array(1,5), // カテゴリーID(配列)。
'tags_input' => array('タグ1′,'タグ2′), // タグの名前(配列)。
'post_status' => 'publish' // 公開ステータス。
);
$insert_id = wp_insert_post($post_value); //$insert_idには投稿のID(「wp_posts」テーブルの「ID」)が入る。 投稿に失敗した場合は0が返る。
if($insert_id) {
update_post_meta($insert_id, 'key1′, 'カスタム1′); // キーが「key1」のカスタムフィールドの値に「カスタム1」を投稿
update_post_meta($insert_id, 'key2′, 'カスタム2′); // キーが「key2」のカスタムフィールドの値に「カスタム2」を投稿
/* 投稿に成功した時の処理等を記述 */
} else {
/* 投稿に失敗した時の処理等を記述 */
}
※update_post_meta関数は本来上書き用の関数の様なのですが、値が存在しない時にはadd_post_meta関数が呼び出されるので新規投稿・上書きどちらにも対応できます。(詳細は公式のドキュメントでご確認を。)
この方法でカスタムフィールドにも値を投稿する事が出来ます。
ただ、この方法で投稿を行うとWP to Twitterでの自動投稿時にカスタムフィールドの値が渡らないようです。(あまりWP to Twitterでカスタムフィールドの値を使っている人はいないかもしれませんが・・・)
恐らく、
- wp_insert_postで記事を投稿(公開)→ この時点でWP to Twitterが自動投稿
- wp_insert_postの返り値を利用してカスタムフィールドを投稿
という実行順番になっている為と思われます。
で、ちょっと悩んで色々試したのですが、
- wp_insert_postで記事を投稿(下書き)
- wp_insert_postの返り値を利用してカスタムフィールドを投稿
- wp_insert_postの返り値を利用してwp_insert_postで記事を上書き(公開)→ この時点でWP to Twitterが自動投稿
とすれば、WP to Twitterでの自動投稿時にもカスタムフィールドの値が渡る事がわかりました。
※方法として正しいかは分かりませんが。。。
以下がそのソースになります。
$post_value = array(
'post_author' => 1,// 投稿者のID。
'post_title' => 'テストタイトル',// 投稿のタイトル。
'post_content' => 'テスト本文', // 投稿の本文。
'post_category' => array(1,5), // カテゴリーID(配列)。
'tags_input' => array('タグ1′,'タグ2′), // タグの名前(配列)。
'post_status' => 'draft' // 公開ステータスをこの時点では下書きにする。
);
$insert_id = wp_insert_post($post_value); //下書き投稿。
if($insert_id) {
update_post_meta($insert_id, 'key1′, 'カスタム1′); // キーが「key1」のカスタムフィールドの値に「カスタム1」を投稿
update_post_meta($insert_id, 'key2′, 'カスタム2′); // キーが「key2」のカスタムフィールドの値に「カスタム2」を投稿
//配列$post_valueに上書き用の値を追加、変更
$post_value['ID'] = $insert_id; // 下書きした記事のIDを渡す。
$post_value['post_status'] = 'publish'; // 公開ステータスをこの時点で公開にする。
$insert_id2 = wp_insert_post($post_value); //上書き(投稿ステータスを公開に)
if($insert_id2) {
/* 投稿に成功した時の処理等を記述 */
} else {
/* 投稿に失敗した時の処理等を記述 */
}
} else {
/* 投稿に失敗した時の処理等を記述 */
}
※上書き時にもタイトル、本文がwp_insert_post関数に渡されないと投稿が失敗するみたいです。(検証が不十分なのですが・・・)
この方法を使えばWP to Twitter以外にも記事の公開がトリガーとなるプラグイン等にカスタムフィールドの値を渡せるのではないでしょうか。
y
2013.11.11 - 16:50 ·update_post_metaでdescription,keywordsを追加したいのですが、できません。
方法ありますか?
Johnk359
2014.05.26 - 05:54 ·You could certainly see your skills within the work you write. The world hopes for more passionate writers like you who arent afraid to say how they believe. Always follow your heart. kdakfcbcdkde
supreme パーカー 偽物
2016.10.20 - 15:46 ·あまり欲しいと思わなかったので。
http://www.subcopy.com/
2016.10.27 - 18:36 ·水晶振動子は電圧をかけると一定の周期で振動する。
トムブラウン コピー
2017.02.04 - 18:46 ·連休前にかたづけなければならない用事も山盛りですということで、このHPにまとまったことを書く余裕がありません。
Hurd
2017.02.27 - 08:54 ·I liҝe this pⲟst, enjoyed this one thank you for posting.
“The difference between stupidity and genius is that genius has its limits.” bby Albert Einstein.
Nichole
2017.02.27 - 10:59 ·As soon aѕs I found this websitᥱ I went on reddit to share some of the love
woth them.
ボッテガヴェネタ スーパーコピー
2017.03.13 - 12:56 ·おそるべし!ポケモンgo ちょうど近くまできたので ぴかちゅう がいるという、新宿御.
クロム ハーツ スーパー コピー
2018.08.14 - 11:12 ·クロムハーツの クロム ハーツ スーパー コピーTシャツが入荷します。遊び心あるアシンメトリーな 口 のプリントのデザインです。ドライタッチと上品な光沢が特徴的な素材で、発泡プリントロゴには立体感があります。ブランド コピー 優良 店アシンメトリーな裾はスリット部分を結んでスタイリングすることもできます。着いて活発になります!
SUPREME コピー ブランド雑貨
2018.11.22 - 17:16 ·SUPREME コピー ブランド雑貨高い伸縮性と保温性があり、使い勝手抜群の頼れるアイテムです。 ブランド 通販 店秋冬のカジュアル、ストリートスタイルには必需品のアイテム!
صور ورد جميلة
2018.12.18 - 09:44 ·خريطة أوروبا السياسية
http://finalembrace.com/sitemap.xml
2019.01.08 - 12:12 ·エンポリオアルマーニ セットアップコピー
ジバンシィ コピー 店舗
2019.01.16 - 16:25 ·さすがです!そうなの!回ステージがあったから組み合わせ変えてみました?ありがとう!
ルイ ヴィトン スーパーコピー
2019.03.12 - 17:24 ·また、ブラシの先が丸くなっていることから、ヘッドマッサージのときに使ってもOKポップでかわいいルックスのおかげで、使う度に気分が上がること間違いなし!
コピー ブランド
2019.04.30 - 10:33 ·「こんにちは!みなさんはスプリングコート持っていますか?まだまだ寒いこの時期から次の秋にも使えて本当に便利なアイテムですよ。
バレンシアガ コピー
2019.05.30 - 21:10 ·長袖シャツブランド
ロレックス スーパーコピー
2020.08.12 - 17:05 ·レビューが遅くなり、申し訳ありません。大変綺麗なお品でした。迅速丁寧な、梱包発送でした。機会がありましたら、また利用させていただきます、ありがとうございました。