it-swarm-es.com

¿Excluyendo publicaciones pegajosas de The Loop y de WP_Query () en WordPress?

El siguiente fragmento de código es de un widget de barra lateral que enumera las "publicaciones recientes". Ya que está en la página de inicio y presento mi última publicación pegajosa de manera prominente en esa página, quiero saltar la pegajosa en este bucle. Sin embargo, el post_not_in=sticky_posts no tiene efecto.

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

Tomé la respuesta de @ tnorthcutt de WordPress 'Codex en query_posts() sobre parámetros pegajosos y creó un ejemplo de tandalone que puedes colocar como test.php en la raíz de tu sitio web y verlo ejecutarse navegando a una URL como esta, con tu dominio sustituido:

http://example.com/test.php

Algunas notas sobre el código; Tuve que usar una matriz equivalente de la cadena de consulta que pasaste a WP_Query() porque el argumento post__no_in no se puede pasar como una cadena delimitada por comas (no estoy seguro de por qué, probablemente una omisión ?).

También quería asegurarme de que sabes que comenzar con un offset=1 (en lugar de offset=0) significa que estarás excluyendo la primera publicación que de lo contrario sería devuelta por la consulta. Por supuesto, todavía obtendrás la cantidad de publicaciones especificadas por $number asumiendo que tienes tantas publicaciones aplicables +1. Así que aquí está el código:

<?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 desea excluir todas las publicaciones adhesivas de una consulta, use

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

(de el códice )

Sin embargo, parece que eso solo funcionará en 3.0 o superior: http://wordpress.org/support/topic/excluding-sticky-posts-using-query_posts

Edit: en respuesta a su comentario a continuación, intente esto (no estoy seguro de que esto funcione, pero espero que pueda comenzar):

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