【WordPress】「投稿オブジェクト」の選択値を利用した条件分岐を作るには

2023年10月16日

カスタムフィールドを作成できるプラグイン「Advanced Custom Fields」に用意されているフィールドの中でも、「投稿オブジェクト」は便利で良く使っています。

選択された投稿データを引っ張ってきてくれるので、投稿タイトルなどのちょっとした内容を表示するのに便利。

自力でやるとクエリで引っ張ってきたり、IDを指定したりと手間がかかりますが。

それがフィールド設定だけで済むのはありがたすぎます。

今回はその「投稿オブジェクト」で選択された値で動作を変えるには?という内容です。

状況

具体的な用途の例としては、カスタムフィールドの値をContact Form 7に渡すものに、投稿タイトルを入れたい時でしょうか。

このフィールドを用意しておけば、投稿タイトルを選択するだけで、渡したい情報を選ぶことができます。

が。これも最初のバリデーションに関連して、選択された投稿タイトルにより動作を分けたいものがあり。

表示されている投稿タイトルを指定しても、動作してくれなかったのです。

投稿の情報を取得しているだけ

よく考えれば投稿タイトルを取得する場合、フィールド設定の「戻り値の形式」を「投稿オブジェクト」にして、取得した配列の中身を呼び出さないと取得できないので。

//投稿オブジェクトからタイトルを取得するには
get_field( 'test-field', $post_id)->post_title;

表示されてても取得できません。

ただ、$_POSTでフォーム送信されているので、value値があるはず。

・・・と調べてみたら、投稿IDでした。

投稿の情報はIDに紐付けられて取得するので。そりゃそうですね。

投稿オブジェクトの選択値で条件分岐を作る場合には投稿IDを利用すれば良いですね。

if( $_POST['form要素のname属性'] == "1818" ){
    //投稿IDが「1818」の時の動作
  } elseif( $_POST['form要素のname属性'] == "1919" ){
    //投稿IDが「1919」の時の動作
  }

盲点でした。

投稿IDは大事

動かないときはやたらめったら調べてましたが。

落ち着いて考えれば、投稿の情報を取得しているだけで、タイトルは呼び出さないといけなかったことに気付き。

で、投稿の登録はPOST送信されているのでvalue値があるはずだ・・・からたどり着きました。

ただ投稿オブジェクトのセレクトボックスは、選択された時点で投稿のデータを取得するみたいで。

ソースコードを表示しつつ、選択することでIDを見ることができました。

もうPOST送信されるvalue値は投稿IDだとわかったので、利用するときは控えておくことにします。