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

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

HIT

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

Описанное решение данной задачи нашел на сайте 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)

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Атрибуты товара WC

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

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

/
Список меток текущей категории

Список меток текущей категории

Формируем и выводим список меток текущей категории. Вариант в файл funсtion.php function get_category_tags($cats) { global $wpdb; $tags = $wpdb->get_results (" SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, t2.count as Читать далее »

/
Расширение функционала WP

Расширение функционала WP

Разгрузка functions.php Для разгрузки основного файла functions.php нужно в папке темы создать папку (например inc) и в нее помещать файлы функций (желательно по назначению: хлебные крошки, шорткоды, редактирование, связанные с Читать далее »

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

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

  1. alex

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

    1. Alexandr

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

    2. Alexandr

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

      1. alex

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

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