WordPress: Exclude post by ID from main loop
Рубрика: Development | 13 December 2008, 23:33 |
Vadim Voituk
Очень часто в wordpress, при получении списка заметок посредством создания WP_Query, нужно исключить одну или несколько, с определенными “магическими” ID.
Документация на codex.wordpress.org по этому поводу молчит. Взамен предлагается исключать только заметки из определенной категории.
Как вариант предлагается выполнять фитльтрацию внутри цикла:
$query = new WP_Query(...)
while ($query->have_posts()): $query->the_post();
if (get_the_ID() == '231231') continue;
...
endwhile;
Такой метод мне не очень по душе, потому как он изменяет количество результатов при выводе.
Немного поковырявшись в исходном коде класса WP_Query обнаружилось, что возможность исключить определенные post_ID на этапе запроса все-таки есть:
$query = new WP_Query("post__not_in[]=231231&post__not_in[]=231232&..")
Особенность недокументированного параметра “post__not_in” в том, что его значение обязательно должно быть arrray-ем (оттуда и символы “[" и "]“). Иначе получим warning и неверный результат.
Для “кодирования” списка ID в строку, можно воспользоваться функцией http_build_query().
Tweet
Довольно интересные сведения о недокументированных параметрах WP_Query.
А как на счёт
$query = new WP_Query(“post__not_contain[]=’можно воспользоваться воспользоваться функцией html_build_query()’&…”) ;) ?
Евгений, не понял вопроса.
Смысл вопроса кроется в последнем предложении Вашего поста
А теперь без загадок?
Вадим, я без задних мыслей хотел намекнуть на то, чтобы из последнего предложения
“Для “кодирования” списка ID в строку, можно воспользоваться воспользоваться функцией html_build_query().”
исключить слово “воспользоваться”, сори за каламбур :), просто настроение хорошее, не смотря на понедельник :)
О! Теперь понял. Спасибо – поправил. :)
Я делал так:
$posts = &get_posts(array(‘category__not_in’ => array(65, 4, 37, 125, 173, 126, 47, 49, 179, 171, 21), ‘numberposts’ => 10000, ‘post_status’ => ‘publish’));
Тоже работает :-)