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]
他のフォームタグと同じように、表示させたいところに挿入します。
出力を確認してみる
さて、保存できたら出力を確認してみましょう!
カスタム投稿タイプのタイトルが、ラジオボタンとして出力されていると思います! ワーイ!