WordPress の固定ページに "カテゴリ" や "タグ" を追加する

WordPress 4.0 以前のバージョンでは、固定ページにカテゴリやタグを追加することができません。 しかしながら構築するサイトによってはカテゴリやタグ情報を固定ページにも追加する必要があるでしょう。 ここでは固定ページにカテゴリやタグを追加する方法を紹介します。

初期化時と、一覧時のアクションにフックする

カテゴリとタグが利用される場面は大きく2種類です。1つは、そのページにカテゴリ(タグ)情報を追加して示すこと。 もう1つはカテゴリ(タグ)一覧時にそのページを対象とするかどうかを判定する場合です(ようするにアーカイブページでの一覧表示です)。 この2つの動作を固定ページでも実現させることになります。

カテゴリの追加

functions.php に次のようなコードを追加すると、固定ページに "カテゴリ" を追加して、 先に紹介した2つの動作を実現することができます。

function add_category_to_page() {
    register_taxonomy_for_object_type('category', 'page');
}
add_action('init', 'add_category_to_page');

function show_categorized_pages_in_archive( $query ) {
    if ( $query->is_category && $query->is_main_query() ) {
        $query->set('post_type', array( 'post', 'page', 'nav_menu_item'));
    }
}
add_action( 'pre_get_posts', 'show_categorized_pages_in_archive' );

init アクションの実行時に、page(固定ページ)category を追加し、 pre_get_posts アクションの実行時に、クエリに page(固定ページ) も対象にするように追加して設定します。 それぞれのアクションについてはここでは解説しません。

タグの追加

カテゴリと同じようにしてタグを追加することができます。注意する点は 'categroy' と同じように 'tag' となるのではなく、 'post_tag' となる点です。

function add_tag_to_page() {
    register_taxonomy_for_object_type('post_tag', 'page');
}
add_action('init', 'add_tag_to_page');

function show_taged_pages_in_archive( $query ) {
    if ( $query->is_tag && $query->is_main_query() ) {
        $query->set('post_type', array( 'post', 'page', 'nav_menu_item'));
    }
}
add_action( 'pre_get_posts', 'show_taged_pages_in_archive' );