フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

[WordPress]タグ編集・保存時に関連データを更新する

フック

edit_terms(複数形)、edited_term(単数形)の二つのフックを使うことで実現できた。

edit_terms  グがDBに保存される前に呼び出される
edited_term  保存された後に呼び出される

カスタマイズはテーマディレクトリ内にfunction.phpファイルを作成して記述する。
wordpress/htdocs/wp-content/themes/テーマ名/function.php
フックを利用するには、WordPressに組み込まれているadd_action関数を利用する。

function.php
// タグが更新される直前: 更新前のタグ情報を変数に保持する
add_action('edit_terms', 'get_tag_edit_before', 10, 2);
function get_tag_edit_before($term_id, $taxonomy){
         $tag = get_tag($term_id);
         global $cstm_tag_slug;
         $cstm_tag_slug->slug = $tag->slug;
}
function.php
// タグが更新された場合: タグに紐づく固定ページを更新する
add_action( "edited_term", 'edit_info_page', 10, 3);
function edit_info_page($term_id, $tt_id, $taxonomy){
         global $wpdb;
         if($taxonomy != 'post_tag'){ return; }
         $tag = get_tag($term_id);
         $tag_slug = $tag->slug;
         $tag_name = $tag->name;
         // 固定ページIDを取得する
         global $cstm_tag_slug;
         $post_id = $wpdb->get_var( 'SELECT 
                          ID
                          FROM '.$wpdb->posts.' 
                          WHERE post_type = "page"
                                  AND post_name = "'.CSTM_PREFIX.$cstm_tag_slug->slug.'"'
                  );
         $post = array(
                  'ID'            => $post_id,
                  'post_title'    => CSTM_TITLE . $tag_name,
                  'post_name'     => CSTM_PREFIX . $tag_slug
          );
          wp_update_post($post);
 }

※ WordPressのフックは似たような名前が付けられたフックが多く、
引数の数などが違っても動かなかったりした。
例:edit_termsedit_termedited_termsedited_term
edited_termsは編集保存後に実行されるフックなのかと思ってしまうが、実際は違う。

おまけ1:タグ追加時にテンプレートを指定して固定ページを作成する

ソースコードは下記。

function.php
// タグが追加された場合: タグに紐づく固定ページを作成する
add_action('create_term', 'create_info_page', 10, 3);
function create_info_page($term_id, $tt_id, $taxonomy){
         if($taxonomy != 'post_tag'){ return; }
         $tag = get_tag($term_id);
         $tag_slug = $tag->slug;
         $tag_name = $tag->name;
         // タグが追加された場合
         // 固定ページを自動作成する
         $post = array(
                 'post_title'     => CSTM_TITLE . $tag_name,
                 'post_content'   => '',
                 'post_status'    => 'publish',
                 'post_type'      => 'page',
                 'post_name'      => CSTM_PREFIX . $tag_slug,
                 'page_template'  => CSTM_INFO_TEMPLATE
         );
         wp_insert_post( $post, true);
}

おまけ2:WordPressタグ更新処理について詳しく知りたい

ソースコードはこちら
core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/taxonomy.php

[紹介元] WordPressタグが付けられた新着投稿 – Qiita [WordPress]タグ編集・保存時に関連データを更新する

コメント

記事に戻る

コメントを残す