前へループで特定のカテゴリの文だけを表示したり、除外する方法を説明しました。 メインページで特定のカテゴリの文だけ除外するには、どうすればいいですか? この場合、 「pre_get_posts」アクションを使用すると、簡単に WordPress ブログの最初のページで特定のカテゴリの文だけ除外することができます。
WordPress メインページ(フロントページ)で特定のカテゴリ文除外する
フロントページに特定のカテゴリの記事を表示していたくない場合は、次のようなコードを使用することができます。
function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-1,-2' ); } } add_action( 'pre_get_posts', 'exclude_category' );
参考までに、特定のカテゴリの文だけを表示するには、テーマのソースファイルでは、次の行を追加してくれればされます。
<?php query_posts("showposts=5&cat=1"); ?>
pre_get_postsアクションはquery variable objectが生成された後は、実際のqueryが実行される前に呼び出されます。 したがって、このアクションを使用すると、表示したり、除外する文を簡単に制御することができます。 たとえば、次のような関数を使用して、特定の特定のカテゴリの表示順を変更することができます。 (以下の場合のカテゴリの記事をアルファベット順に並べ替えます。)
function wpsf_orderby( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; // do conditional checks here and return on false.? if ( is_category('uncategorized') ) { remove_action( 'pre_get_posts', __FUNCTION__ ); add_filter( 'posts_orderby', function() { return ' post_title ASC'; } ); } } add_action( 'pre_get_posts', 'wpsf_orderby' ); // Source: wordpress.org
上記のコードは、使用しているテーマの関数ファイル(functions.php)に追加するようにします。 テーマが更新されても、コードが消えないようにするには、チャイルドテーマ(子テーマ)を作成し作業してください。 この作業には、FTPにアクセスできる必要があります。 FTPの使い方は こちらをクリックしして参照してみてください。
プラグインを使用する
上記の方法が難しい場合は、プラグインを使用する方法も可能です。
Ultimate Category Excluder(UCE)のプラグインを使用すると、フロントページ、アーカイブ、フィード、検索で特定のカテゴリを簡単かつ迅速に除外することができます。 除外するカテゴリを選択すると、とUCEプラグインが分かっ処理ので非常に便利です。
しかし、プラグインをたくさんインストールすると、サイトの速度に影響を与えることができ、場合によっては他のプラグインやテーマとの競合を引き起こす可能性がありますので、可能な場合は、プラグインの使用を最小限にすることが望ましい。
特定のカテゴリだけフロントページ/ホームページに表示するようにするには、マイナス記号を削除してカテゴリIDを追加します。
カテゴリーIDを確認する方法は、 https://www.thewordcracker.com/basic/how-to-check-post-page-and-category-id-in-wordpress/ 文を参照してください。
上記では、is_home()はホームページ(ブログページ)に対応し、前面ページ(is_front_page())は対応していません。 前面ページまで考慮するには、理論上 $query->is_home() 部分を ($query->is_home() || $query->is_front_page()) のように置き換えれば良いと思います。 (この記事のタイトルでは、「フロントページ」という表現が欠けている必要があります。)