ワードプレスで特定の投稿記事をアーカイブの記事リストから除外(リストに表示しないようにする)する方法をいくつかご紹介いたします


1 投稿IDでアーカイブから記事を除外する

下記のコードをテーマのFunctions.phpに追記されることで投稿ID 10,11,12の3記事をアーカイブループの表示から除外することができます。

function hide_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        $query->set( 'post__not_in', array(10,11,12) );
    }
}
add_action( 'pre_get_posts', 'hide_filter_pre_get_posts' );

※投稿IDはその投稿の編集画面にてURLに数字があるかと思いますのでその数字からわかります。
※10,11,12の部分は減らしたりカンマで区切っていくつでも増やすことが可能です。

2 非公開記事をアーカイブから除外する

非公開記事をアーカイブから除外されたい場合は、下記のようなコードになります。ワードプレスのクエリのpost__not_inにプライベート記事の投稿IDリストを渡してその投稿を除外してくれるコードとなります。

functionhide_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        $privateposts = new WP_Query( array( 'post_status' => 'private' ) );
        $privatepost_ids = array();
        foreach ( $privateposts as $obj ) {
            $privatepost_ids[] = $obj->ID;
        }
        $query->set( 'post__not_in', $privatepost_ids );
    }
}
add_action( 'pre_get_posts', 'hide_filter_pre_get_posts' );

3 特定のカテゴリーの記事をアーカイブから除外する

カテゴリーID 1の記事をアーカイブループの表示から除外するコード例です。

function hide_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        $query->set( 'category__not_in', array(1) );
    }
}
add_action( 'pre_get_posts', 'hide_filter_pre_get_posts' );

※array(1)のところは、1,2,3等カンマで区切って複数指定できます。カテゴリーIDはカテゴリー編集画面に移動しURLに数字があるかと思いますのでその数字がカテゴリーIDになります。

4 特定のタグの記事をアーカイブから除外する

最後に特定のIDのタグを持つ記事をアーカイブから除外する方法をご紹介します。タグID 1の記事をアーカイブループの表示から除外するコード例です。

function hide_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        $query->set( 'tag__not_in', array(1) );
    }
}
add_action( 'pre_get_posts', 'hide_filter_pre_get_posts' );

これらのコードはまず’pre_get_posts'(投稿を取得する直前のフック)にてプログラムを割り込ませ、! is_singular() && $query->is_main_query() 部分において現在がアーカイブページである場合にのみワードプレスの記事取得クエリに条件(投稿を除外する)を付与するものです。

WordPress ワードプレスのテーマプラグインの作成カスタマイズのご相談ご依頼はWPドクターまでお気軽にお送りください