カテゴリーを制限する

閲覧数: 48(0)

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トップページやアーカイブさらには検索結果などに非公開の記事が表示されないようにするための制御です。最近は「カテゴリー制限」や「検索結果のカテゴリー制限」などに書いた手法でカテゴリー制限を実装しています。

今回は一歩踏み込んでコア関数を書き換えることで実現してみたいと思います。子テーマのfunctions.phpに手を入れます。

function fotografie_pre_get_posts($query) {
    if (is_admin() || !$query->is_main_query()){
        return;
    }
    if ( !is_user_logged_in() ) {
        $query->set( 'cat', '公開' );
    }
}
add_action( 'pre_get_posts', 'fotografie_pre_get_posts' );

pre_get_posts()に対してログインしていない場合には「WP_Query」の検索条件にカテゴリー制限(公開のみ)をかけます。本当は引数で「category__not_in」を使いたかったのですが、配列にして複数のカテゴリーIDを渡しても、先頭のカテゴリーIDにしか制御が掛けられなかったので、苦肉の策で「公開」カテゴリーのみ対象とする方法にしました。この変更により、かつての手法であった、index.phpやarchive.phpとsearch.phpへの個別修正が不要になりました。ページナビに関しては引き続きsingle.php内でログイン状態の判定を行い制御しています。

                    if ( is_user_logged_in() ):
                     else :
                       $args = wp_parse_args( $args, array(
                            'prev_text'          => '%title',
                            'next_text'          => '%title',
                            'in_same_term'       => true,
                            'excluded_terms'     => '除外カテゴリー',
                            'taxonomy'           => __( 'post_tag' ),
                            'screen_reader_text' => __( 'Post navigation' ),
                        ) );
                        the_post_navigation($args);
                    endif;

the_post_navigation()の引数で「除外カテゴリー」を指定するとともに、前後のページは「タグ」に基づいて表示されるように変更しました。サイト全体のカテゴリー制限は引き続きプラグイン「Allow Categories」に頼っています。いつか卒業できたらいいなとは思いますが、とても便利なプラグインなのでまだまだ手放せません(笑)

カテゴリーIT閑話, 公開タグ, , ,
検索精度を高める

検索ネタを連発するのはElasticsearchやElasticPressがバージョンアップした時の  続きを読む

検索結果のカテゴリー制限
blank

検索ネタを連発しておりますが、、、今回はテーマとプラグインどっちで修正するかという課題に挑戦しました  続きを読む

Sticky Headerその後
blank

Sticky Headerをやりたくて、その名もずばり「Sticky Header」と言うプラグイン  続きを読む

カテゴリー制限
blank

カテゴリー制限はこのサイトでは過去に何度も出題された「頻出過去問題」です。初期の頃は「Allow C  続きを読む

Elasticsearch 5.6.5
blank

少し古い記事の「検索に悩む」で紹介した「Elasticsearch」ですがWordPressやMed  続きを読む

ページナビのテキスト
blank

記事ページの下部に前後の記事(投稿)へのリンクが表示される仕様なのだが、「カテゴリーに制限」をかけて  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください