WordPress: список всех таксономий с алфавитным указателем

Wordpress: список всех таксономий с алфавитным указателем

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

Задача была следующая:
нужно вывести список всех таксономий (в моем случае исполнителей на сайте с музикальными воспроизведениями) с алфавитным указателем. Плагинов или кусков кода в сети полно, НО все они без поддержки кириллицы.

Для оформления списков использовал стили Bootstrap и очень надеюсь, что мое решение (без установки дополнительных плагинов) поможет вам:

<?php 
$l=0; // Просто счетчик для букв
$list = '<div class="row"><div class="col-sm-6">'; //Оболочка списка таксономий
$index_line = '<nav><ul class="pagination pagination-sm">'; //Оболочка алфавитного указателя
$args = array(
  'hide_empty' => true,  // Установите значение true, чтобы скрыть таксономии без записей.
);
$tags = get_terms('YOUR_TAXONOMY',$args); // замените "YOUR_TAXONOMY" на нужную, например, для woocommerce это "product_category"
$groups = array(  );
if( $tags && is_array( $tags ) ) {
  foreach( $tags as $tag ) {
	$first_letter=mb_strtoupper(mb_substr($tag->name, 0, 1, 'utf-8'));
    $groups[ $first_letter ][] = $tag;
  }
  if( !empty( $groups ) ) {
 
    foreach( $groups as $letter => $tags ) {
		$l++;
	$index_line .= '<li><a class="scrollto" href="#letter-'.$l.'">' . apply_filters( 'the_title', $letter ) . '</a></li>';
      $list .= '<div id="letter-'.$l.'"><h4><strong>' . apply_filters( 'the_title', $letter ) . '</strong></h4><ul class="artists">';
      foreach( $tags as $tag ) {
        $name = apply_filters( 'the_title', $tag->name );
        $list .= '<li><a href="' . get_term_link( $tag ) . '" title="' . sprintf(__('Все записи из %s', 'yourtheme'), $tag->name) . '">' . $tag->name . ' <small>(' . $tag->count . ')</small></a></li>';
      }
      $list .= '</ul></div>';
	  // Задаем условие для последней буквы латинского алфавита, чтобы разделить блоки на кириллицу и латиницу
	  if ($letter=='Z') {
		  $index_line.='</ul></nav><nav><ul class="pagination pagination-sm">';
		  $list.='</div><div class="col-sm-6">';
	  }
    }
	$index_line.='</ul></nav>';
    $list .= '</div></div>';
  }
} else $list .= '<p>Очень жаль, но ничего не найдено</p>';
 
print ($index_line);
print ($list);
?>
Демо



Опубликовано 25.06.2019 в WEB, Wordpress

Оставить комментарий

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Back to Top