За исключением липких постов из петли и от wp_query () в WordPress?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/958

  •  16-10-2019
  •  | 
  •  

Вопрос

Следующий фрагмент взят из виджета боковой панели, в котором перечислены «последние сообщения». Поскольку он на домашней странице, и я представляю свой последний липкий пост на этой странице, я хочу пропустить липкую в этой петле. Тем не менее post_not_in=sticky_posts не имеет эффекта.

<?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; ?>
Это было полезно?

Решение

я взял @tnorthcutt's Ответ от WordPress 'Codex на query_posts() о липких параметрах и создал пример тандалона, который вы можете упасть как test.php в корне вашего сайта и увидите, что он запускается, перейдя к такому URL -адресу, с заменой вашего домена:

http://example.com/test.php

Некоторые заметки о коде; Я должен был использовать массив эквивалент строки запроса Вы прошли WP_Query() поскольку post__no_in Аргумент не может быть принят в качестве строки с разграниченной запятой (не уверен, почему, вероятно, контроль?).

Также я хотел убедиться, что вы знаете, что начиная с offset=1 (вместо offset=0) означает, что вы будете исключать первый пост, который в противном случае будет возвращен запросом. Конечно, вы все равно получите количество сообщений, указанных $number Предполагая, что у вас есть так много применимых постов +1. Итак, вот код:

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

Другие советы

Если вы хотите исключить все липкие сообщения из запроса, используйте

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

(из Кодекс)

Похоже, что это будет работать только на 3,0 или более, хотя: http://wordpress.org/support/topic/excluding-sticky-posts-using-query_posts

РЕДАКТИРОВАТЬ: В ответ на ваш комментарий ниже, попробуйте это (я не уверен, что это сработает, но, надеюсь, он начнет вас):

<?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; ?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top