web-dev-qa-db-ja.com

メインループから「おすすめ」の投稿を控える方法

Category.phpテンプレートでは、メインループの前に「おすすめの」投稿を一覧表示する関数を作成しました。注目の投稿は、カスタムフィールドとget_posts()を使用して選択されます。

function list_featured_articles(){
 $featured_posts = get_posts('meta_key=featured_article&meta_value=on&numberposts=10&order=DESC&orderby=post_date');
}

私のcategory.phpテンプレート:

echo list_featured_articles();
get_template_part( 'loop', 'category' );

注目の記事が記事のカテゴリリストにも表示されている点を除けば、うまく機能します。私の機能から、注目の投稿のIDを取得して、メインループから削除したいと思います。適切な方法はありますか?私は除外されたIDの配列を格納するGLOBAL変数を使用できると思いますが、そのためにグローバルを使用しないようにしたいと思います。

1
pixeline

これは query_posts() の適切な使い方で、 ポストカスタムメタクエリ .

あなたはmeta_key=featured_article&meta_value=onによってに問い合わせているので、同じパラメータに対してexcludeとします。

<?php
// Setup the custom meta-query args
$exclude_featured_args = array(
    'meta_query' => array(
        array(
            'key' => 'featured_article',
            'value' => 'on',
            'compare' => '!='
        )
    )
 );
// globalize $wp_query
global $wp_query;
// Merge custom query with $wp_query
$merged_args = array_merge( $wp_query->query, $exclude_featured_args );
// Query posts using the modified arguments
query_posts( $merged_args );
?>

それはメインのループから注目の投稿を除外する必要があります。

注:注目の投稿ループを表示するのと同じコンテキストでのみこれを実行します。

_編集_

あなたのコメントから:

私の機能は、「おすすめ」の投稿がない場合は自動的に最新の投稿を取得し、「おすすめ」として表示するように設定されています

繰り返しになりますが、注目するループに include postsに使用する方法をすべて選択してから、 exclude に同じ引数をプライマリループから使用することができます。

あなたの方法が何であるかを知らずに、それをあなたのexclude-posts引数配列に組み込む方法についての正確な答えを出すことはできません。

2
Chip Bennett