WP_Query и использование переменной для 'кошки' => в массиве args = Ошибка WP?

Ради этого обсуждения вот версия моего запроса в category.php:

wp_reset_query();
$category_id = get_cat_ID(single_cat_title('', false));
$my_query = new WP_Query(array(
'posts_per_page' => SOME_DEFINED_VALUE,
'cat'  => $category_id,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3')
));
// print_r($my_query);

Короче говоря, это не работает. Вот то, что я заметил.

Когда я делаю print_r ($my_query); я вижу query_vars в первой строке. Они не соответствуют моему массиву args. Например, posts_per_page значения по умолчанию к некоторому другому значению (не КОНСТАНТА), и список post_type больше не включают сообщение (который является, должен / должен).

Если я удаляю строку с 'кошкой' => или hardcode значение ('кошка' => 3) затем, каждая вещь работает как ожидалось. Остающиеся query_vars обнаруживаются в print_r. Жизнь хороша :)

Я попробовал следующее, но не нашел успеха:

  • Превращение var в КОНСТАНТУ, точно так же, как posts_per_page (который не вызывает проблему).
  • Кавычка Concating вокруг числа $category_id - результат не совпадает ни с какими кавычками вообще.Это не работает.
  • 'кошка' => массив ($category_id) - я вытянул ошибку - Этому не нравилось
    то, что это был массив.

У кого-либо есть какие-либо предложения?

Теперь вот то, что действительно "работало" (чтение: Я мог использовать свой $category_id, и выполнение так не испачкало остальную часть args в WP_Query () список массива).

'cat'  => '"-'$category_id'"',

Таким образом, я не мог тот идентификатор кошки. Сумасшедший, правильно?

Если я не могу разрешить его правильно, я собираюсь иметь разделенное ужаление запятой всей своей кошки not'ed, синтаксический анализ текущая кошка и затем использовать ту строку, чтобы сделать запрос. Другими словами, если бы мои кошки были A, B и C, вместо того, чтобы делать запрос для (поскольку можно было бы ожидать делать),

'cat' => A

Я собираюсь запросить для не B, не C.

'cat' => -B,-C

Надо надеяться, существует меньше решения взлома-y. Я был на этом слишком многими часами теперь, и я являюсь достаточно отчаянным, чтобы использовать этот взлом и быть сделанным с ним. Тем не менее это уверенное чувствует себя подобно ошибке в ядре мне. Да, я использую 3.5.1 (или мы до.2 или.3 теперь?). Моя точка, я нахожусь на последней версии (и это выполнило в том же 3.2.x).

btw, я видел эту проблему, отправленную в другом месте (например, форумы WP). Одно решение предположило, что массив args не является массивом, но строкой. Даже если бы это возможно с WP_Query, как я сделал бы список / массив для post_types как строка? Наконец, если я делаю что-то не так затем, что странице справки Кодекса нужно обновление, а?

Помощь. :)

2
30.01.2013, 16:44
4 ответа

Где/как Вы определяете $category_id?

Сошлитесь на запись Кодекса для WP_Query() параметры категории. WP_Query() ожидает, что категория ID будет передана как целые числа, не как строки:

  • Если $category_id целое число, передайте его 'cat'.
  • Если $category_id массив (категории ID, снова как целые числа), передайте ее 'category__in'
