web-dev-qa-db-fra.com

Exclure le post le plus récent de la catégorie X mais montrer le reste

Je souhaite afficher tous les messages, mais exclure uniquement le message NOUVEAU de la catégorie "En vedette", les autres messages de ce chat devraient s'afficher. Une idée de ce que je devrais ajouter à la boucle pour y parvenir? Je veux que tous les autres messages d'autres chats soient également affichés!

1
Wordpwess

Étant donné que par défaut, la boucle récupère les publications dans l'ordre décroissant, vous pouvez effectuer les opérations suivantes:

En dehors de la boucle:

$featured_flag = false;

Dans la boucle:

if(in_category('Featured')) {
    if($featured_flag) {
        the_content();
    }
    else {
        $featured_flag = true;
    }
}
else {
    the_content();
}

La première fois qu'un article de la catégorie En vedette est rencontré (c'est-à-dire le plus récent), il sera ignoré et le $featured_flag sera défini sur true. Les temps suivants dans la boucle the_content() seront affichés.

Edit : Pour tenir compte de la pagination, vous pouvez remplacer $featured_flag par une variable $_SESSION. Ainsi, la valeur true/false persistera sur plusieurs pages et, une fois définie, les articles true continueront à s'afficher correctement. Merci de signaler l'erreur de mes manières Bainternet :)

1
ggutenberg

Il y a quelque temps, j'ai posté une fonction simple qui obtient le dernier message dans une certaine catégorie :

function get_lastest_post_of_category($cat){
    $args = array( 'posts_per_page' => 1, 'order'=> 'DESC', 'orderby' => 'date', 'category__in' => (array)$cat);
    $post_is = get_posts( $args );
    return $post_is[0]->ID;
}

Donc, une fois que vous avez cette fonction, vous pouvez utiliser WP_Query ou query_posts et utiliser le paramètre post__not_in pour exclure cette publication.

query_posts(array(`post__not_in` => array(get_lastest_post_of_category($CAT_ID))));

remplacez simplement $ CAT_ID par l'id de la catégorie actuelle

1
Bainternet