Запрос WP с несколькими категориями - передача массива работает?
Согласно кодексу, для запроса сообщений, которые могут принадлежать к любой из набора категорий, нам нужно сделать что-то вроде этого:
$query = new WP_Query( array( 'cat' => '2,6,17,38' ) );
Https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters
Однако у меня есть следующее, что работает, и я не уверен, почему.
$args = array(
'cat' => $related_cat_ids,
'posts_per_page' => -1,
);
$query = new WP_Query($args);
Причина, по которой я в замешательстве, заключается в том, что $related_cat_ids на самом деле является массивом, но в примере четко показана строка чисел, разделенная запятые, для значения "кошка".
Это то, о чем я должен беспокоиться? Перестанет ли мой код внезапно работать в будущем выпуске WordPress? В моем случае удобнее продолжать использовать массив, а не форматировать его в эту строку. Причина в том, что я использую get_the_category()
для динамического получения категорий, а затем помещаю идентификаторы из этого массива в свой новый массив.
2 answers
Я понимаю ваше замешательство, но вам не о чем беспокоиться, так как за кулисами Wordpress предпринимает все необходимые шаги, чтобы заставить его работать.
Например, возьмите следующий код из class-wp-query.php
// If querystring 'cat' is an array, implode it.
if ( is_array( $q['cat'] ) ) {
$q['cat'] = implode( ',', $q['cat'] );
}
Проверяет, является ли массив массивом, и быстро преобразует результат в строку, разделенную запятыми.
Другим способом будет использование других опций, таких как:
category__and An array of category IDs (AND in).
category__in An array of category IDs (OR in, no children).
category__not_in An array of category IDs (NOT in).
Подробнее об этом в Category_Parameters
Но опять же я будет держаться, чтобы использовать так, как вам удобнее.
Совершенно нормально использовать формат array()
, если вы считаете его более полезным, кроме того, это то, что делает Wordpress веселым и полезным инструментом для работы.
Да, это сработает. Информация может быть не указана в кодексе. Но если вы посмотрите на код здесь относительно параметра, вы обнаружите, что даже если массив передается, он изменяется на строку.
// If querystring 'cat' is an array, implode it.
if ( is_array( $q['cat'] ) ) {
$q['cat'] = implode( ',', $q['cat'] );
}
Так что вы должны быть в безопасности. Насколько я понимаю, хорошо, что и строка, и массив принимаются в качестве аргументов, и сообщество WordPress, вероятно, оставит все как есть.
Даже если у вас все еще есть сомнения, вы всегда можете использовать категорию__ в параметре, который всегда принимает массив, как показано ниже:
$args = array(
'category__in' => $related_cat_ids,
'posts_per_page' => -1,
);
$query = new WP_Query($args);