Показать все сообщения, начинающиеся с данной буквы?

12

Я пытаюсь построить словарь на основе Wordpress, в основном он будет иметь 26 страниц (по одной на каждую букву):

ABC ... XYZ

И на каждой странице будут отображаться все сообщения, начинающиеся с данной буквы, поэтому после открытия страницы «А» должно отображаться что-то вроде:

сзади

счеты

морское ушко

(...) лазурный

Сначала я думал о пользовательских типах постов, но создание и поддержка 26 пользовательских типов постов звучит как излишнее.

Какой способ сортировки сообщений будет наиболее эффективным? Запрос к базе данных, расщепление цикла с помощью PHP? Я стремлюсь к тысячам постов (да, это должен быть Wordpress :)).

Wordpressor
источник

Ответы:

10

Не используйте типы сообщений, используйте термины таксономии!

При сохранении установите термины объекта в таксономии AZ, используя первую букву заголовка сообщения. Убедитесь, что прописные или строчные буквы приведены в соответствие. Убедитесь, что вы создали термины для каждой буквы алфавита, а также термин для цифр и других буквенно-цифровых символов.

Это должно быть быстрее, чем запрашивать первую букву каждого заголовка сообщения, и дает вам таксономию, с которой вы можете делать больше вещей, например, с облаками тегов или виджетами списков терминов! Это также намного более быстрый способ определения того, с какими буквами связаны записи и сколько, без принудительного подсчета базы данных вручную, и вы можете использовать стандартные терминальные API-интерфейсы WordPress из коробки для выполнения более сложных запросов, таких как записи, начинающиеся с гласных

Том Дж Новелл
источник
Это определенно идеальный маршрут. Однако имейте в виду, с тысячами постов; Это может быть довольно громоздкой задачей. Сначала вам нужно будет выполнить запрос ко всем сообщениям, начинающимся с каждой буквы алфавита, и обновить каждое сообщение соответствующим термином таксономии, соответствующим соответствующей букве алфавита. В противном случае ручное обновление каждого отдельного сообщения заняло бы столетия .
Майкл Эклунд
Да, это ОГРОМНЫЙ недостаток, эти посты будут добавлены ПОЛНОСТЬЮ невежественными людьми, и я не могу рассчитывать на них, когда дело доходит до установки правильной таксономии при создании нового поста. Я не уверен, будет ли эффективен запрос всех сообщений и их обновление каждый раз, когда кто-то редактирует / создает что-то?
Wordpressor
3
Нет, это не было бы проблемой вообще, скрывайте пользовательский интерфейс и автоматизируйте процесс. Делайте это на хуках сохранения и обновления сообщений, делать это вручную было бы нелепо дорого
Том Дж. Новелл
Tom J Nowell, это работает как шарм, но у меня есть одна серьезная проблема, и я не уверен, как справиться с этим - некоторые слова начнутся с таких букв, как en.wikipedia.org/wiki/Ą - я не в состоянии установить условия для них. Вот некоторый код и объяснение: pastebin.com/cHxbjVFH , почему это происходит? Я использую WP-пакет, предназначенный для этого языка.
WordPress
Вы говорите об акцентах и ​​умлаутах и ​​т. д.? Если это так, то это то, что само по себе заслуживает совершенно нового вопроса, и это не тривиальный вопрос. Вероятно, это также общий вопрос PHP, поэтому наилучшим местом для этого будет переполнение стека
Tom J Nowell
4

Если вы не хотите использовать предпочтительный метод таксономических терминов, сделайте следующее:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // could be any letter you want
         $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>
                    ... loop stuff here (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No clubs found for that letter. Please try again, or use the search at the top.</div>
            <?php
         }
         ?>
    </ul>
21zna9
источник
Вы можете объяснить, как это работает? не вернет ли это сообщение, содержащее письмо?
Tintinabulator Zea
это не будет mysql использует% в качестве подстановочного знака. Однако я никогда не сталкивался с $ в запросах MySQL. правильно это должно читатьсяWHERE post_title LIKE 'request%'
Бретт
1

Проверьте эту статью здесь: query_post по названию?

Или вы можете создать предварительно сохраненный помощник с помощью инфраструктуры PODS 2 и сохранить первую букву заголовка сообщения в некотором поле и использовать простое условие WHERE.

Или создайте выпадающий список (другой тип pod / content) со всеми буквами и создайте отношение к существующему типу содержимого сообщений (в pods 2 это возможно) и все. Итак, перед сохранением словарного термина вы выбираете из выпадающего списка букву, которую хотите присвоить этому термину.

В Pods 2 вы можете добавить дополнительное поле к существующему типу контента сообщений. Этот плагин / фреймворк, похожий на CCK + Views в мире Drupal, действительно потрясающий.

Pods 2 очень полезный плагин.

Derfder
источник