web-dev-qa-db-fra.com

comment exclure les publications "en vedette" de la boucle principale?

Dans un modèle category.php, j'ai créé une fonction qui répertorie les publications "en vedette" avant la boucle principale. Les publications présentées sont sélectionnées à l'aide d'un champ personnalisé et de get_posts ():

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

Mon template category.php:

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

Cela fonctionne très bien, sauf que les articles présentés sont également listés dans la liste des articles. Je voudrais, de ma fonction, obtenir l'ID des articles en vedette et les supprimer de la boucle principale. Y a-t-il une bonne façon de le faire? Je pense que je pourrais utiliser une variable GLOBAL stockant un tableau d'identifiants exclus, mais j'aimerais éviter d'utiliser Globals pour cela.

1
pixeline

Ce serait une utilisation appropriée de query_posts() , avec une méta-requête personnalisée .

Puisque vous interrogez avec meta_key=featured_article&meta_value=on, vous devez alors exclure les mêmes paramètres.

<?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 );
?>

Cela devrait exclure les publications en vedette de la boucle principale.

Remarque: vous ne voudrez faire cela que dans le même contexte que celui dans lequel vous affichez la boucle de messages en vedette.

MODIFIER

De votre commentaire:

ma fonction est configurée de telle sorte que s'il n'y a pas de message "en vedette", il prend automatiquement les plus récents et les affiche comme "en vedette"

Encore une fois, vous pouvez utiliser la méthode que vous utilisez pour inclure des publications dans votre boucle sélectionnée, puis utiliser les mêmes arguments pour exclure le mêmes messages de la boucle principale.

Sans savoir quelle est votre méthode, je ne peux pas vous donner de réponse précise sur la manière de l'incorporer à votre tableau d'arguments exclus-posts.

2
Chip Bennett