Вопрос или проблема
Я пытаюсь использовать wp_list_pluck, чтобы вернуть массив имен таксономий из get_terms. Я не уверен, что делаю неправильно, но это выводит только “Array”:
$terms = get_terms(array(
'taxonomy' => 'state',
'hide_empty' => false,
));
$term_ids = wp_list_pluck( $terms, 'name' );
echo $term_ids;
Вы знаете, как мне вывести массив имен таксономий?
Причина, по которой я это делаю, заключается в том, что я хочу получить массив, чтобы преобразовать его в массив имен на JavaScript с помощью json_encode.
По большому счету, я использую jQuery Autocomplete и хотел бы получить свои имена таксономий в качестве предложений для поиска:
var availableTags = <?php echo json_encode( $term_ids ) ?>
Возможно, есть лучший способ достичь того, что я пытаюсь сделать? Спасибо.
Я просто решил это, используя:
$json = array();
$terms = get_terms( 'state' );
foreach ( $terms as $term ) {
$json[]=array( 'value'=> $term->name );
}
echo json_encode($json)
Простая ошибка в вашем коде wp_list_pluck()
возвращает массив, а не одно значение. Поэтому, когда вы выводите $term_ids
, вы пытаетесь вывести массив напрямую, который PHP отобразит только как Array
. Вместо этого вы должны использовать json_encode()
, чтобы преобразовать массив в строку JSON.
Замените эту строку
echo $term_ids;
на
echo json_encode($term_ids);
Ответ или решение
Для решения вашей задачи по получению массива имен таксономий от функции get_terms
и их последующему использованию в JavaScript для автозаполнения, можно использовать несколько шагов, включая правильное применение wp_list_pluck
и json_encode
. Давайте рассмотрим это более подробно.
Шаг 1: Получение таксономий с помощью get_terms
Вам необходимо получить термины для вашей таксономии (‘state’), используя функцию get_terms
. Корректный вызов функции выглядит так:
$terms = get_terms(array(
'taxonomy' => 'state',
'hide_empty' => false,
));
Шаг 2: Извлечение имен с помощью wp_list_pluck
Затем, вы можете использовать функцию wp_list_pluck
для извлечения имен всех терминов из полученного массива:
$term_ids = wp_list_pluck($terms, 'name');
Шаг 3: Преобразование в JSON
Однако, как верно заметили в ваших комментариях, при выводе массива имен с помощью команды echo
будет отображаться строка "Array", так как вы пытаетесь вывести массив напрямую. Вместо этого вам нужно использовать json_encode
, чтобы преобразовать массив в строку JSON:
echo json_encode($term_ids);
Шаг 4: Использование в JavaScript
Теперь вы можете использовать полученное значение в вашем JavaScript. Пример кода будет выглядеть следующим образом:
<script type="text/javascript">
var availableTags = <?php echo json_encode($term_ids); ?>;
$(function() {
$( "#autocomplete-input" ).autocomplete({
source: availableTags
});
});
</script>
Здесь #autocomplete-input
— это ID вашего поля ввода, где будет работать автозаполнение. Убедитесь, что jQuery UI подключен для автозаполнения.
Альтернативный подход
Если вы не хотите использовать wp_list_pluck
, можно получить JSON напрямую, формируя массив в цикле. Как вы уже указали в вашем решении, это можно сделать следующим образом:
$json = array();
$terms = get_terms('state');
foreach ($terms as $term) {
$json[] = array('value' => $term->name);
}
echo json_encode($json);
Этот подход также корректен, но complicates your code slightly by adding additional complexity in structuring the array. Использование wp_list_pluck
для работы с get_terms
является более элегантным решением.
Заключение
Таким образом, использование json_encode
для подключения массива терминов к вашему JavaScript коду будет наиболее рациональным подходом. Убедитесь, что у вас настроены все необходимые зависимости, такие как jQuery и jQuery UI, чтобы ваше автозаполнение работало должным образом.
Ваш код будет выглядеть чистым и современным, а функциональность — простой и эффективной, что улучшит взаимодействие пользователей с вашим веб-приложением. Если у вас есть дополнительные вопросы или вам нужна помощь с другим аспектом, не стесняйтесь обращаться.