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