プログラムでWordPressの投稿とカスタムフィールドを合わせて追加する方法

スポンサーリンク

WordPressで記事を増やす時は「投稿」→「新規追加」からタイトルや本文などを入力していくと思います。

ブログを書く時はそのやり方だと思いますが、情報サイトなどブログの形と異なる場合は自動で投稿したいという場合もあると思います。

その場合はプログラムのコードを書く必要があります。実際に私がそれを必要とする状況だったので、コードを作ってみました。

単純に記事を1つ増やすだけでなく、カスタムフィールドに必要なデータも合わせて登録する方法を紹介します。

Here be Elephpants!
Here be Elephpants! / Sara Golemon

このページの目次

プログラムで投稿するコード

もちろんコードはPHPです。まずはコードを見ましょう。

//引数設定
$post_value = array(
    'post_author' => 1,							// 投稿者ID
    'post_title' => 'テストタイトル',			// 投稿タイトル
    'post_content' => '本文あいうえお', 		// 本文
    'post_name' => 'testtitle', 					// スラッグ
    'post_status' => 'draft' 					// 公開ステータス
);

//投稿の追加
$insert_id = wp_insert_post($post_value);
 
if($insert_id) {
    // 投稿に成功した時の処理
    update_post_meta($insert_id, 'hogehoge', 'ほげほげ');
    update_post_meta($insert_id, 'product_id', '1');
    update_post_meta($insert_id, 'price', '2,000');
} else {
    // 投稿に失敗した時の処理
}

上から順番に解説します。

最初にpost_valueという名前の変数に投稿情報を設定します。記事タイトルは「post_title」、記事本文は「post_content」です。ここでは5つ設定しましたが、他にも自由に設定できます。
参考:「関数リファレンス/wp insert post

post_titleやpost_contentという名前はMySQL上のwp_postsテーブルの列の名前です。

次にwp_insert_post関数で記事を追加します。引数に上で設定した投稿情報を入れてやります。wp_insert_post関数を実行すると、投稿IDが戻り値として返ってきます。それを上のコードでは「$insert_id」としています。

投稿ができれば、次はカスタムフィールドの設定です。「if($insert_id) {」は、wp_insert_post関数が成功しているかどうかを判定しています。成功していれば、$insert_idに何らかの値が入っています。

カスタムフィールドの設定はupdate_post_meta関数で実行します。見た感じ更新しかされないように感じますけど、まだ登録していないのであれば、登録処理に切り替わります。便利ですね。
参考:「関数リファレンス/update post meta

上のコードでは「hogehoge」「product_id」「price」という名前のカスタムフィールド名に「ほげほげ」「1」「2,000」という値をそれぞれ設定しました。

商品データの投入に使えるかも?

初めてこのようなコードを書いてみて思ったこと。
この方法は割と汎用的に使えるのではないかと思いました。

上に書いたコードを繰り返しすることで、例えば商品データの投入を自動化することができます。

商品データに限らず、データを入力していくような形のサイトであれば、この手法を応用することでかなり幅が広がるのではないでしょうか。

私はこの方法を知ったおかげで、いろいろな可能性が出てきたと感じています。知れば知るほど面白いです。WordPress。

スポンサーリンク

ブログを気に入っていただけた方へ

新しい記事の更新情報をTwitterFacebookGoogle+で発信中です。

RSS購読を希望される方へ。フィードのURLはこちらです。
Feedlyも対応しています。

ちなみに書いているのはこんな人です。→プロフィール

私のYouTubeチャンネルもあります。

follow us in feedly

6件のコメントがあります

  1. 岡本 2013/09/17 8:30 AM

    はじめまして、岡本と申します。
    先生のサイトで勉強させていただいております。

    wp_insert_postを使って記事投稿の仕組みを
    作りたいと考えてるのですが、
    カスタムフィールドの設定までは実際に
    出来上がった記事を見て期待の動作を確認済み
    なのですが、併せて、カスタム投稿タイプとして
    タクソノミー、タームを設定することは
    可能なのでしょうか?

    事前に登録しているリストをプルダウン形式で
    選択して、作成する記事にそれぞれを関連づけたいと考えてるのですが、いい方法が見つからず、
    先生のお力添えを賜りたく思っております。

    不躾な質問で恐縮ですが、
    アドバイス頂ければ幸いです。

    1. Avatar photo
      Hiroki Matsumoto 2013/09/17 11:00 AM

      岡本さん

      コメントありがとうございます。
      先生なんて、とんでもないです><
      私もまだまだ勉強中の身です。

      wp_insert_postでカスタム投稿タイプとして投稿するには、引数を設定するところで「’post_type’ => ‘投稿タイプ名’」を設定すればいいですよ。

      上記のコードは投稿IDごとにカスタムフィールドを設定するので、wp_insert_postの引数に投稿タイプを設定すれば大丈夫だと思います。

  2. 岡本 2013/09/17 11:31 AM

    早速コメントありがとうございます。
    私から見れば先人はみな先生ですよ。

    ポストタイプ、
    カスタムフィールド、
    の指定は期待通り結果が得られてるんですが、

    タクソノミー、
    ターム、
    の指定をどうしたものやら、、と悩んでます。

    投稿した記事をタクソノミー、タームで分類
    検索したいのが意図で、wp_insert_postで作成
    する際に、それらを関連づけたいのですが、
    何かいい方法ありますでしょうか?

    1. Avatar photo
      Hiroki Matsumoto 2013/09/17 12:03 PM

      wp_insert_postの引数に「post_category」を設定するのはダメでしょうか?

      1. 岡本 2013/09/17 11:22 PM

        出先だったもので試行することができず、返信遅くなりました。

        結論から言うと、
        mixed wp_set_object_terms( int $object_id, mixed $terms, mixed $taxonomy [ , bool $append = false ] )
        で目的を実現できました。

        ‘post_category’ も考えてみたのですが、上記関数ならば、
        文字列での指定が可能ということで使い勝手がよいかと思い
        こちらを選択しました。

        色んなパターンを試したところ、
        wp_set_object_termsは$termsと$taxonomyの両者が明示されていないと関連付けができない(?)ようですね。

        松本先生のこの記事内容と併せて、これで投稿フォームから

        ・カスタム投稿タイプ
        ・カスタムタクソノミー
        ・カスタムターム
        ・カスタムフィールド

        のすべてを記事に設定することが可能となりました。

        急なコンタクトにも親切にご対応いただきありがとうございました。
        また何かありましたら相談にのっていただければ幸いです。

        以上、お礼まで。

        1. Avatar photo
          Hiroki Matsumoto 2013/09/18 9:23 AM

          岡本さん

          解決できたようで、良かったです!
          wp_set_object_termsは初めて知りました。
          岡本さんの方が僕よりも断然詳しいですね^^

          こちらも今、カスタム投稿タイプなどを使ってアイデアを実現させようと思っているので、とても勉強になりました。

          もし、また力になれることがあればコメントくださいね。

コメントを残す