【WordPress】ContactFrom7のドロップダウンリストを投稿のタイトル名にする
ドロップダウンリストを問合せフォームの選択項目として設置することがあります。
問合せフォームの設置にプラグイン「ContactFrom7」利用する事が多く、元々「ドロップダウンリスト」の設置も簡単にできるため重宝しています。
しかし運用をしていると、項目に変更を加える場合に、多少のHTML知識が必要なため使う人を選ぶとなぁと。たまに感じます。
ダブルクォーテーション(「””」)を消さないようにとか、カッコの取り扱いなどの知識ですね。
間違って消してしまい、「あの選べるやつが消えちゃいました!」とか「表示されません」とか言われることがたまにありました。
自社案件の中で起きた問題なので、そこら辺のメンテナンス性を高めるにはどうするかと。
その後の利用を考えて、カスタム投稿のタイトルを突っ込むことにしました。
やる事は2つ
それを実現するためには、functions.phpの編集と、ContactFrom7のタグの設定を行います。
functions.phpを編集する
まずはコードを載せてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php //関数の作成 function test_selectlist( $tag, $unused ){ //ContactFrom7のタグの名前が'test-tag'かどうか if( $tag['name'] != 'test-tag' ){ return $tag; } //get_posts()でセレクトボックスの中身を作成する //クエリの作成 $args = array( 'numberposts' => -1, 'post_type' => 'test',//使用するカスタム投稿タイプを指定 'tax_query' => array( //カテゴリー等を指定する場合 //この例ではカスタムタクソノミーを使用しています array( 'taxonomy' => 'test_cat',//使用するカスタムタクソノミー名 'field' => 'slug',//カスタムタクソノミー内で参照するタームを探す形 'terms' => 'test-term'//探すターム名 ) ), //並び順⇒セレクトボックス内の表示順となります 'orderby' => 'ID', 'order' => 'ASC' ); //クエリをget_posts()に入れる $test_posts = get_posts( $args ); //クエリが泣ければ戻す if( !$test_posts ){ return $tag; } //セレクトボックスにforeachで突っ込む foreach( $test_posts as $test_post ){ $tag['raw_values'][] = $test_post->post_title; $tag['values'][] = $test_post->post_title; $tag['labels'][] = $test_post->post_title; } return $tag; } //add_filter()で項目を上書きするニュアンス add_filter( 'wpcf7_form_tag', 'test_selectlist', 10, 2 ); ?> |
コメントも入れてありますが、ざっくりと解説します。
カスタム投稿を使うということは、ワードプレスのデータベースに投稿として保存されているデータを呼び出すということになります。
投稿データの呼び出しはサブクエリを使用することで可能です。
なので、get_posts()関数を使用し投稿データを取得します。
$argsで取得する投稿を指定し、foreachで条件に該当する投稿分、セレクトリストに含まれるようにします。
特にカテゴリーを限定する必要が無い場合は、「tax_query」の項目は不要です。今回はカテゴリーを限定してます。
$tagの中にContactFrom7で使用するタグの情報が入っているので、使用する項目に$test_post->post_titleとすることで、投稿のタイトルをリストに入れることができます。
あとは、add_filter()でリストの情報を上書きさせます。
この関数を通して作成されたリストを、使用したContactFrom7のフォームで使えるようにします。
フォームのタグ名を指定した変数に合わせる
functions.phpに入力するコードの最初の方にでContactFrom7のタグ名を指定しています。
1 2 3 4 5 6 7 | <?php //関数の作成 function test_selectlist( $tag, $unused ){ //ContactFrom7のタグの名前が'test-tag'かどうか if( $tag['name'] != 'test-tag' ){ return $tag; } |
この「$tag[‘name’] != ‘test-tag’」で指定したタグ名でContactFrom7のタグを使用します。
これで、このselectのリストは、カスタム投稿タイプ「test」のカスタムタクソノミー「test_cat」の「test-term」に分類された記事のタイトルが、セレクトボックスのリストに追加されます。
カスタム投稿で他の使い道もある可能性
今までContactFrom7のselectを使って項目を設定してきたんですが、最初に書いたHTML知識が多少必要なため、メンテナンス性が悪くなっていました。
それを分かりやすくしつつ、カスタム投稿タイプに細かい情報を追加する予定もあり。あえてカスタム投稿タイプを使用し、投稿データとして保存できるようにしました。
そうすれば、ワードプレス本来のブログの機能を使いつつ、項目管理がやりやすくなるからです。
ワードプレスのカスタマイズ時には、ワードプレスが持っている機能をどのように使うかを考えて、組み込んでいくことを考えます。
ワードプレス関係の他の記事はこちらからどうぞ!前の記事
【WordPress】サイトのページをブラウザ機能でPDF化する
次の記事
【WordPress】カスタムフィールドに入力された値をContact Form 7のフィールドに渡す
こちらも読まれています
お問い合せ
この記事の内容や当社についてのお問い合わせはこちらのフォームをご覧下さい。
ご利用前に当社のプライバシーポリシーと免責事項をお読み下さい。
送信ボタンを押された時点で、当社プライバシーポリシー又は、免責事項にご同意頂いたものとみなします。