【WordPress】Advanced Custom fields の投稿オブジェクトが便利だった
ある日、Advanced Custom fieldsでカスタムフィールドを作っていました。
何個か作っているうちに、同じ値・内容を使うフィールドが重複していることに気が付きました。
・・・作る前に気づけよ・・・と思いますが。
用途を考えている時に頭の中やメモでは整理しきれなくなって、とりあえずカスタムフィールドだけでも作ってみるかと見切り発車したのが原因ではあります。
内容としては、カスタム投稿タイプで使用しつつ、そこに入力した内容を他のカスタムフィールドに引用したり・・・という感じです。
分かりやすく言い換えると、例えばECサイトで商品の情報を登録するカスタム投稿タイプを作ったとして。
その商品名であったり商品コード、単価といった情報は、登録するカスタム投稿タイプ以外でも使いたい、というような状況です。
他のカスタム投稿タイプでも同じような内容を入力することになるし、こういったデータは入力する人によっての表記揺れが一番の問題になるよな、とか考えてました。
そんな時に便利だなと思ったのが、Advanced Custom fields(以下、「ACF」と表記します。)のフィールドグループの一つである、「投稿オブジェクト」です。
フィールドタイプ「投稿オブジェクト」
ACFはカスタムフィールドを手軽に作れて便利なのですが、分かりやすい基本フィールドの使用がメインになったりします。
ほとんどは
「カスタムフィールドを作る」
→「テンプレートページで呼び出す」
という流れなので問題はないんですが。
今回の場合は、
「Aカスタムフィールドを作る」
→「Bカスタムフィールドに挿入する」
→「AとBのカスタムフィールドの値をテンプレートページで呼び出す」
といった流れを想定していたものとなります。
それをやりやすいのが、フィールドタイプ「投稿オブジェクト」でした。
フィールドタイプを設定するドロップリストの「関連」の中にあります。
簡単にこのフィールドを説明すると、「投稿されている記事の情報を取得するフィールド」と言えます。
このまま「投稿オブジェクト」の設定を見ていきます。
ラベル等の基本的な部分については、ACFでのカスタムフィールドの作り方については変わらないので、以前の記事をご覧頂ければと思います。
「投稿オブジェクト」独自で設定する内容は、選べる投稿の絞り込み方と、返り値をどうするかです。
「投稿タイプで絞込」「タクソノミーで絞込」
「投稿オブジェクト」のフィールドでは、投稿のタイトルが選択項目としてドロップダウンリスト表示されます。
なので、ここで投稿の内容を呼び出したい投稿タイプ・タクソノミーが決まっていれば、選んだ投稿タイプ・タクソノミーで投稿された記事のタイトルが表示されます。
前もって使う投稿の関係性が決まっていれば、選んでおくと便利ですね。
「返り値のフォーマット」
ここで、フィールドタイプ「投稿オブジェクト」で使用する内容を決めます。
選択できるものは「投稿オブジェクト」「投稿ID」の2つです。
「投稿オブジェクト」
ワードプレスでは、投稿のデータはWP_Postというクラスで管理されています。
これを元に投稿に関わるデータを配列で取得することができます。
結構色々なデータを取得することができるので、迷ったらこれがオススメです。
呼び出せる内容は以下の通りです。
呼び出すときに使う名前 | 内容 |
---|---|
ID | 投稿のID |
post_author | 投稿作成者のユーザーID |
post_name | 投稿のスラッグ |
post_type | 投稿タイプ |
post_title | 投稿のタイトル |
post_date | 公開日時 |
post_date_gmt | GMTでの公開日時 |
post_content | 投稿の本文全体 |
post_excerpt | 投稿の抜粋 |
post_status | 投稿の公開ステータス |
comment_status | コメントの公開ステータス |
ping_status | ピンバック/トラックバックのステータス |
post_password | 閲覧パスワード |
post_parent | 親投稿のID |
post_modified | 更新日時 |
post_modified_gmt | GMTでの更新日時 |
comment_count | 投稿のコメント数 |
menu_order | 順序値 |
こちらの内容はCodexに記載されていたものを引用したものです。
このような投稿に関わる情報を取得することができます。
テンプレートファイル上で使用する時も簡単で、例えば投稿タイトルを取得するとすると、
get_field(‘投稿オブジェクトのカスタムフィールド名’)->post_title
とすれば取得できます。「post_title」の部分は上の表の取得したいものに変更することで、取得することができます。
「投稿ID」
返り値を「投稿ID」にすると、選んだ投稿の投稿IDのみを取得することができます。
投稿オブジェクトを選んだ場合の、
get_field(‘投稿オブジェクトのカスタムフィールド名’)->ID
と同じ動きですが、投稿IDのみを利用する事が決まっていれば、こちらの方が記述量を減らせますね。
「投稿オブジェクト」フィールドを使って他の投稿のカスタムフィールドの値を取得する
ACFの「投稿オブジェクト」の説明がすんだので、先ほど書いたやりたい事をやってみます。
先ほどは条件分岐のように書きましたが、一言で言うとこの見出しのようになります。
ACFで作成したカスタムフィールドの値を取得する場合は、
get_field(‘カスタムフィールド名’,’投稿ID’);
と書けば可能です。
つまり、投稿オブジェクトからIDを取得し、それを使って目的の投稿内のカスタムフィールドの値を取得する。
ということになります。
コードで書いてみると、
1 2 3 4 5 6 7 8 9 10 11 | <?php /* *投稿タイプtestAのカスタムフィールドtest-textの値を、 *投稿タイプtestBのテンプレート上に呼び出す。 *投稿タイプtestB上には投稿オブジェクトのカスタムフィールドtest-objectを用意する。 */ $test_object_id = get_field('test-oblject')->ID;//指定した投稿のIDを取得して変数に格納 ?> <p><?php echo get_field('test-text', $test_object_id); ?></p> <!-- 一か所でしか使わない場合は、変数に入れなくても可能 --> <p><?php echo get_field('test-text', get_field('test-object')->ID ); ?></p> |
こんな感じです。
投稿タイプtestBのループ内で投稿の一覧表示のように使うとすれば、
1 2 3 4 5 6 | <?php $test_object_id = get_field('test-oblject')->ID;//指定した投稿のIDを取得して変数に格納 ?> <h3><?php echo get_field('test-object')->post_title; ?></h3> <p><?php echo get_field('test-text', $test_object_id); ?></p> <p><?php echo get_field('test-object')->post_excerpt; ?></p> |
という様に書くことで、動的に投稿IDを取得し表示することができます。
幅が広がります
今回はワードプレスで作成した投稿を、データベースのように扱うにはどうすれば良いか?ということを考えていた時の備忘録のような感じです。
カスタムフィールドは便利なので増やしてしまいがちなところもありますが(自分だけかもしれません笑)。
同じような入力を他のカスタムフィールドで行う場合、「投稿オブジェクト」を使う事で入力を簡略化できるかもしれません。
これだけでも便利ですが、カスタムフィールドの自動入力と合わせるともっと便利だったりします。
次はそのことについて書こうかなと考えています。
ワードプレス関係の他の記事はこちらからどうぞ!株式会社東建工業-インターネット事業部-
イラスト制作例
当社はオリジナルイラストの制作を行っております。
制作例を一部掲載していますので、是非ご覧ください!
当社のデザイン作成について
当社はWEB制作に加え、デザイン作成と制作も行っております。
・チラシ、パンフレット等の紙媒体に使用するデザインと制作
・オリジナルデザインでのクリアホルダーの制作
・オリジナルデザインでのステッカー、シールの制作
・オリジナルデザインでのプリントTシャツの制作
などなど・・・
様々なデザインに関する制作をご依頼頂けます。
詳しくは当社のデザイン作成についてのブログ記事をご覧ください。
前の記事
【WordPress】【Advanced Custom fields】カスタム投稿のタイトルの入力を制御する。
次の記事
【Advanced Custom fields】記事の投稿時に、カスタムフィールドの値を投稿済のフィールドから取得し更新する【WordPress】
こちらも読まれています
お問い合せ
この記事の内容や当社についてのお問い合わせはこちらのフォームをご覧下さい。
ご利用前に当社のプライバシーポリシーと免責事項をお読み下さい。
送信ボタンを押された時点で、当社プライバシーポリシー又は、免責事項にご同意頂いたものとみなします。