Q:

WP query_posts() работает не корректно

У меня есть такой код:
$args = array(
    'post_type'          => 'portfolio',
    'paged'              => $paged,
    'orderby'            => $orderby,
    'order'              => $order,
    );

global $query_string;

//var_dump($args);

query_posts($args);

Раньше был еще фильтр по категории 
'category'           => '22'

Сейчас я его убрал, но все равно выводятся записи только с этой категории.  Что я сделал не так? 

A:

Во-первых, фильтр по категории как не работал, так и не работает.  Потому что нет такого параметра category в query_posts.  Есть:
cat(число)
category_name(строка)
category__and(массив)
category__in(массив)
category__not_in (массив)

Во-вторых, использовать query_posts() может быть опасно.  query_posts() предназначена для самого WordPress и должна использоваться для изменения основного цикла WordPress.  Если нужно создать еще один цикл, то используйте get_posts() или WP_Query.  Эти функции могут принимать те же параметры, что и query_posts(). 
Основной запрос WordPress — это запрос, который выполняется до вывода какого-либо текста на страницу (на раннем этапе).  Параметры такого запроса собирает сам WP опираясь на: запрошенный URL; настройки ЧПУ (постоянных ссылок) и др.  Так WordPress определяет сколько записей показать на странице, записи из какой рубрики показывать и т.д. 
А вторичный запрос - это тот, который создается пользователем (темой, плагином) и выполняется дополнительно к основному.  Например: вывод в сайдбаре списка популярных записей, вывод комментируемых записей и т.п. 
Так вот, если использовать query_posts() для создания вторичных запросов (циклов), то могут появится ошибки, из-за которых будет рушиться структура и тип страниц, так как повторный вызов query_posts() переписывает базовый запрос WP, на основе которого определяется тип текущей страницы (запись, рубрика), определяется сколько записей показывать на странице (пагинация) и многое другое. 
Источник. 
ВЫВОД
Используйте get_posts() или WP_Query.