web-dev-qa-db-ja.com

WordPressループからカテゴリを除外する

私はこのループのコードを持っているので、このループからカテゴリ4を除外する必要があります。これを達成する方法について何か提案はありますか?

ループを開始するコード

 <?php if(have_posts()): ?>

    <ol class="item_lists">

        <?php
        $end = array(3,6,9,12,15,18,21,24,27,30,33,36,39,42,45);
        $i = 0;

        while (have_posts()) : the_post();
           $i++;
           global $post;
 ?>
3
jimilesku

あなたはwp_parse_args()を使ってあなたの引数をデフォルトのクエリにマージすることができます

// Define the default query args
global $wp_query;
$defaults = $wp_query->query_vars;

// Your custom args
$args = array('cat'=>-4);

// merge the default with your custom args
$args = wp_parse_args( $args, $defaults );

// query posts based on merged arguments
query_posts($args);

ただし、もっとエレガントな方法はpre_get_posts()アクションを使用することです。これはクエリを変更しますbefore/クエリが2回実行されないようにクエリが作成されます。

チェックアウト:

http://codex.wordpress.org/Custom_Queries#Category_Exclusion

その例に基づいて、インデックスからカテゴリ4を除外するには、これをfunctions.phpに入れます。

add_action('pre_get_posts', 'wpa_44672' );

function wpa_44672( $wp_query ) {

    //$wp_query is passed by reference.  we don't need to return anything. whatever changes made inside this function will automatically effect the global variable

    $excluded = array(4);  //made it an array in case you  need to exclude more than one

    // only exclude on the home page
    if( is_home() ) {
        set_query_var('category__not_in', $excluded);
        //which is merely the more elegant way to write:
        //$wp_query->set('category__not_in', $excluded);
    }
}
11
helgatheviking

関数ファイルから

function remove_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-4' );
    }
}
add_action( 'pre_get_posts', 'remove_home_category' );

このコードは実際のクエリが実行される前にクエリを変更するので、この場合ループを変更するための最も効率的なフックです。

2
Brad Dalton

アダムは正しいです。さらに、ページネーションを機能させるには、次のようなものが必要です。

<?php query_posts('post_type=post&paged='.$paged.'&cat=-4');  ?>
1
cale_b

行の前に

<?php if(have_posts()): ?>

このようなものを挿入してください

<?php query_posts($query_string . '&cat=-4'); ?>

これはカテゴリID 4のカテゴリを除外します。見られるように ここ

0
Adam Rice