2
19.02.2020, 22:32
  • 1
    Спасибо @Chip. Эта строка, прямо выше запроса: $category_id = get_cat_ID (single_cat_title ('', ложь)); Если я повторяю его для экранирования, это там, и это выглядит кошерным мне. На самом деле query_vars ДЕЙСТВИТЕЛЬНО перечисляет 'кошку' =>, проблема, per_page и post_types идут wonky. Я не вытягиваю необъявленный var или тип, являющийся неправильным. Насколько я могу сказать, что это не проблема. Какие-либо другие предложения? Еще раз спасибо –  Chief Alchemist 30.01.2013, 17:34
  • 2
    И что возвращает та строка? Попробуйте a var_dump( $category_id ). –  Chip Bennett 30.01.2013, 17:37
  • 3
    var_dump возвраты: строка (1) "7". OH? –  Chief Alchemist 30.01.2013, 18:01
  • 4
    , который я добавил / протестировал это: $category_id = (интервал) get_cat_ID (single_cat_title ('', ложь)); var_dump ($category_id); и WP_Query игнорирует мой args и значения по умолчанию к чему-то еще. Хорошая попытка, но лучше всего я могу сказать, что тип (строка или интервал) не является проблемой. И если я переношу международный $var в '"'. $var. '"' это НЕ работает. НО' "-'. $var. '"'; делает. НЕ = хорошо, еще мои args отбрасываются, и это переходит к некоторым значениям по умолчанию(?) –  Chief Alchemist 30.01.2013, 18:07
  • 5
    Так, так же, как крайне рискованное попытайтесь преобразовать тип $category_id как целое число? –  Chip Bennett 30.01.2013, 18:25

Я предполагаю, что это имеет отношение к способу, которым Вы получаете категорию. Я действительно настраивал функцию на блоге, я продолжаю работать; $category_id всегда 0.

Таким образом для проверки я использую эту строку для $category_id :

global $post;
$category_id = get_the_category($post->ID)[0]->term_id;

Просто быстрый способ присвоить первую категорию сообщению.

После этого запрос был в порядке и catпараметр на запросе заполняется.

0
19.02.2020, 22:32
  • 1
    Спасибо @Simon. Позвольте мне разъясняться немного. 'Кошка' => $var действительно работает (своего рода). Я обнаруживаюсь в query_var. Однако при использовании $var для делания уроки другие дела идут wonky (например, posts_per_page, post_type, и т.д.). Я не получаю ошибку. То, что происходит, является массивом аргумента I нас в WP_Query (), не соответствует тому, что я вижу в print_r () *, когда я пытаюсь присвоить 'кошку' => с $var. Да, перенесите голову вокруг этого :) Кроме того, я пытаюсь использовать строку кода, которую Вы упоминаете, и я вытягиваю: Ошибка анализа: синтаксическая ошибка, неожиданная' ['.?? –  Chief Alchemist 30.01.2013, 17:44
  • 2
    я добавляю global $post, я предполагаю, что это - то, что бросает ошибку анализа, извините. Я не заметил на своих тестах ничто плохого кроме пустого $category_id. Просто примечание, я не использую print_r, который трудно считать, я использую консольный плагин, которые позволяют Вам видеть переменные в консоли поджигателя. Это очень удобно и делает читающий намного более легкий –  Simon 30.01.2013, 18:06
  • 3
    Хорошо... Я добавил глобальный $post; самостоятельно в первый раз и все еще вытянутый ошибка. Я предполагаю вот почему, что я спрашивал. Странный, правильно? –  Chief Alchemist 30.01.2013, 22:23
  • 4
    Хорошо, это должно работать только на единственной странице, не странице категории, извините я пропустил это! Это интересно, но существует, вероятно, explaination к Вашей проблеме. –  Simon 30.01.2013, 22:59
  • 5
    я проверил Ваш исходный код в category.php страницу и он работает правильно. Никакая путаница в post_type или post_per_page. –  Simon 30.01.2013, 23:11

Когда я пролил Вашу вещь в управляемые блоки для анализа их, я нашел, что проблема была наиболее вероятной с "разбитой на страницы" строкой в массиве.

wp_reset_query();
$category_id = get_cat_ID(single_cat_title('', false));

$paged = ( get_query_var('paged') )? get_query_var('paged') : 1 ;

$query = array(
'posts_per_page' => 5,
'cat'  => $category_id,
'paged' => $paged ,
'post_type' => array('post','custom_1','custom_2','custom_3')
);

$loop = new WP_Query( $query);

print_r($loop);

Поскольку Вы видите, что я добавил дополнительную скобку вокруг первого get_query_var так, чтобы это стало надлежащим тернарным оператором. Я попробовал это на своей тестовой буровой установке, и она работала просто великолепно.

отношения Andy

