WordPress メインページ(フロントページ)で特定のカテゴリ文を除く

前へループで特定のカテゴリの文だけを表示したり、除外する方法を説明しました。 メインページで特定のカテゴリの文だけ除外するには、どうすればいいですか? この場合、 「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の使い方は こちらをクリックしして参照してみてください。

プラグインを使用する

上記の方法が難しい場合は、プラグインを使用する方法も可能です。

WordPress 特定のカテゴリ文を除くプラグイン

Ultimate Category Excluder(UCE)のプラグインを使用すると、フロントページ、アーカイブ、フィード、検索で特定のカテゴリを簡単かつ迅速に除外することができます。 除外するカテゴリを選択すると、とUCEプラグインが分かっ処理ので非常に便利です。

しかし、プラグインをたくさんインストールすると、サイトの速度に影響を与えることができ、場合によっては他のプラグインやテーマとの競合を引き起こす可能性がありますので、可能な場合は、プラグインの使用を最小限にすることが望ましい。

メモ:


2のコメント

  1. 上記では、is_home()はホームページ(ブログページ)に対応し、前面ページ(is_front_page())は対応していません。 前面ページまで考慮するには、理論上 $query->is_home() 部分を ($query->is_home() || $query->is_front_page()) のように置き換えれば良いと思います。 (この記事のタイトルでは、「フロントページ」という表現が欠けている必要があります。)

コメントを残す

*メールアドレスは公開されません。