WordPressで記事投稿時にタイトル・本文の内容からタグを自動登録する方法
こんにちは、webエンジニアのゾノ( @ozonosho )です。
今回の記事ではWordPressで記事投稿時にタイトル・本文の内容からタグを自動登録する方法をご紹介いたします。
たとえばタグに「WordPress」「SEO」の2つを用意している場合、投稿する記事のタイトルまたは本文の中に「WordPress」「SEO」のキーワードが含まれていれば自動でそのタグを登録させる、みたいな処理です。
僕の運営する相談サイト『ココトモ』では利用者やスタッフが自由にコンテンツを投稿できるのですが、タグが数百種類あるため(利用者にタグの登録を意識させることなく)自動で勝手に適切なタグをつけてくれる機能があれば便利だなと思った次第です。
※自動でタグが割り当てられた投稿例
https://kokotomo.com/nayami/212642
https://kokotomo.com/209385
こんな感じで、利用者の投稿する掲示板トピックにタグを自動でつけたり、スタッフの投稿するブログにタグを自動でつけたりすることができます。
タイトル・本文の内容からタグを自動登録する方法
今回、投稿IDを渡して自動でタグを登録する関数を用意しました。
投稿IDを渡せばタグを自動登録する関数
function set_post_tags($post_id = 0) {
if(!$post_id) {
$post_id = get_the_ID();
}
$post_type = get_post_type($post_id);
$post_tags = get_terms($post_type.'_tag', array('hide_empty' => false));
if(!$post_tags) return;
$set_tag_ids = array();
$post_text = get_the_title($post_id) . get_post_field('post_content', $post_id);
foreach ($post_tags as $post_tag) {
if(strpos($post_text, $post_tag->name) !== false) {
$set_tag_ids[] = $post_tag->term_id;
}
}
if(count($set_tag_ids) > 0) {
wp_set_object_terms($post_id, $set_tag_ids, $post_type.'_tag');
}
}
通常の投稿(=投稿タイプがpostの投稿)はこのまま使えます。
また、たとえば「カスタム投稿タイプ:topic」「カスタムタクソノミー:topic_tag」とした場合でもこの関数を挟めば適切なタグを付与してくれます。
投稿IDを渡せば利用できるので、過去記事をWP_Query等で取得してループで回して過去記事に一括で適切なタグを割り当てることも可能です。
記事投稿時にタグを自動登録する方法
WordPressの管理画面から記事を投稿した際に自動でタグを登録させたい場合は、functions.phpに下のコードを追加してください。
function set_post_tags($post_id, $post) {
$post_type = get_post_type($post_id);
$post_tags = get_terms($post_type.'_tag', array('hide_empty' => false));
if(!$post_tags) return;
$set_tag_ids = array();
$post_text = $post->post_title . $post->post_content;
foreach ($post_tags as $post_tag) {
if(strpos($post_text, $post_tag->name) !== false) {
$set_tag_ids[] = $post_tag->term_id;
}
}
if(count($set_tag_ids) > 0) {
wp_set_object_terms($post_id, $set_tag_ids, $post_type.'_tag');
}
}
add_action('save_post', 'set_post_tags', 10, 3);
こちらは動作検証していませんが多分動くはずです…w
おわりに
以上、今回の記事でWordPressで記事投稿時にタイトル・本文の内容からタグを自動登録する方法を紹介させていただきました。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。