Как создать выпадающие списки пользовательской таксономии для родителей и детей

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

Кто-нибудь может мне помочь, пожалуйста, я не силен в PHP. Я создал пользовательский тип записи под названием “used-car” и пользовательскую таксономию “used-car-category” в functions.php.

Вопрос:

Мне нужно создать форму поиска с выпадающим списком, которая отображает список категорий и подкатегорий на главной странице. Например:

выпадающий список 1 [марка автомобиля] “категория”
выпадающий список 2 [модель автомобиля] “подкатегория”
Кнопка поиска

Когда вы выбираете модель автомобиля в выпадающем списке, например, audi, второй выпадающий список отображает различные варианты моделей audi.

категория в CMS выглядит примерно так:

audi < категория
– a1 < подкатегория
– a6 < подкатегория
mercedes < категория
– класс a < подкатегория
– класс b < подкатегория
– класс c < подкатегория

Я бы хотел, чтобы эта форма поиска отображалась на главной странице. Может кто-нибудь мне помочь? Рабочий код был бы полезным.

Спасибо

<?php if ( is_taxonomy_hierarchical($taxonomy) ) : ?>
        <tr class="form-field term-parent-wrap">
            <th scope="row"><label for="parent"><?php _ex( 'Родитель', 'родитель термина' ); ?></label></th>
            <td>
                <?php
                $dropdown_args = array(
                    'hide_empty'       => 0,
                    'hide_if_empty'    => false,
                    'taxonomy'         => $taxonomy,
                    'name'             => 'parent',
                    'orderby'          => 'name',
                    'selected'         => $tag->parent,
                    'exclude_tree'     => $tag->term_id,
                    'hierarchical'     => true,
                    'show_option_none' => __( 'Нет' ),
                );

                /** Этот фильтр описан в wp-admin/edit-tags.php */
                $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy, 'edit' );
                wp_dropdown_categories( $dropdown_args ); ?>
                <?php if ( 'category' == $taxonomy ) : ?>
                <p class="description"><?php _e('Категории, в отличие от тегов, могут иметь иерархию. У вас может быть категория Jazz, и под ней дочерние категории для Bebop и Big Band. Совершенно необязательно.'); ?></p>
                <?php endif; ?>
            </td>
        </tr>
<?php endif; // is_taxonomy_hierarchical() ?>

Ответ или решение

Создание динамического выпадающего меню для категорий и подкатегорий в рамках пользовательского типа записи в WordPress — важная задача, особенно если вы хотите улучшить пользовательский опыт на вашем сайте. Давайте рассмотрим, как реализовать такую функциональность для вашего кастомного типа поста "used-car" и таксономии "used-car-category", использовав PHP и JavaScript (jQuery).

Шаг 1: Регистрация кастомного типа записи и таксономии

Убедитесь, что ваш кастомный тип записи (CPT) и таксономия правильно зарегистрированы в functions.php. Вы, вероятно, уже сделали это, но на всякий случай добавлю пример.

function register_used_car() {
    // Регистрация кастомного типа записи
    register_post_type('used-car', array(
        'labels' => array(
            'name' => __('Used Cars'),
            'singular_name' => __('Used Car')
        ),
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'thumbnail')
    ));
}
add_action('init', 'register_used_car');

function register_used_car_category() {
    // Регистрация таксономии
    register_taxonomy('used-car-category', 'used-car', array(
        'labels' => array(
            'name' => __('Car Categories'),
            'singular_name' => __('Car Category')
        ),
        'hierarchical' => true,
        'show_in_rest' => true
    ));
}
add_action('init', 'register_used_car_category');

Шаг 2: Создание формы с выпадающими списками

Теперь перейдем к созданию формы. Эта часть будет содержать PHP для генерации HTML и jQuery для динамического обновления подкатегорий.

HTML и PHP

Добавьте следующий код в том месте, где вы хотите отобразить форму на главной странице:

<form id="used-car-search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
    <select id="car-make-dropdown" name="car-make">
        <option value=""><?php _e('Выберите марку', 'textdomain'); ?></option>
        <?php
        $terms = get_terms(array(
            'taxonomy' => 'used-car-category',
            'parent' => 0,
            'hide_empty' => false,
        ));
        foreach ($terms as $term) {
            echo '<option value="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . '</option>';
        }
        ?>
    </select>

    <select id="car-model-dropdown" name="car-model" disabled>
        <option value=""><?php _e('Сначала выберите марку', 'textdomain'); ?></option>
    </select>

    <button type="submit"><?php _e('Поиск', 'textdomain'); ?></button>
</form>

jQuery для динамического обновления модели автомобилей

Теперь добавьте следующее в ваш JavaScript файл или прямо на страницу (не забудьте подключить jQuery):

jQuery(document).ready(function($) {
    $('#car-make-dropdown').change(function() {
        var parentCat = $(this).val();
        $('#car-model-dropdown').prop('disabled', !parentCat);

        if (parentCat) {
            $.ajax({
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                type: 'POST',
                data: {
                    action: 'get_car_models',
                    parent_cat_id: parentCat
                },
                success: function(response) {
                    $('#car-model-dropdown').html(response);
                }
            });
        } else {
            $('#car-model-dropdown').html('<option value=""><?php _e('Сначала выберите марку', 'textdomain'); ?></option>');
        }
    });
});

Шаг 3: Обработка Ajax-запроса в PHP

Добавьте следующий код в functions.php:

function get_car_models_callback() {
    $parent_cat_id = intval($_POST['parent_cat_id']);

    $child_terms = get_terms(array(
        'taxonomy' => 'used-car-category',
        'child_of' => $parent_cat_id,
        'hide_empty' => false
    ));

    if (!empty($child_terms)) {
        echo '<option value="">' . __('Выберите модель', 'textdomain') . '</option>';
        foreach ($child_terms as $term) {
            echo '<option value="' . esc_attr($term->term_id) . '">' . esc_html($term->name) . '</option>';
        }
    } else {
        echo '<option value="">' . __('Нет доступных моделей', 'textdomain') . '</option>';
    }

    wp_die();
}
add_action('wp_ajax_get_car_models', 'get_car_models_callback');
add_action('wp_ajax_nopriv_get_car_models', 'get_car_models_callback');

Заключение

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

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

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