web-dev-qa-db-fra.com

Exclure les post-it de The Loop et de WP_Query () dans WordPress?

L'extrait suivant provient d'un widget de la barre latérale qui répertorie les "publications récentes". Depuis sa page d'accueil et mon dernier post collant en évidence sur cette page, je souhaite passer le collant dans cette boucle. Cependant, le post_not_in=sticky_posts n'a aucun effet.

<?php
    $the_query = new WP_Query("showposts=$number&offset=1&order=ASC&post_not_in=sticky_posts");

    while ($the_query->have_posts()) : $the_query->the_post();
        $do_not_duplicate = $post->ID; ?>
1
Scott B

J'ai pris @ tnorthcutt réponse de WordPress 'Codex sur query_posts() à propos de Sticky Parameters et créé un exemple tandalone que vous pouvez déposer en tant que test.php dans la racine de votre site Web et le voir s'exécuter en naviguant vers une URL similaire à celle-ci, avec votre domaine remplacé:

http://example.com/test.php

Quelques notes sur le code; J'ai dû utiliser un tableau équivalent à la chaîne de requête que vous avez transmise à WP_Query() car l'argument post__no_in ne peut pas être transmis sous forme de chaîne délimitée par des virgules (vous ne savez pas pourquoi, probablement un oubli ?).

De plus, je voulais m'assurer que vous sachiez que commencer par offset=1 (au lieu de offset=0) signifie que vous allez exclure le premier message qui serait sinon renvoyé par la requête. Bien sûr, vous aurez toujours le nombre de messages spécifié par $number en supposant que vous avez autant de messages applicables +1. Alors voici le code:

<?php
header('Content-Type:text/plain');
include "wp-load.php";

$number = 5;

$the_query = new WP_Query(array(
  'showposts' => $number,
  'offset' => 1,  // This will cause the query to skip over first post
  'order' => 'ASC',
  'post__not_in' => get_option("sticky_posts"),
  ));
while ($the_query->have_posts()) : $the_query->the_post();
  the_title(); 
endwhile;
3
MikeSchinkel

Si vous souhaitez exclure toutes les publications persistantes d'une requête, utilisez

query_posts(array("post__not_in" =>get_option("sticky_posts")));

(de le codex )

On dirait que cela ne fonctionnera que sur la version 3.0 ou supérieure, cependant: http://wordpress.org/support/topic/excluding-sticky-posts-using-query_posts

Edit: en réponse à votre commentaire ci-dessous, essayez ceci (je ne suis pas sûr que cela fonctionnera, mais j'espère que cela vous aidera à démarrer):

<?php 
$args=array(
    'showposts'=>'$number',
    'offset'=>'1',
    'order'=>'ASC',
    'post__not_in'=>get_option("sticky_posts")
    );
$the_query = new WP_Query($args);

    while ($the_query->have_posts()) : $the_query->the_post();

        $do_not_duplicate = $post->ID; ?>
1
Travis Northcutt