Вывести записи по алфавиту, 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();
?>
→ Ссылка