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

Вывод записей по алфавиту, сортировка по второму слову

Нужно вывести записи в формате: заглавная буква алфавита – под ней список записей.
Проблема в том, чтобы отсортировать записи по первой букве ВТОРОГО слова заголовка. С сортировкой по первой - проблем нет.

Сейчас такой код, с вашего же сайта и использованный:

'-1',
'category' => 0,
'orderby' => 'title',
'order' => 'ASC',
'include' => array(),
'exclude' => array(),
'meta_key' => '',
'meta_value' =>'',
'post_type' => 'nb',
'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
'nopaging' => true,
) );

foreach( $posts as $k => $post ){
// первая буква
$fl = get_first_letter( $post->post_title );
$link = get_the_permalink ();
$prev_fl = isset( $posts[ ($k-1) ] ) ? get_first_letter( $posts[ ($k-1) ]->post_title ) : '';
if( $prev_fl !== $fl )

echo "$fl";

// данные
echo "";
echo $post->post_title . '';
echo '';
0
Roman
2.6 лет назад
  • 1

    Наименее трудозатратный способ - при сохранении записи берёте заголовок записи, удаляете из него первое слово (набор символов до первого пробела + сам пробел) и сохраняете полученный результат в произвольное поле.

    Далее при создании запроса сортируете не по заголовку, а по вашему произвольному полю.

    В той части вашей функции, где получается первая буква строки, подставляете не заголовок, а значение произвольного поля.

    Момент, о котором нужно помнить - до добавления к записи произвольного поля, по которому производится сортировка, она будет проигнорирована и не попадет в результаты запроса. Т.е. нужно будет пройти по всему массиву записей и сохранить это произвольное поле.

    1. Хук для работы с глобальной переменной $_POST - save_post

    2. Строка без первого слова (один из многочисленных способов)
      list($first_word, $rest_of_string) = explode(" ", $_POST['post_title'], 1);
      здесь строка без первого слова находится в переменной $rest_of_string

    3. сортировка по мета-полю -
    'meta_key' => 'имя вашего произвольного поля',
    'orderby' => 'meta_value',
    'order' => 'ASC', // или DESC
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация