Вывести записи по алфавиту, wordpress и order by
Есть такой код для Wordpress, чтобы сортировать записи:
<?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() ) {
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() ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
wp_reset_query();
?>
В итоге получается так:
То есть, будет сортироваться и выводиться по первому слову. Как сделать, чтобы сортировка была по второму? Вот так:
Подскажите пожалуйста.
Ответы (1 шт):
Автор решения: alenkins
→ Ссылка
Сортировка у вас правильная. Если вам нужно получать первую букву второго слова, нужно просто получить из заголовка второе слово (например, с помощью функции preg_split()) и далее продолжить выполнение вашего алгоритма.
Как-то так:
<?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()) {
while ($my_query->have_posts()) : $my_query->the_post();
$words = preg_split("/[\s,:]+/", trim($post->post_title)); // разобьём заголовок на слова, используюя в качестве разделителей пробел, двоеточие, запятую. Добавьте что-то ещё, что может оказаться в заголовке
if (count($words) > 1) {
$this_char = mb_strtoupper(substr($words[1],0,1), 'UTF-8'); // получим первую букву второго слова (используйте mb_substr вместо substr, если используете многобайтовую кодировку)
} else {
// обработайте ситуацию когда заголовок состоит из одного слова
}
if ($this_char != $last_char) {
$last_char = $this_char;
echo '<h2>'.$last_char.'</h2>'; // первая буква записи
} ?>
<p><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
wp_reset_query();
?>

