выпадающий список без отправки

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

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

Вот что у меня есть на данный момент…

            <div class="col-md-6 col-md-offset-3">
                <?php
                //создаем переменную, используя get_pages, создаем массив и получаем все названия страниц
                $pages =  get_pages(array(
                    'meta_key' => '_wp_page_template',
                    'meta_value' => 'template-services.php'
                ));
                ?>
                <p>Ищете что-то другое?</p>
                <select id="cat" class="form-control">
                    <?php
                    // для каждого элемента в массиве страниц присваиваем новой переменной page
                        foreach( $pages as $page ) {
                        //выводим переменную page для каждого элемента массива
                            echo '<option>' . $page->post_title . '</option>';
                        }?>
                </select>
            </div>

Может кто-то показать мне, как это сделать? Я знаю, что в кодексе WordPress есть скрипт, который позволяет делать это для категорий, но у меня нет представления, как его изменить под свои нужды.

Вы можете использовать функцию “get_page_link”, чтобы получить постоянную ссылку на текущую страницу (если в цикле) или на любую произвольную идентификацию страницы, если передать ее в качестве первого аргумента.

что-то вроде этого:

<a href="https://wordpress.stackexchange.com/questions/219011/<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a>

Ссылка: https://codex.wordpress.org/Function_Reference/get_page_link

Без проблем, попробуйте использовать событие “onChange”:

что-то вроде этого:

<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
<option value="">Выберите...</option>
<option value="http://www.google.com">Google</option>
<option value="http://www.yahoo.com">Yahoo</option>

Просто добавьте постоянную ссылку на страницу в значение опции.

Сначала оберните ваше поле ввода в form, использовать элементы формы напрямую — не лучшая идея. Затем сделайте так, чтобы ваша форма отправлялась нормально и связывалась с javascript. Таким образом, она будет работать в обоих направлениях независимо от того, включен ли javascript или нет.

Рассмотрим этот пример:

<div class="col-md-6 col-md-offset-3"><?php
    //создаем переменную, используя get_pages, создаем массив и получаем все названия страниц
    $pages =  get_pages(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'template-services.php'
    ));

    if (!empty($pages)) { ?>
        <p><?php _e('Ищете что-то другое?', 'your-text-doamin'); ?></p>
        <form method="GET" action="<?php echo home_url(); ?>">
            <select id="cat" class="form-control" name="p"><?php
                // для каждого элемента в массиве страниц присваиваем новой переменной page
                echo '<option data-url="" value="">' . __('Выберите', 'your-text-domain') . '</option>';
                foreach( $pages as $page ) {
                    //выводим переменную page для каждого элемента массива
                    echo '<option data-url="' . get_permalink($page->ID) .'" value="' . $page->ID . '">' . get_the_title($page->ID) . '</option>';
                } ?>
            </select>
            <noscript><input type="submit" value="<?php _e('Отправить', 'your-text-domain'); ?>" /></noscript>
        </form><?php
    } ?>
</div>

Здесь я использую data-url для перенаправления через javascript и значение с идентификатором страницы, чтобы мы могли отправить форму нормально. Обертываю кнопку submit в тег <noscript>, чтобы она не появлялась, когда JS включен.

Затем поместите этот javascript в ваш собственный js файл.

jQuery(document).ready(function (){
    jQuery('#cat').change(function (){
       if (jQuery(this).children('option:selected').data('url')) {
           window.location = jQuery(this).children('option:selected').data('url');
       } 
    });
});

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

Чтобы создать выпадающее меню, которое перенаправляет пользователей на выбранную страницу без использования кнопки "Отправить", можно использовать комбинацию HTML, PHP и JavaScript. Давайте рассмотрим, как это можно реализовать, основываясь на вашем запросе.

1. Извлечение страниц с помощью PHP

Сначала мы будем использовать функции WordPress для получения страниц, которые используют определенный шаблон. В вашем случае это будет template-services.php.

<div class="col-md-6 col-md-offset-3">
    <?php
    // Получаем страницы, использующие заданный шаблон
    $pages = get_pages(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'template-services.php'
    ));

    if (!empty($pages)) { ?>
        <p><?php _e('Ищите что-то другое?', 'your-text-domain'); ?></p>
        <select id="page-dropdown" class="form-control">
            <option value=""><?php _e('Выберите', 'your-text-domain'); ?></option>
            <?php foreach ($pages as $page) { ?>
                <option value="<?php echo get_permalink($page->ID); ?>">
                    <?php echo esc_html($page->post_title); ?>
                </option>
            <?php } ?>
        </select>
    <?php } ?>
</div>

2. Перенаправление с помощью JavaScript

Теперь давайте добавим JavaScript для обработки события изменения выпадающего списка. Когда пользователь выбирает страницу, будет выполняться перенаправление на URL выбранной страницы.

<script type="text/javascript">
    document.addEventListener('DOMContentLoaded', function () {
        document.getElementById('page-dropdown').addEventListener('change', function () {
            var selectedUrl = this.value;
            if (selectedUrl) {
                window.location.href = selectedUrl;
            }
        });
    });
</script>

3. Полный пример

Теперь объединим код в одно целое. Убедитесь, что этот код находится в вашем шаблоне WordPress, например, в файле header.php или footer.php.

<div class="col-md-6 col-md-offset-3">
    <?php
    $pages = get_pages(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'template-services.php'
    ));

    if (!empty($pages)) { ?>
        <p><?php _e('Ищите что-то другое?', 'your-text-domain'); ?></p>
        <select id="page-dropdown" class="form-control">
            <option value=""><?php _e('Выберите', 'your-text-domain'); ?></option>
            <?php foreach ($pages as $page) { ?>
                <option value="<?php echo get_permalink($page->ID); ?>">
                    <?php echo esc_html($page->post_title); ?>
                </option>
            <?php } ?>
        </select>
    <?php } ?>
</div>

<script type="text/javascript">
    document.addEventListener('DOMContentLoaded', function () {
        document.getElementById('page-dropdown').addEventListener('change', function () {
            var selectedUrl = this.value;
            if (selectedUrl) {
                window.location.href = selectedUrl;
            }
        });
    });
</script>

Заключение

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

Если у вас остались вопросы или вам нужна дополнительная помощь, не стесняйтесь обращаться!

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

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