Contact Form 7 のフックで投稿情報を取得するには

Contact Form 7 のフックでは $post の情報が取得できなかったのですが、
以下の方法で投稿情報を取得することができました。

ショートコードの属性として投稿IDを設定

以下のような感じでテンプレートファイルにショートコードを追加します。
[php]
$post_id = $post->ID;
echo do_shortcode(‘[contact-form-7 id=”cf7のID” title=”タイトル” 属性名=”‘ . $post_id . ‘”]’);
[/php]
「属性名」の部分は任意の名前で大丈夫だと思います。

フォームにフィールドを追加

Contact Form 7 の管理画面から、
フォームに以下のようなフィールドを追加します。
[php]
[hidden 属性名 default:shortcode_attr]
[/php]
※隠しフィールド(hidden)である必要はありません。

ショートコードに追加した属性を利用可能にする

そのままだと、任意の属性は利用できないようなので、
利用できるようにする必要があります。
[php]
function my_shortcode_atts_wpcf7_filter( $out, $pairs, $atts ) {

if ( isset( $atts[‘追加した属性名’] ) ) {

$out[‘追加した属性名’] = $atts[‘追加した属性名’];

}

return $out;
}
add_filter( ‘shortcode_atts_wpcf7’, ‘my_shortcode_atts_wpcf7_filter’, 10, 3 );
[/php]

投稿IDを取得

あとは、フック内に以下のコードを書くことで、投稿IDを取得できます。

投稿IDが取得できれば、色々な投稿情報を取得できるとようになると思います。
[php]
$submission = WPCF7_Submission::get_instance();

if ( $submission ) {

$data = $submission->get_posted_data();

}

$post_id = $data[‘追加した属性名’];
[/php]