LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

フック

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タグ更新処理について詳しく知りたい

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1