Отображение всех записей, начинающихся с заданной буквы?
Я пытаюсь создать словарь на основе WordPress, по сути он будет содержать 26 страниц (по одной на каждую букву):
А Б В ... Э Ю Я
И каждая страница должна отображать все записи, начинающиеся с заданной буквы. Например, при открытии страницы "А" должно отображаться что-то вроде:
абажур
абордаж
абрикос
(...) яшма
Сначала я думал о пользовательских типах записей, но создание и поддержка 26 типов кажется избыточным.
Какой будет наиболее эффективный способ сортировки записей таким образом? Запрос к базе данных, разделение цикла с помощью PHP? Я планирую работать с тысячами записей (да, это должно быть именно WordPress :)).

Не используйте типы записей, используйте таксономии и термины!
При сохранении устанавливайте термины объекта в таксономии A-Z, используя первую букву заголовка записи. Обязательно приводите буквы к верхнему или нижнему регистру для единообразия. Убедитесь, что созданы термины для каждой буквы алфавита, а также отдельный термин для цифр и других неалфавитных символов.
Это будет быстрее, чем запрашивать первую букву каждого заголовка записи, и даст вам таксономию, с которой можно делать больше вещей, например облака тегов или виджеты списка терминов! Это также гораздо более быстрый способ определения того, какие буквы имеют связанные записи и сколько их, без принудительного подсчета в базе данных, и вы можете использовать стандартные WordPress API терминов "из коробки" для выполнения более сложных запросов, например записей, начинающихся с гласных

Это определенно идеальный путь. Однако учтите, что при наличии тысяч постов эта задача может оказаться довольно громоздкой. Вам потребуется сначала запросить все посты, начинающиеся с каждой буквы алфавита, и обновить каждый пост, добавив соответствующий таксономический термин, соответствующий букве алфавита. В противном случае, ручное обновление каждого отдельного поста займет века.

Да, это ОГРОМНЫЙ недостаток — эти посты будут добавлять СОВЕРШЕННО несведущие люди, и я не могу рассчитывать на них в плане правильного указания таксономии при создании нового поста. Не уверен, будет ли эффективным запрашивать все посты и обновлять их каждый раз, когда кто-то редактирует/создает что-то?

Нет, это вообще не проблема — скройте интерфейс и автоматизируйте процесс. Делайте это на хуках сохранения и обновления поста, делать это вручную было бы абсурдно затратно.

Tom J Nowell, всё работает отлично, но у меня есть одна серьёзная проблема, и я не уверен, как с ней справиться - некоторые слова начинаются с букв типа http://en.wikipedia.org/wiki/Ą - я не могу задать термины для таких слов. Вот код и объяснение: http://pastebin.com/cHxbjVFH , почему так происходит? Я использую WP пакет, предназначенный для этого языка.

ты говоришь про акценты, умлауты и тому подобное? Если да, то это тема для отдельного вопроса, и вопрос совсем не тривиальный. Скорее всего, это также общий вопрос по PHP, так что Stack Overflow будет лучшим местом, чтобы задать его

Спасибо, друг, я разобрался, оказывается, когда вы используете substr(), эти символы ведут себя как 2, а не 1 символ :) Спасибо!

А, это многобайтовые кодировки! Для работы с ними в PHP существуют соответствующие функции с префиксом mb

Если вы не хотите использовать предпочтительный метод таксономических терминов, сделайте следующее:
<ul class="posts">
<?php
global $wpdb;
$request = "a" // можно указать любую нужную букву
$results = $wpdb->get_results(
"
SELECT * FROM $wpdb->posts
WHERE post_title LIKE '$request%'
AND post_type = 'post'
AND post_status = 'publish';
"
);
if ( $results )
{
foreach ( $results as $post )
{
setup_postdata ( $post );
?>
<li>
... здесь цикл (the_title, the_permalink) ...
</li>
<?php
}
}
else
{
?>
<div class="alert">Не найдено клубов на эту букву. Пожалуйста, попробуйте другую или воспользуйтесь поиском вверху.</div>
<?php
}
?>
</ul>

можешь объяснить, как это работает? разве это не будет возвращать любую запись, содержащую эту букву?

Ознакомьтесь с этой статьей: query_post по заголовку?
Или вы можете создать вспомогательную функцию предварительного сохранения, используя фреймворк PODS 2, и сохранить первую букву заголовка записи в отдельном поле, а затем использовать простое условие WHERE.
Либо создать выпадающий список (другой pod/тип контента) со всеми буквами и установить связь с вашим существующим типом записей (в pods 2 это возможно). Таким образом, перед сохранением термина словаря вы выбираете из выпадающего списка букву, которую хотите назначить этому термину.
В Pods 2 вы можете добавить дополнительное поле к существующему типу записей. Этот плагин/фреймворк, который чем-то напоминает CCK + Views в мире Drupal, действительно потрясающий.
Pods 2 — очень полезный плагин.
