【WordPress】「投稿オブジェクト」の選択値を利用した条件分岐を作るには
カスタムフィールドを作成できるプラグイン「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だとわかったので、利用するときは控えておくことにします。