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

Готовые решения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/

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

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