一つの固定ページで、複数のメールフォームを表示させたいことがあって、URLのパラメータで対応できるようにしてみました。
まず、Contact Form 7 のショートコードは、IDとタイトルを入れておく必要があります。
[contact-form-7 id=”7″ title=”hogehoge”] なので、パラメータで能動的にショートコードを呼びだそうと思ったら、 タイトルとIDをパラメータから受け取る必要があります。 例)http://accelboon/tn/mailform/?id=7&title=hogehoge あんまり使い勝手がよくないので、タイトル部分だけをパラメータから受け取って、 メールフォームを表示するようにしたいと思いました。
こんなふうに。
例)http://accelboon/tn/mailform/?title=hogehoge
で、最新バージョンの Contact Form 7 は、カスタム投稿を利用しているので、WP-Queryを使って呼び出せばいいや。 と思ったのですが、WP-Query では、タイトルだけで検索する方法が見当たらりませんでした。
そこで、直接データベースにアクセスして、タイトルに一致するIDを取得する方法で実現したのがこれ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php //urlの ?title= のパラメータを受け取る $formtype = filter_input(INPUT_GET, 'title'); if ($formtype) { //カスタム投稿タイプの wpcf7_contact_form からタイトルが一致する投稿(問合せフォーム)を取得する global $wpdb; $tableName = $wpdb-&amp;gt;prefix . "posts"; $sql = "SELECT * FROM $tableName WHERE post_title='%s'"; $sql = $wpdb-&amp;gt;prepare($sql , $formtype); $res = $wpdb-&amp;gt;get_row($sql , ARRAY_A); if ($res){ //POST IDを取得して、ショートコードを呼び出す。 $postID = $res[ID]; echo do_shortcode('[contact-form-7 id="' . $postID . '" title="' . $formtype . '"]'); }else{ //タイトルが一致するものがなかったとき。 //echo do_shortcode('[contact-form-7 id="5" title="お問合せ"]'); } } ?> |
これを、page.php なんかにいれておくと、titleパラメータを付けた固定ページに、該当するメールフォームを表示させることができます。