0
19.02.2020, 22:32
  • 1
    Спасибо @Andy Killen. Печальный сказать это не помогло. В этой точке это очень быть чем-то где-то в другом месте в теме. Тем не менее я ожидал бы, что wp_reset_query () даст мне чистый лист, да? Как это, 'кошка', присваиваемая с $val, заставляет WP искать некоторый другой набор args. Это ДЕЙСТВИТЕЛЬНО похоже на набор, который сайт использует в другом месте. То, что я не понимаю, то, почему. Почему использование не является args, который я прошу, чтобы это использовало? И лучше все еще, так как я не вытягиваю реальных ошибок, как я должен сделать abuot, пытающийся придавить эту "утечку"? Любые предложения значительно ценились бы.Спасибо! –  Chief Alchemist 30.01.2013, 22:42
  • 2
    , который я согласовываю с Wyck (в настоящее время ниже), это наиболее вероятно проблема с другим плагином или Вашей темой. Я попытался бы отключить все плагины и попробовать еще раз, и затем если это не делает задания, попытайтесь поместить Вас categories.php в twentyten тему или подобный и попробовать там. wp_reset_query () не так жизненно важен в этой ситуации. Вы могли посмотреть на это как являющееся вложенным циклом в стандартном цикле, если бы Вы действительно хотели, поскольку Вы используете свой собственный var для хранения цикла, он не будет иметь значения так. –  Andy Killen 30.01.2013, 22:48
  • 3
    Что, если я просто сделал надлежащий SQL-запрос? Это не собирается добавлять какие-либо дополнительные издержки, и т.д., корректный? Мне просто кажется, что к тому времени, когда я разыскиваю источник "утечки" - и я никогда не мог бы мочь сделать это, так как использование $var, инициировавшего "ошибку", просто нечетно для начала, а - я мог просто вытряхнуть SQL-оператор и не иметь для волнения о WP_Query () и его проблемы. –  Chief Alchemist 30.01.2013, 23:37
  • 4
    На самом деле я думаю, что мой План A на данный момент будет строкой со всеми кошками not'ed. И затем я удалю текущую кошку. Opps, я думаю, что уже упомянул это как решения. Сумасшедший, но я буду работать. И если я нахожу дыру когда-нибудь, я могу просто удалить этот "взлом". –  Chief Alchemist 30.01.2013, 23:59

Я протестировал Вашу функцию, и она хорошо работает, таким образом, у Вас, вероятно, есть ошибка с некоторым другим кодом в Вашей теме или сменном конфликте. Или возможно Вы циклично выполняетесь, не корректно.

Для ссылки я протестировал следующий код category.php в twentyeleven вывод был корректен без ошибок.

wp_reset_query();
define("SOME_DEFINED_VALUE", 5);

$category_id = get_cat_ID(single_cat_title('', false));

$my_query = new WP_Query(array(
'posts_per_page' => SOME_DEFINED_VALUE,
'cat'  => $category_id,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3')
));

var_dump($my_query);
0
19.02.2020, 22:32
  • 1
    Привет @Wyck - Да, именно это я склонен верить. Таким образом, где-то в другом месте существует что-то. Я предполагаю, что, потому что значения по умолчанию (т.е. что мой массив аргумента угроблен для некоторого другого множества значений query_arr) должны прибыть из куда-нибудь, а? Но это - то, что я нахлобучиваю we_reset на вершину. Продвиньте некоторых пихаться, который должен оставить меня с чистым листом, да? Несмотря на это, почему был бы, устанавливая 'кошку' => (и далеко как я могу сказать, только что parm) с $var быть проблемой. Тот уровень странности чувствует себя подобно большому мне. Вы? Все, что сказало... что какие-либо мысли о решении? Или как найти ошибку темы / дыра? –  Chief Alchemist 30.01.2013, 22:27
  • 2
    Проверьте, что шаблонная страница для других циклов или это включает другие части шаблонов (include или get_template_part), отключите их и посмотрите, работает ли это, удалите виджеты из загрузки, удалите плагины, проверьте, угоняет ли что-либо запрос через pre_get_posts, проверьте, использует ли что-либо еще Ваш $my_query (измените имя). –  Wyck 31.01.2013, 00:14

Теги

Похожие вопросы