いい表現がないかと試行錯誤した結果、ちょっとタイトルが難解になってしまいました(笑)。
要するに以下のような機能を実装しようというコード例の紹介ページです。
- 投稿のタイトルと本文の文章を取得
- 既に登録されているタグの文字列と1に含まれる単語を比較
- 〇回以上合致する単語があれば、投稿の保存時に自動的にタグへ紐づける
理想は本文にたくさん登場する単語からタグを生成しつつ存在するタグは無視、保存時にタグとの紐づけをするというものだと思いますが、そうするとタグが無尽蔵に作成され、同時にタグアーカイブページが無尽蔵にできてしまうことになるかもしれないので、今回はタグが登録されていることを前提としました。
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
投稿の保存時に自動で登録されているタグとの紐づけを行うコード例
以下のコードを有効化しているテーマのfunctions.phpへ追加することで機能します。
function pwcn_set_post_tags($post_id, $post) {
// 自動保存を無視(負荷軽減のため)
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// 投稿タイプを取得
$post_type = get_post_type($post_id);
// タグを取得
$post_tags = get_terms($post_type . '_tag', array('hide_empty' => false));
//エラー発生時は処理しない(念のため)
if (is_wp_error($post_tags) || !$post_tags) return;
//タグIDを配列で持たす
$set_tag_ids = array();
// タイトルと投稿本文内のテキストを格納
$post_text = $post->post_title . ' ' . $post->post_content;
// 合致するタグを探す
foreach ($post_tags as $post_tag) {
//投稿タイトル+本文から既存のタグと合致する文字列の出現回数を計算
$count = substr_count(strtolower($post_text), strtolower($post_tag->name));
//3回以上出現するようならタグに追加するものとしてセット
if ($count >= 3) {
$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', 'pwcn_set_post_tags', 20, 3);
上記のコードでは投稿のタイトルと本文に含まれる単語が3回以上出現した場合に、登録済のタグと比較し、合致するものがあれば追加するというものです。
コード中の「if ($count >= 3) {」の数字を変更すれば出現数の調整ができます。
以下がコードを使用する場合の注意点です。
- 手動で設定したタグとの紐づけはすべて解除されます
- 自動登録要件に合致しない(上記コードではタグと合致する単語が3回以上本文内に登場しない)投稿はタグなしになります
- 100%正確に解析するものではないので、紐づけされない場合や、思わぬ単語に紐づけされる可能性があります
- 編集画面の「保存」「公開」をクリックした時、または、クイック編集で「更新」をクリックした時のみ動作します
テストサイトなどでよくテストをしてから実装するか、自身でコードをゴニョゴニョして対処してから実装するようにしてくださいね。
本ページで紹介したコードは「WordPressで記事投稿時にタイトル・本文の内容からタグを自動登録する方法」を参考に、エラーハンドリングの追加、負荷軽減のため自動保存時には機能させないようにする、出現回数の考慮するといった機能を追加したものです。ヒントをくれた先人に感謝します。
コメントを残す