【Wordpress】記事一覧から特定のカテゴリーの記事を非表示にする方法
も・く・じ
とあるサイトを構築する際、トップページの記事一覧を確認していたら、いくつかの記事がどうもアドセンス広告の規約違反に触れそうな気配がしたんですね。
そんなわけで特定のカテゴリーの記事だけ記事一覧に表示させないようにできないかとググってたら、ありましたよ。
特定のカテゴリー記事を非表示
動作検証は行ってますが、カスタマイズ・実装に関しては”サイトが表示されない”などのトラブルが発生する可能性もありますゆえ、失敗した時に元に戻せるようオリジナルファイルのコピーは必ず作っておいてください。
なお導入に際しては自己責任にてお願いします。
結論から言いますと、functions.phpに下のような記述を加筆することで問題なくいけます。
0 1 2 3 4 5 6 7 8 9 10 11 12 |
//トップページで特定のカテゴリーの記事は非表示 function custom_cat($query) { if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_home()) { $query->set( 'cat','-49' ); return; } } add_action( 'pre_get_posts', 'custom_cat' ); |
6行目の”is_home()”が「トップページなら…」を意味し、7行目は「カテゴリーIDが”49”のカテゴリーに属する記事はすべて非表示」を意味します。
(カテゴリーIDの調べ方はここでは割愛します)
カテゴリーIDの前にマイナス(−)をつけると”除外→非表示”という意味になります。
そのほかの部分に関しては…よくわかりません。(涙目)
参考サイトのやりかたをなぞっただけです。
2行目と11行目の”custom_cat”は同じにする必要があります。
”custom_cat”は他の名前でも問題ありません。ただし半角英字で。
ちなみに非表示にしたいカテゴリーが複数ある場合は、下のようにカンマで区切って書きます。
0 1 2 3 4 5 6 7 8 9 10 11 12 |
//トップページで特定のカテゴリーの記事は非表示 function custom_cat($query) { if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_home()) { $query->set( 'cat','-49,-1,-4,-69' ); return; } } add_action( 'pre_get_posts', 'custom_cat' ); |
この場合、(7行目の)”カテゴリーIDが49と1と4と69のカテゴリーに属する記事はすべて非表示にする”という意味になります。
応用
応用として「検索結果ページから固定ページやカスタム投稿は除外する」といった条件分岐なんかも作れます。
0 1 2 3 4 5 6 7 8 9 10 11 |
function posts_custom($query) { if( is_admin() || ! $query->is_main_query() ){ return; } if( $query->is_search() ){ $query->set( 'post_type','post' ); return; } } add_action( 'pre_get_posts', 'posts_custom' ); |
5行目の”is_search()”が”検索ページが表示されているなら…”という意味で、6行目は”post_type(投稿タイプ)”は”post(投稿記事)”だけを表示…つまり(投稿記事以外の)固定ページやカスタム投稿は検索結果ページに反映しないという意味です。
参考サイト
1件のコメント