WordPress как на ладони
wordpress jino

Красивый алфавитный указатель для 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 1.5 года назад
  • 1
    campusboy1951 cайт: www.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 1.5 года назад

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

    campusboy 1.5 года назад

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

    Надежда 3 месяца назад

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

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

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

    Евген 2 месяца назад

    подскажите, а как вывести только на букву "А" ? спс

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