私はこのループのコードを持っているので、このループからカテゴリ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;
?>
あなたは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);
}
}
関数ファイルから
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' );
このコードは実際のクエリが実行される前にクエリを変更するので、この場合ループを変更するための最も効率的なフックです。
アダムは正しいです。さらに、ページネーションを機能させるには、次のようなものが必要です。
<?php query_posts('post_type=post&paged='.$paged.'&cat=-4'); ?>
行の前に
<?php if(have_posts()): ?>
このようなものを挿入してください
<?php query_posts($query_string . '&cat=-4'); ?>
これはカテゴリID 4のカテゴリを除外します。見られるように ここ