web-development-kb-pt.site

Excluindo Posts do The Loop e do WP_Query () no WordPress?

O snippet a seguir é de um widget da barra lateral que lista "posts recentes". Desde a sua página inicial e eu caracterizo meu último post pegajoso proeminentemente nessa página, eu quero pular o pegajoso neste loop. No entanto, o post_not_in=sticky_posts não tem efeito.

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

Eu peguei @ tnorthcutt resposta de WordPress 'Codex em query_posts() sobre Parâmetros pegajosos e criou um exemplo tandalone que você pode colocar como test.php na raiz do seu site e vê-lo sendo executado navegando para um URL como este, com seu domínio substituído:

http://example.com/test.php

Algumas notas no código; Eu tive que usar um equivalente de array da string de consulta que você passou para WP_Query() porque o argumento post__no_in não pode ser passado como uma string delimitada por vírgula (não sei por que, provavelmente um descuido ?).

Também queria ter certeza de que saber que começar com offset=1 (em vez de offset=0) significa que você excluirá a primeira postagem que, de outra forma, seria retornada pela consulta. É claro que você ainda obterá o número de postagens especificadas por $number supondo que você tenha muitas postagens aplicáveis ​​em +1. Então aqui está o 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

Se você quiser excluir todas as postagens fixas de uma consulta, use

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

(de o códice )

Parece que isso só funcionará no 3.0 ou superior, embora: http://wordpress.org/support/topic/excluding-sticky-posts-using-query_posts

Edit: em resposta ao seu comentário abaixo, tente isso (eu não tenho certeza que isso vai funcionar, mas espero que você vai começar):

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