• Поиск категорий и таксономий по алфавиту. Алфавитный указатель. [Готовое решение]

    Готовые решения7 комментариев

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

    Для начала приведу пример того что мы будем делать:

    алфавитный укозатель

    Мы реализуем функционал поиска по алфавиту исполнителей. Сами исполнители — это категории(или таксономии). То есть мы будет использовать алфавитный указатель для поиска

    категорий(таксономий). Искать будем по первой букве в названии категории.

    Первое что нам нужно сделать это создать в админке вордпресс новую страницу.

    «Страницы» — «Добавить новую»

    Теперь мы создадим новый шаблон для созданной страницы. В данном шаблоне у нас будет алфавитный указатель и результаты поиска.

    Создадим файл с названием artists.php(в моем случае я ищу исполнителей, вы можете назвать как вам удобно).

    Откроем созданный файл и пропишим основу нашего нового шаблона.

    <?php
    /*
    Template Name: artists
    */
    get_header();
    
    /* Контент */
    get_sidebar();
    get_footer();
    ?>

    Template Name: artists — Задаем название нашего нового шаблона.

    Теперь вернемся обратно в админку и для нашей страницы выберем в качестве шаблона:

    выбор шаблона

    Страницу создали осталось только написать поиск по алфавитному указателю.

    Первое что мы сделаем это выведем русский, английски алфавиты а так же цифры — программно.

     

    Вывод русского алфавита:

    $abc_rus = array();
    foreach (range(chr(0xC0), chr(0xDF)) as $b) {
    $abc_rus[] = iconv('CP1251', 'UTF-8', $b);
    }
    foreach ($abc_rus as $lette_rus) {
    echo '<li><a href="/artists.html?letter='.$lette_rus.'">'.$lette_rus.'</a></li>'; // artists.html - меняем на свой адрес
    }

    Английский алфавит:

    for ($i=ord('A'); $i<=ord('Z'); $i++){
    echo '<li><a href="/artists.html?letter='.chr($i).'">'.chr($i).'</a></li>'; // artists.html - меняем на свой адрес
    }

    Цифры:

    for ($i = 0; $i<=9; $i++){
    echo '<li><a href="/artists.html?letter='.$i.'">'.$i.'</a></li>'; // artists.html - меняем на свой адрес
    }

    Как вы видите буквы и цифры я вывожу списком, при этом каждая буква это ссылка. Давайте разберем ссылку.

    /artists.html?letter=D 

    /artists.html — Это адрес страницы которую мы создали и прописали наш шаблон. У вас данный адрес будет свой, поэтому вам в коде нужно заменить!

    ?letter=D  — тут мы передаем с помощью get запроса переменную letter которая содержит букву которую будем искать.

     

    И так теперь у нас есть алфавит который автоматически строится и создает ссылки на нашу страницу поиска, передавая нужные параметры(нужную букву).

    Теперь осталось написать обработчик который будет брать значение переменной letter и выводить нам нужные рубрики.

    Откроем наш новый шаблон (в моем случае artists.php) и после строчки с get_header(); напишем следующий код:

    // возьмем только 1 буквы из get запроса в кодировке utf-8
    
    $letter = mb_substr($_GET['letter'], 0, 1, 'utf-8');
    
    // Сделаем данную букву заглавной
    $letter_upp = mb_strtoupper($letter, 'UTF-8');

    Теперь у нас есть $letter_upp которая содержит букву в верхнем регистре. Именно категории(таксономии) которые начинаются на данную букву мы будем искать.

    Теперь мы получим список всех категорий или таксономий, и каждую будем сравнивать с нашей буквой(будем брать 1ю букву из названия категории и сравнивать с той которая в get запросе).

    Посмотрите код, он содержит комментарии:

    // Получаем все категории. Можно заменить "category" на вашу таксономию.
    
    // Сортируем по названию в порядке убывания. Также не будем показывать категории у которых нет записей.
    
    $terms = get_terms("category", 'orderby=name&hide_empty=0&order=ASC');
    
    // Проверяем есть ли у нас на сайте есть категории
    $count = count($terms);
    if ($count > 0) {
    echo "<ul class='new_singer'>";
    
    // Перебираем массив со всеми категориями
    foreach ($terms as $term) {
    
    // Берем первую букву категории
    $artist_name_letter = mb_substr($term->name, 0, 1, 'utf-8');
    
    // Сравниваем без учета регистра искомую букву с первой у категории
    if( strnatcasecmp ($letter_upp, $artist_name_letter) == 0){
    
    /* выводим название категории которая подходит */
    echo "<li>". $term->name . "</a></li>";
    }
    }
    echo "</ul>";
    }

    Вот и все, наш поиск готов!

    Скачать готовый код можно по ссылке ниже:

    Алфавитный указатель для вордпресс

     


    7 комментариев

    • Дмитрий 16.12.2015

      Спасибо! Искал возможность вывода информации из меток в алфавитном порядке и вот Ваш вариант мне очень подходит. Мне только надо было ещё помимо name вывести ещё и url найденной метки. Незнаю насколько правильно я сделал, но вроде такой вот код работает:
      echo «slug . «‘>» . $term->name . ««;
      может можно сделать более правильно?

    • Дмитрий, такой пример как у Вас работать не будет, во всяком случае правильно работать не будет. Я изначально пробовал также, но пришёл к немного другому способу. Вот : echo ‘term_id ) . ‘ ‘>’ . $term->name . ‘‘; get_category_link — это функция, которая выдает ссылку на категорию по переданному ей ID, а собственно этот ID мы получаем из массива $term. Такой способ точно будет работать так как нужно 🙂

    • Osman 20.01.2017

      День добрый!
      Спасибо большое за пост, очень полезная информация.
      У меня возник вопрос, как модифицировать код, чтобы алфавит делал выборку только по товарам из одной определенной категории? Можете помочь?
      Заранее благодарю!

    • stasonn777 12.09.2017

      Здравствуйте! Подскажите, пожалуйста, а как этот способ применить в woocommerce, чтобы делать выборку товаров по алфавиту (то есть не по категории, а по названию товара)?

    • branky 29.06.2018

      Предлагаю ещё одну похожую реализацию алфавитного поиска, которую применяю на своём сайте. В моём варианте не создаётся произвольный цикл, а есть возможность использовать стандартный. За фильтрацию отвечает функция в файле functions.php, а для вывода списка добавляется код генерации алфавита на страницах архива (например, файл archive.php). Я постарался объяснить всё подробно и с примерами.

      Ссылка на инструкцию: https://onstartup.ru/articles/wordpress/alfavitnyj-ukazatel-wordpress/

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

    Войти с помощью: