カテゴリーを制限する

閲覧数: 55(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)タグ, , ,
モバイルにも雪を!

前回の「クリスマス'17始めました」では雪が降るのはPCのみでモバイルでは降りませんと宣言しましたが  続きを読む

緊急事態宣言で外出自粛になり...
blank

せっかくのゴールデンウィークなのに、2年連続で緊急事態宣言下となり、外出自粛中。暇なので小ネタで遊ぶ  続きを読む

WP Fastest Cache
blank

サイトへのアクセスを高速化するには、いわゆる「キャッシュ系」のプラグインを導入するのが手っ取り早いし  続きを読む

パンくずリスト詳細
blank

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

ElasticPress 3.5.6
blank

マイナーバージョンアップにも関わらず、検索スコアリングのパラメータが微調整された結果、期待する検索結  続きを読む

dockerとproxy
blank

dockerやdocker-composeをプロキシ環境下で使うのに苦労したので忘れないようにメモし  続きを読む

スポンサーリンク

コメントを残す

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