2022年03月27日

Actionフック:save_post

アクションフックの save_post は、投稿や固定ページが[公開]または[更新]された時にフックされます。

①WordPressのメタデータ(カスタムフィールド)の新設/更新

②投稿が更新された段階で、管理者のメールを送る

等で利用されます。

 メモ

投稿や固定ページが[公開]または[更新]された時に実行されるフィルタフックもあります。

フィルターフック:wp_insert_post_data

上記は、入力された本文データをプログラムで取得し、変更する時に利用します。

 

サンプル

WordPressのカスタムフィールドは、投稿画面からマニュアルで作成/更新する事が可能ですが、操作が面倒等の問題があります。

例えば下記の様なカスタムフィールド作成したいとします。

そこで

①キーが設定されてない時は、キーと値を設定する。

②キーがあった場合は、値を更新する。

を実行させるプログラムは下記になります。

下記をfunctioa.phpに記述します。

function add_meta_key() {
	global $post;
	$id = $post->ID;// 現在のIDの抽出
	$price = get_post_meta($id,'price',true);                             // price データの取得
	if($price == '') update_post_meta($id,'price',100 );              // price の新規追加
	else update_post_meta( $id,'price',$price );                         // price の更新
	
   $size = get_post_meta($id,'size',true);                                // size データの取得
	if($size == '') update_post_meta( $id,'size',"80\n82\n84");	// size の新規追加
	else update_post_meta($id,'size',$size );                             // size の更新
}
add_action( 'save_post', 'add_meta_key' );

■2~3行目:現在の投稿IDを取得しています。

■4~6行目:priceデータが空の時は新設、あった場合は更新をしています。

get_post_meta()でカスタムフィールドのデータを取得し、update_post_meta()でカスタムフィールドの新設/更新を行っています。

■8~10行目:sizeデータが空の時は新設、あった場合は更新をしています。

処理内容はpriceデータの処理と同様です。

 


参考情報

このサイトの事例では文書の中にタブ・ブロックを作成する時にカスタムフィールドを利用しています。

 

 

アクションフック&関数
  • admin_init
  • admin_menu
  • after_setup_theme
  • customize_register
  • manage_pages_custom_column
  • manage_posts_custom_column
  • pre_get_posts
  • save_post
  • widgets_init
  • wp_enqueue_scripts
  • wp_head
  • add_editor_style()
  • add_post_type_support()
  • add_theme_support()
  • do_action()
  • get_post()
  • get_theme_mod()
  • register_nav_menu()
  • register_post_type()
  • register_sidebar()
  • register_taxonomy()
  • register_widget()
  • remove_action()
  • remove_editor_styles()
  • remove_theme_support()
  • set_post_thumbnail_size()
  • set_query_var()
  • show_admin_bar()
  • unregister_nav_menu()
  • unregister_widget()
  • wp_enqueue_script()
  • wp_enqueue_style()