WordPressのサイトマップ自動生成プラグイン「PS Auto Sitemap」で、カテゴリと同名のタグを持つ記事をそのカテゴリ内に出力されないようにする方法
WordPressでサイトマップを自動生成してくれる便利なプラグイン「PS Auto Sitemap」ですが、カテゴリと同名のタグが存在する場合にそのカテゴリ内にも記事のリンクが出力されてしまいます。
これを出力されないようにするにはどうしたら?とあれこれ探した結果、無事カテゴリのみで分類されるようになったので、そのカスタマイズ方法をまとめました。
“PS Auto Sitemap” is a plugin that automatically generates a site map page from your WordPress site. …
なお、カスタマイズで使用したプラグインのバージョンは1.1.7です。また、プラグインのPHPファイルを直接変更しますので、自己責任にてご対応頂きますようお願い致します。
カテゴリと同名のタグが存在するとはどういうこと?
このサイトでは「WordPress」というカテゴリを設けており、この記事のようにWordPressに関する内容を書く場合に「WordPress」のカテゴリに登録します。
また、日刊記事の中で軽くWordPressについて書くことがあるので、そういった場合にはカテゴリを「日刊」とし「WordPress」はタグとして登録しています。
このような運用方法をしているために、カテゴリにもタグにも「WordPress」が存在することになります。
修正前の出力結果
プラグインを導入し、管理画面から各種設定を行った状態(修正前)のサイトマップページのスクリーンショットです。
日刊記事が WordPress カテゴリに出力されており、日刊 カテゴリのものと重複してしまっています。
修正方法
修正箇所の調べ方
まずは、カスタマイズするPHPファイルですが、プラグインフォルダ直下の ps_auto_sitemap.php ファイルとなります。
/wp-content/plugins/ps-auto-sitemap/ps_auto_sitemap.php
上記のPHPファイルを開いたら215行目〜229行目付近のSQL文が、カテゴリの記事を取得するものとなります。
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
SELECT `posts`.`ID`, `posts`.`post_title` FROM $wpdb->posts as `posts` INNER JOIN $wpdb->term_relationships as `relation` ON ( `posts`.`ID` = `relation`.`object_id` ) INNER JOIN $wpdb->term_taxonomy as `taxonomy` ON (`relation`.`term_taxonomy_id` = `taxonomy`.`term_taxonomy_id` ) INNER JOIN $wpdb->terms as `terms` ON ( `taxonomy`.`term_id` = `terms`.`term_id` ) WHERE `posts`.`post_status` = 'publish' AND `posts`.`post_type` = 'post' AND `posts`.`ID` NOT IN ( $ex_post_ids ) AND `terms`.`term_id` = '$cat_id' GROUP BY `posts`.`ID` ORDER BY `posts`.`post_date` DESC"; |
上記のハイライト化されている220行目〜221行目が該当する部分で、そこで対象としているデータベースのテーブル wp_term_taxonomy を指定されています。
そのテーブルのフィールド taxonomy に カテゴリ (category)、リンクカテゴリ (link_category)、タグ (post_tag) かどうかが格納されていますが、デフォルトでは3つ全てを取得するようになっている(指定がないため)ので、ここを修正します。
調べる際に参考にしたサイトです。
修正方法
上記の221行目
221 |
ON (`relation`.`term_taxonomy_id` = `taxonomy`.`term_taxonomy_id` ) |
に、カテゴリのみを対象とするように
and
taxonomy
.taxonomy
= 'category'
を追記します。
221 |
ON (`relation`.`term_taxonomy_id` = `taxonomy`.`term_taxonomy_id` and `taxonomy`.`taxonomy` = 'category' ) |
これで、カテゴリのみが取得されるようになります。
なお、リンクカテゴリも含めたい場合は、追記する文字列を
and
taxonomy
.taxonomy
<> 'post_tag'
としてください。
修正後の出力結果
修正後のサイトマップページのスクリーンショットです。
WordPress カテゴリには日刊記事がなくなり、日刊 カテゴリとの重複が解消されました。
まとめ
そもそも カテゴリ と タグ に同じ文字列を使うのが問題なのかもしれませんが、もし同じように悩まれている方のお役に立てればと思いまとめてみました。
ご参考になれば幸いです。
ただし、プラグインに新しいバージョンが出た場合には、アップデート後に再度手動で修正しなければいけないので忘れないようにしないとですね。
“PS Auto Sitemap” is a plugin that automatically generates a site map page from your WordPress site. …
この記事をシェア
Pingback: WordPressで訪問者向けサイトマップを作る | メモ置場のブログ()