WEBTODESIGN

【Contact Form 7】カスタム投稿タイプをラジオボタンで出力する【WordPress】

WordPressのカスタム投稿タイプの投稿を、Contact Form 7に反映させたいことがありました。

例えば、カスタム投稿タイプで職種ごとに募集要項を投稿しているとき。

その募集中の職種(投稿のタイトル)をリアルタイムで反映したい、など。募集が終わったり始まったりした時に、手動でフォームを書き換えるのは大変。クライアントワークならなおさら無理!

ということで、投稿内容をラジオボタンで出力するメモ。もちろん、カスタム投稿タイプ以外もいけると思います。

functions.phpに関数を追加

Contact Form 7 のカスタム関数を、functions.phpに追記します。

今回の場合は、以下のように追記しました。

function create_form_sample(){
    $posts = get_posts(['post_type' => 'sample']);
    $name = 'form-sample';
    $output = '<span class="wpcf7-form-control-wrap '. $name .'"><span class="wpcf7-form-control wpcf7-radio">';
    foreach($posts as $post) {
        $title = get_the_title($post->ID);
        $output .= '<span class="wpcf7-list-item"><label><input type="radio" name="'. $name. '" value="'. $title .'"><span class="wpcf7-list-item-label">'. $title .'</span></label></span>';
    }
    $output .= '</span></span>';
    return $output;
}
wpcf7_add_form_tag('form_sample', 'create_form_sample', true);
  • [‘post_type’ => ‘sample’]sampleの部分がカスタム投稿タイプのスラッグ
  • $name = ‘form-sample’;form-sampleを自分が追加したいname属性

カスタム投稿タイプの数だけラジオボタンを生成して、全体を閉じる、という流れです。

wpcf7_add_form_tag()関数の詳細は、Contact Form 7 の開発者の記事「独自のフォームタグを追加する」をご確認ください。

フォームテンプレートで出力

functions.phpにカスタム関数を追加できたら、それをフォームテンプレートで出力します。

以下のように、カスタム関数の第一引数とname属性を[]で囲んで入力します。

[form_sample form-sample]

他のフォームタグと同じように、表示させたいところに挿入します。

出力を確認してみる

さて、保存できたら出力を確認してみましょう!

カスタム投稿タイプのタイトルが、ラジオボタンとして出力されていると思います! ワーイ!