web-dev-qa-db-fra.com

Exclure certaines catégories des dernières mises à jour

Je crée un site web. Il y a une colonne pour les dernières mises à jour. C'est le code que j'ai maintenant. Je ne suis pas vraiment bon en codage php. Voudrais être guidé par quelqu'un.

<?php
 $postslist = get_posts('numberposts=1&order=DESC&orderby=date');
 foreach ($postslist as $post) :
    setup_postdata($post);
 ?>
<?php the_excerpt(); ?>
<p class="date"><?php echo get_the_date(); ?></p>
<span class="button">
<a href="<?php the_permalink(); ?>">Read More</a>

Mais, je voudrais exclure certains messages de certaines catégories. Y a-t-il une solution pour y arriver? Je vous remercie!

4
Jornes

En plus de la réponse de Tim, on peut toujours utiliser un bon tax_query . Tous les paramètres de balise et de catégorie intégrés sont convertis en un tax_query correct avant d'être passés à la classe WP_Tax_Query pour générer la clause JOIN pour la requête SQL.

J'utilise un tax_query dans presque toutes les applications car cela donne beaucoup de flexibilité, en particulier en ce qui concerne les termes enfants, les exclusions de plusieurs termes et même de plusieurs taxonomies. Peut-être que le seul inconvénient est que vous ne pouvez pas utiliser la syntaxe de chaîne ici comme dans l'OP, car un tax_query est un tableau, vous devez utiliser la syntaxe de tableau pour les arguments de requête.

En bref, pour exclure les catégories, vous pouvez essayer ce qui suit

$args = [
    // Your other args
    'tax_query' => [
        [
            'taxonomy'         => 'category',
            'field'            => 'term_id',
            'terms'            => [1,2,3], // Array of term ids to exclude
            'operator'         => 'NOT IN', // Exclude
        'exclude_children' => false // Do not exclude the child terms from the terms defined to exclude
        ]
    ]
];
$postslist = get_posts( $args );
3
Pieter Goosen

En regardant rapidement la documentation de get_posts () , il ne semble pas que vous puissiez exclure une publication en fonction de sa catégorie.

EDIT: En fait, grâce à AntonChanning , vous pouvez simplement ajouter &cat=-1 à votre chaîne d'arguments, où 1 est l'ID de la catégorie que vous souhaitez exclure:

$postslist = get_posts('numberposts=1&order=DESC&orderby=date&cat=-1');

Vous pouvez également ajouter plusieurs catégories à cela si vous en avez besoin, par exemple. cat=-1,-2,-3


La "méthode Wordpress" préférée pour ce faire est avec WP_Query .

Si vous voulez le faire de cette façon, au lieu de votre appel à get_posts(), vous devrez créer une nouvelle instance de WP_Query et transmettre vos arguments dans un tableau. À partir du lien ci-dessus sous la rubrique Paramètres de catégorie:

category__not_in (array) - utilise l'id de la catégorie

C'est l'argument que vous voudrez utiliser pour exclure une catégorie:

$postslist = new WP_Query(array(
  "post_type" => "post",
  "posts_per_page" => 1,
  "order" => "DESC"
  "orderby" => "date",
  "category__not_in" => 1,
));

Vous remarquerez que j'ai également ajouté le type de publication 'post' pour imiter le comportement que vous auriez eu avec get_posts(), et le paramètre posts_per_page permet de spécifier le nombre de publications renvoyées avec WP_Query.

Un autre changement que vous devrez faire si vous descendez cette route WP_Query consiste à utiliser une boucle while au lieu de la foreach que vous avez actuellement. Il y a des exemples d'utilisation clairs sous l'en-tête Usage dans la documentation, afin d'éviter de les copier-coller.

Bonne chance!

4
Tim Malone