/ Сайтостроение / Адаптивность / Разделение записей по алфавиту

Разделение записей по алфавиту

Реализуем сортировку и разделение записей по алфавиту. Данный функционал может пригодится для вывода и разделения по алфавиту категорий. Можно разделять города в разделе Где купить и т.д.

Описанное решение данной задачи нашел на сайте wp-kama.ru, за что ему большое спасибо!

Вывод категорий с записями по алфавиту

Вставлять там, где необходимо выводить рублики.

<?php
// Получаем все рубрики сайта
$all_cat = get_categories( array( 'orderby' => 'name', 'order' => 'ASC' ) );
// Выводим каждую рубрику + алфавитный список со статьями к ней относящиеся
foreach ( $all_cat as $item_cat ) {
// Выводим название рубрики в виде ссылки на неё
printf ( '<h2><a href="%s">%s</a></h2>' , get_category_link( $item_cat->term_id ), $item_cat->cat_name );
// Выводим отсортированные по алфавиту записи с этой рубрики
get_abc_posts ( $item_cat->term_id );
}
?>
<?php
// Функция для получения отсортированных по алфавиту записей из указанной рубрики, где $cat - ID рубрики
function get_abc_posts ( $cat = 11 ) {
$posts = get_posts( array ( 'category' => $cat, 'order' => 'ASC', 'orderby' => 'title', 'posts_per_page' => -1 ) );
foreach( $posts as $k => $post ){
// первая буква
$fl = get_first_letter( $post->post_title );
$prev_fl = isset( $posts[ ($k-1) ] ) ? get_first_letter( $posts[ ($k-1) ]->post_title ) : '';
if( $prev_fl !== $fl )
// Буква
echo '<h3>'.$fl.'</h3>';
// Выводим название записи в виде ссылки на неё
printf ( '<a href="%s">%s</a><br>' , get_the_permalink($post->ID), $post->post_title );
}
wp_reset_postdata();
}
?>
<?php
// Функция возвращает первую букву переданного в неё слова
function get_first_letter( $str ){
return mb_substr($str, 0, 1, 'utf-8');
}
?>

Произвольный тип записей по алфавиту

Данный код рассчитан на шаблон архива записей пользовательского типа.
city — это slug записи произвольного типа

<?php

$posts = get_posts( array ( 'post_type' => 'city', 'order' => 'ASC', 'orderby' => 'title', 'posts_per_page' => -1 ) );
foreach( $posts as $k => $post ){

echo '<div class="city-letter">';

// первая буква
$fl = get_first_letter( $post->post_title );
$prev_fl = isset( $posts[ ($k-1) ] ) ? get_first_letter( $posts[ ($k-1) ]->post_title ) : '';
if( $prev_fl !== $fl )


// Буква
echo '<h3>'.$fl.'</h3>';

// Выводим название записи в виде ссылки на неё
printf ( '<a href="%s">%s</a><br>' , get_the_permalink($post->ID), $post->post_title );

echo '</div>';
}
wp_reset_postdata();

?>

<?php
// Функция возвращает первую букву переданного в неё слова
function get_first_letter( $str ){
return mb_substr($str, 0, 1, 'utf-8');
}
?>

Верстка каждой буквы

В вышеописанном примере не совсем корректно будут верстаться блоки с записями буквы. Чтоб сделать каждый блок в отдельном div нужно применить небольшую хитрость:

<?php

$posts = get_posts( array ( 'post_type' => 'city', 'order' => 'ASC', 'orderby' => 'title', 'posts_per_page' => -1 ) );

echo '<div class="city-letter">';

foreach( $posts as $k => $post ){

// первая буква
$fl = get_first_letter( $post->post_title );
$prev_fl = isset( $posts[ ($k-1) ] ) ? get_first_letter( $posts[ ($k-1) ]->post_title ) : '';

if( $prev_fl !== $fl )

// Буква
echo '</div><div class="city-letter"><h3>'.$fl.'</h3>';

// Выводим название записи в виде ссылки на неё
printf ( '<a href="%s">%s</a><br>' , get_the_permalink($post->ID), $post->post_title );

}

echo '</div>';
wp_reset_postdata();

?>

Мы заранее (до цикла) открываем div и при нахождении первой буквы закрываем его и сразу создаем новый. После того как заканчиваются буквы закрываем последний div. Единственным недостатком данного метода является наличие первого пустого div, но это легко исправляется display: none;

Стили:

.city-letter:first-child {
    display: none;
}
.city-letter {
    float: left;
    width: 20%;
    height: 100px;
}

Про удобное разделение блоков с .city-letter описано здесь (пункт 8)

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Шорткоды WP

Шорткоды WP

Создание шорткода Шорткоды очень удобная функция WP. Одним из важнейших преимуществ является то, что если по каким-либо причинам сама функция не работает или отсутствует — ошибки не произойдет. Шорткод перестанет Читать далее »

Атрибуты товара WC

Атрибуты товара WC

В интернет-магазине Woocommerce есть функционал атрибутов. Атрибуты товара — это дополнительные поля для различных значений. Атрибуты бывают 2-х типов: текстовый (text) и с выбором значения (select). Архив значения атрибута Для Читать далее »

/
Фильтр по меткам (изменение основного запроса)

Фильтр по меткам (изменение основного запроса)

Реализуем фильтрацию записей по меткам путем изменения основного запроса на лету (ajax). Находим все теги записей входящих в категорию Данный код можно вставить в боковую колонку в виде виджета. <?php Читать далее »

/ /

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

4 комментария

  1. alex

    Вечер добрый. А как при сортировке ‘order’ => ‘ASC’ сделать так, чтобы цифры и всякие символы в духе , . и тд, выводились в последнюю очередь.
    То есть а б …. я 1 2 … 1000

    1. Alexandr
      Alexandr

      Так глубоко с этим вопросом не сталкивался. Тема для размышления интересная.

    2. Alexandr
      Alexandr

      Вот здесь эта тема обсуждалась. Если найду решение — поделюсь.

      1. alex

        Спасибо, за наводку, если сама допилю, поделюсь. Ну и новостей от Вас то же буду ждать =)

Разделение записей по алфавиту
Рекомендации по созданию лэндинга
Рекомендации для васРекомендации по созданию лэндингаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.