На самом деле не так много плагинов которые реализуют функцию поиска по алфавитному указателю, тем более таксономий. А если учесть что большинство плагинов имеют очень много настроек от которых мало толку и часто бывает так что сложно настроить внешнее отображение. То можно сделать вывод что далеко не всегда нужно использовать плагины, тем более простой алфавитный указатель для wordpress мы и сами сможем реализовать.
Для начала приведу пример того что мы будем делать:
Мы реализуем функционал поиска по алфавиту исполнителей. Сами исполнители — это категории(или таксономии). То есть мы будет использовать алфавитный указатель для поиска
категорий(таксономий). Искать будем по первой букве в названии категории.
Первое что нам нужно сделать это создать в админке вордпресс новую страницу.
«Страницы» — «Добавить новую»
Теперь мы создадим новый шаблон для созданной страницы. В данном шаблоне у нас будет алфавитный указатель и результаты поиска.
Создадим файл с названием artists.php(в моем случае я ищу исполнителей, вы можете назвать как вам удобно).
Откроем созданный файл и пропишим основу нашего нового шаблона.
1 2 3 4 5 6 7 8 9 10 |
<?php /* Template Name: artists */ get_header(); /* Контент */ get_sidebar(); get_footer(); ?> |
Template Name: artists — Задаем название нашего нового шаблона.
Теперь вернемся обратно в админку и для нашей страницы выберем в качестве шаблона:
Страницу создали осталось только написать поиск по алфавитному указателю.
Первое что мы сделаем это выведем русский, английски алфавиты а так же цифры — программно.
Вывод русского алфавита:
1 2 3 4 5 6 7 |
$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 - меняем на свой адрес } |
Английский алфавит:
1 2 3 |
for ($i=ord('A'); $i<=ord('Z'); $i++){ echo '<li><a href="/artists.html?letter='.chr($i).'">'.chr($i).'</a></li>'; // artists.html - меняем на свой адрес } |
Цифры:
1 2 3 |
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 2 3 4 5 6 |
// возьмем только 1 буквы из get запроса в кодировке utf-8 $letter = mb_substr($_GET['letter'], 0, 1, 'utf-8'); // Сделаем данную букву заглавной $letter_upp = mb_strtoupper($letter, 'UTF-8'); |
Теперь у нас есть $letter_upp которая содержит букву в верхнем регистре. Именно категории(таксономии) которые начинаются на данную букву мы будем искать.
Теперь мы получим список всех категорий или таксономий, и каждую будем сравнивать с нашей буквой(будем брать 1ю букву из названия категории и сравнивать с той которая в get запросе).
Посмотрите код, он содержит комментарии:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Получаем все категории. Можно заменить "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>"; } |
Вот и все, наш поиск готов!
Скачать готовый код можно по ссылке ниже:
Алфавитный указатель для вордпресс
Спасибо! Искал возможность вывода информации из меток в алфавитном порядке и вот Ваш вариант мне очень подходит. Мне только надо было ещё помимо name вывести ещё и url найденной метки. Незнаю насколько правильно я сделал, но вроде такой вот код работает:
echo «slug . «‘>» . $term->name . ««;
может можно сделать более правильно?
Сделайте var_dump($term) — выведется на страницу объект. И в браузере через «посмотреть исходный код»(правой кнопкой мыши на странице), посмотрите какие еще переменные есть.
Если сложно посмотрите список тут: https://codex.wordpress.org/Function_Reference/get_terms
Дмитрий, такой пример как у Вас работать не будет, во всяком случае правильно работать не будет. Я изначально пробовал также, но пришёл к немного другому способу. Вот : echo ‘term_id ) . ‘ ‘>’ . $term->name . ‘‘; get_category_link — это функция, которая выдает ссылку на категорию по переданному ей ID, а собственно этот ID мы получаем из массива $term. Такой способ точно будет работать так как нужно 🙂
День добрый!
Спасибо большое за пост, очень полезная информация.
У меня возник вопрос, как модифицировать код, чтобы алфавит делал выборку только по товарам из одной определенной категории? Можете помочь?
Заранее благодарю!
Смотрите в сторону цикла вордпресс с произвольными параметрами:
http://wp-kama.ru/function/wp_query
Здравствуйте! Подскажите, пожалуйста, а как этот способ применить в woocommerce, чтобы делать выборку товаров по алфавиту (то есть не по категории, а по названию товара)?
Предлагаю ещё одну похожую реализацию алфавитного поиска, которую применяю на своём сайте. В моём варианте не создаётся произвольный цикл, а есть возможность использовать стандартный. За фильтрацию отвечает функция в файле functions.php, а для вывода списка добавляется код генерации алфавита на страницах архива (например, файл archive.php). Я постарался объяснить всё подробно и с примерами.
Ссылка на инструкцию: https://onstartup.ru/articles/wordpress/alfavitnyj-ukazatel-wordpress/