Вывод записей по алфавиту, сортировка по второму слову
Нужно вывести записи в формате: заглавная буква алфавита – под ней список записей.
Проблема в том, чтобы отсортировать записи по первой букве ВТОРОГО слова заголовка. С сортировкой по первой - проблем нет.
Сейчас такой код, с вашего же сайта и использованный:
'-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 '';
Наименее трудозатратный способ - при сохранении записи берёте заголовок записи, удаляете из него первое слово (набор символов до первого пробела + сам пробел) и сохраняете полученный результат в произвольное поле.
Далее при создании запроса сортируете не по заголовку, а по вашему произвольному полю.
В той части вашей функции, где получается первая буква строки, подставляете не заголовок, а значение произвольного поля.
Момент, о котором нужно помнить - до добавления к записи произвольного поля, по которому производится сортировка, она будет проигнорирована и не попадет в результаты запроса. Т.е. нужно будет пройти по всему массиву записей и сохранить это произвольное поле.
Хук для работы с глобальной переменной $_POST - save_post
Строка без первого слова (один из многочисленных способов)
list($first_word, $rest_of_string) = explode(" ", $_POST['post_title'], 1);
здесь строка без первого слова находится в переменной $rest_of_string