web関連

【wordpress】contactform7でテキストボックスに記事タイトルを出力したい

2019/08/19

2019/08/21

【wordpress】contactform7でテキストボックスに記事タイトルを出力したい

記事内それぞれにフォームを埋め込む時にフォームのテキストボックスに記事タイトルを最初っから入れかったときの備忘録

contactform7側に仕込むフォームタグ

テキストボックス内に記事のタイトルを自動で入るようにするためのタグ

[text p_title readonly]

readonlyは書き換えできないようにするための記述

 

functions.phpに書く記述

function wpcf7_get_post_title( $tag ){
  // contactform7のフォームが無い時の処理?
  if( !is_array( $tag ) ) return $tag;
  //タグ名が「p_title」の時にinputのvalueに記事タイトルを出力
  if( $tag['name'] == 'p_title' ) {
      $title = get_the_title();
      $tag['values'] = array( $title );
  }
  return $tag;
}
add_filter( 'wpcf7_form_tag', 'wpcf7_get_post_title' , 11 );
とりあえずこれでテキストボックスに記事タイトル入る
以上
ここから個人的なメモ

$tagでcontactform7のフォームで使われているタグを拾ってきてるみたい

調べている時にglobal $post使ってる人もいたけど普通に記事タイトル読み込めてるんだよねぇ…
いまいちどこでどういう時に使うのか理解できない

その記事では記事IDを$post->IDで拾ってきていたけどget_the_IDで拾えるから、拾えない時なんかで使うんかなぁ?

参考

wordpressで重要なグローバル変数$postの中身の説明

global $postを使った書き方に変えてみたけどこれでも一応動いた

function wpcf7_get_post_title( $tag ){
  global $post;

  if( !is_array( $tag ) ) return $tag;

  if( $tag['name'] == 'p_title' ) {
      $title = $post->post_title;
      $tag['values'] = array( $title );
  }
  return $tag;
}
add_filter( 'wpcf7_form_tag', 'wpcf7_get_post_title' , 11 );

メインループやサブループでthe_post()使われてるけどglobal $postと関係あるのかしら?
後で、調べないと…

参考

ここまで違う!WordPressの[WP_Query]と[get_posts()]の特性を暴いてみる