Верните массив из get_terms и сохраните его как массив JavaScript для автозаполнения поиска.

Вопрос или проблема

Я пытаюсь использовать 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, чтобы ваше автозаполнение работало должным образом.

Ваш код будет выглядеть чистым и современным, а функциональность — простой и эффективной, что улучшит взаимодействие пользователей с вашим веб-приложением. Если у вас есть дополнительные вопросы или вам нужна помощь с другим аспектом, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...