eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Красивый алфавитный указатель для WordPress

Как сделать алфавитный указатель такого вида:

Рубрика 1
	А
		Абрикос
		Ананас
	Б
		Баклажан
		Банан

Рубрика 2
	А
		Абракадабра
	Б
		Бизябра
		Бутерат
...

Чтобы еще название было ссылкой на запись.

что-то вроде этого

Пробовал такое, но кириллицу не распознает

 <?php 
$args=array( 
  'orderby' => 'title', 
  'order' => 'ASC', 
  'posts_per_page'=>-1, 
  'caller_get_posts'=>1 
); // задаем условия выборки постов 
$my_query = new WP_Query($args); 
if( $my_query->have_posts() ) { 
  echo 'По алфавиту всего ' . count($my_query->posts) . ' записи'; 
  while ($my_query->have_posts()) : $my_query->the_post(); 
	$this_char = mb_strtoupper(substr($post->post_title,0,1), 'utf-8'); 
	if ($this_char != $last_char) { 
	  $last_char = $this_char; 
	  echo '<h2>'.$last_char.'</h2>'; // первая буква записи 
	} ?> 
	<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> 
	<?php 
  endwhile; 
} 
wp_reset_query(); 
?>

Ваше решение распознает кириллицу

$posts = get_posts('orderby=title&posts_per_page=10');

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 $fl . '<br>';

	// данные
	echo $post->post_title . '<br>';
}

wp_reset_postdata();

function get_first_letter( $str ){
	return mb_substr($str, 0, 1, 'utf-8');
}

остается только выводить по категориям и ссылки на запись поставить

0
ephiop
9 лет назад
  • 1
    campusboy 5000 youtube.com/c/wpplus

    Вот как=то так вышло:

    // Получаем все рубрики сайта
    $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 );
    }
    
    // Функция для получения отсортированных по алфавиту записей из указанной рубрики, где $cat - ID рубрики
    function get_abc_posts ( $cat = null ) {
      $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();
    }
    
    // Функция возвращает первую букву переданного в неё слова
    function get_first_letter( $str ){
     return mb_substr($str, 0, 1, 'utf-8');
    }
    ephiop 9 лет назад

    большое спасибо.

    campusboy 9 лет назад

    И Вам спасибо за интересный вопрос!

    Надежда 7.7 лет назад

    Здравствуйте, подскажите, куда нужно вставлять этот код?

    campusboy 7.7 лет назад

    Здравствуйте. Туда, где Вы хотите выводить эту информацию.

    branky 6.8 лет назад

    Предлагаю ещё один вариант алфавитной навигации по первой букве поста. Метод работает и с Кириллицей и с произвольными типами записей: Алфавитный указатель WordPress

    cur_s 3 месяца назад

    Только начал изучать wordpress с кодом, пока тяжко. Щас установил плагин abc pagination на первое время, там все так просто, а я пока дальше изучаю php. Спасибо автору за статью, буду разбирать на детали и изучать ?

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация