Вопрос или проблема
Я собираюсь получить несколько полей из результата wp_query. Я знаю о функции wp_list_pluck(), но она принимает только один параметр поля. Как получить несколько, если я хочу взять несколько параметров из каждого найденного поста?
[
Объект1 (ID, имя, тег),
Объект2 (ID, имя, тег),
Объект3 (ID, имя, тег),
и т.д.
]
Спасибо за вашу помощь заранее!
Вот кусок моего кода:
$search_param = get_param('search_param', null, 'text'); // POST параметр
$term_id = get_term_by('name', "$search_param", 'image_color')->term_id;
$args = array(
'post_type' => 'any',
'post_status' => 'any',
'meta_query' => array(
array(
'key' => 'image_color',
'value' => sprintf( 's:%s:"%s"', strlen($term_id), $term_id ),
'compare' => 'LIKE'
),
),
);
$query = new WP_Query( $args );
$hello = [
'ID' => wp_list_pluck($query->get_posts(), 'ID'),
'post_title' => wp_list_pluck($query->get_posts(), 'post_title')
];
Попробуйте установить 3-й параметр для функции wp_list_pluck, так как, если он не установлен, происходит ненужный, для вас, цикл. Попробуйте установить его в true или в какой-то несуществующий в объекте ключ.
Надеюсь, это поможет.
Ответ или решение
Чтобы извлечь несколько полей из результатов WP_Query
, вы можете использовать цикл для перебора постов и собирать необходимые данные в массив. Это позволит вам получить доступ ко всем нужным полям, которые вы хотите извлечь. К сожалению, функцию wp_list_pluck()
можно использовать только для извлечения одного поля за раз, поэтому в вашем случае оптимальным способом будет использование цикла.
Ниже приведен пример кода, который решает вашу задачу:
$search_param = get_param('search_param', null, 'text'); // Получаем параметр из POST запроса
$term_id = get_term_by('name', $search_param, 'image_color')->term_id;
$args = array(
'post_type' => 'any',
'post_status' => 'any',
'meta_query' => array(
array(
'key' => 'image_color',
'value' => sprintf('s:%s:"%s"', strlen($term_id), $term_id),
'compare' => 'LIKE'
),
),
);
$query = new WP_Query($args);
// Массив для хранения результатов
$results = [];
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$results[] = [
'ID' => get_the_ID(),
'name' => get_the_title(),
'tag' => get_post_meta(get_the_ID(), 'tag', true) // Замените на нужный ключ для 'tag'
];
}
wp_reset_postdata(); // Сброс глобальной переменной $post
}
// Теперь $results содержит массив объектов с несколькими полями
print_r($results);
Описание работы кода:
- Получение параметра: Мы получаем параметр из POST-запроса с помощью функции
get_param()
. - Запрос термина: Используем функцию
get_term_by()
для получения идентификатора термина. - Настройка WP_Query: Создаем параметры для
WP_Query
, включаяmeta_query
для фильтрации постов. - Цикл по постам: Проверяем, есть ли посты, и затем с помощью цикла
while
перебираем их. В каждой итерации получаем ID, заголовок и нужное значение поляtag
, используя функциюget_post_meta()
. - Сохранение результатов: Каждую запись сохраняем в массив
$results
. - Сброс глобальной переменной: После обработки постов важно сбросить глобальную переменную
$post
с помощьюwp_reset_postdata()
. - Вывод результатов: В конце мы используем
print_r()
для вывода массива результатов.
Таким образом, вы получите массив, содержащий нужные поля для всех постов, соответствующих условиям вашего запроса.