За исключением липких постов из петли и от wp_query () в WordPress?
-
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 -адресу, с заменой вашего домена:
Некоторые заметки о коде; Я должен был использовать массив эквивалент строки запроса Вы прошли 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; ?>