Создайте выпадающий список на активной странице, а не в навигационном меню.

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

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

Я не уверен, есть ли у вас страницы с категориями, но я могу показать вам пример, используя записи вместо этого.

Фильтр по категориям из записей:

<?php

    $url = get_home_url();
    $category_slug = 'my-new-category'; //не забудьте получить слаг


    $posts_by_category = new WP_Query([
        'post_type' => 'post',
        'category_name' => $category_slug,
        'nopaging' => true
    ]);


    if ( $posts_by_category->have_posts() ) :
        $dropdown = '<select onchange="window.location.href = this.value" name="posts-by-category">';

        while ( $posts_by_category->have_posts ) : $posts_by_category->the_post();

            $dropdown .= sprintf('<option value="%s?p=%s">%s</option>', $url, get_the_ID(), get_the_title() );

        endwhile;

        $dropdown .= '</select>';

    endif; wp_reset_postdata();

    echo $dropdown;

?>

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

Конечно! Если вам нужно создать выпадающий список на странице, который позволит пользователям выбирать различные страницы (или посты) из определенной категории, вы можете воспользоваться следующим кодом на PHP для вашей темы WordPress.

Пример кода для создания выпадающего списка:

<?php

// Укажите URL домашней страницы
$url = get_home_url();
// Замените 'my-new-category' на нужный вам слаг категории
$category_slug = 'my-new-category'; 

// Запрос для получения постов по категории
$posts_by_category = new WP_Query([
    'post_type' => 'post',
    'category_name' => $category_slug,
    'nopaging' => true
]);

if ( $posts_by_category->have_posts() ) :
    // Создание выпадающего списка
    $dropdown = '<select onchange="window.location.href = this.value" name="posts-by-category">';

    while ( $posts_by_category->have_posts() ) : $posts_by_category->the_post();
        // Добавление опции для каждого поста
        $dropdown .= sprintf('<option value="%s">%s</option>', get_permalink(), get_the_title() );
    endwhile;

    $dropdown .= '</select>';

    // Выводим выпадающий список
    echo $dropdown;

endif; 
wp_reset_postdata();

?>

Как это работает:

  1. Получение URL: Сначала мы используем get_home_url(), чтобы получить URL вашего сайта.

  2. Создание WP_Query: В этом запросе мы указываем, что хотим получить все посты определенной категории, используя её слаг. Убедитесь, что вы заменили 'my-new-category' на тот слаг категории, который вам нужен.

  3. Формирование выпадающего списка: Если имеются посты, мы создаем элемент <select>, который будет вызывать поле выбора. Каждому посту в категории соответствует опция <option>, которая содержит ссылку на страницу поста.

  4. Обработка выбора: Когда пользователь выбирает опцию из выпадающего списка, происходит переход на страницу выбранного поста благодаря JavaScript: window.location.href = this.value.

  5. Сброс данных: После цикла по постам мы сбрасываем данные запроса с помощью wp_reset_postdata().

Вставка кода на страницу:

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

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

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

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