显示所有以给定字母开头的帖子?


12

我正在尝试建立基于Wordpress的字典,基本上它将有26页(每个字母一页):

ABC ... XYZ

并且每个页面将显示所有以给定字母开头的帖子,因此在打开“ A”页面后,它应显示如下内容:

大吃一惊

算盘

鲍鱼

(...)天蓝色

我最初是在考虑自定义帖子类型,但是创建和维护26种自定义帖子类型听起来太过分了。

这样排序帖子的最有效方法是什么?数据库查询,用PHP拆分循环?我的目标是发布1000篇帖子(是的,必须是Wordpress :))。

Answers:


10

不要使用帖子类型,请使用分类术语!

保存时,使用帖子标题的第一个字母,按AZ分类法设置对象术语。确保强制使用大写或小写以保持一致性。确保为字母表中的每个字母创建术语,并为数字和其他非字母数字符号创建术语。

这应该比查询每个帖子标题的首字母更快,并且它为您提供了一种分类法,您可以使用它来做更多的事情,例如标签云或术语列表工具。这也是确定哪些字母具有关联帖子以及多少帖子的更快方法,而无需强制数据库手动计数,并且您可以立即使用标准WordPress术语API进行更复杂的查询,例如以元音开头的帖子


这绝对是理想的选择。但是,请记住,有成千上万的帖子;这可能是一个繁琐的任务。您首先需要查询所有以字母的每个字母开头的帖子,并使用正确的分类术语(与相应字母的字母匹配)更新每个帖子。否则,手动更新每个帖子将需要几个世纪才能完成。
Michael Ecklund

是的,这是一个巨大的缺点,这些帖子将由完全无知的人添加,在创建新帖子时设置正确的分类法时,我不能指望他们。我不确定每次有人编辑/创建内容时查询所有帖子并更新它们是否会有效?
Wordpressor

3
不,那根本不是问题,隐藏UI并自动执行该过程。在保存和更新帖子挂钩上执行它,手动执行将非常昂贵
Tom J Nowell

汤姆·J·诺维尔(Tom J Nowell),它的工作原理像个韵味,但是我有一个严重的问题,我不确定如何处理这个问题-有些单词将以诸如en.wikipedia.org/wiki/Ą之类的字母开头-我是无法为此设置条件。以下是一些代码和说明:pastebin.com/cHxbjVFH,为什么会发生这种情况?我正在使用专用于该语言的WP pack。
Wordpressor 2012年

您是否在谈论口音和变音符号等?如果是这样,那么这本身就值得一个全新的问题,而不是一个琐碎的问题。很可能这也是一个普遍的PHP问题,因此Stack Overflow将是最好的问题
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>

你能解释一下它是如何工作的吗?它不会返回任何包含该字母的帖子吗?
Tintinabulator Zea

不会的。mysql使用%作为通配符。但是我从未在MySQL查询中遇到过$。正确,它应该显示为WHERE post_title LIKE 'request%'
brett

1

在此处查看此文章:按标题的query_post?

或者,您可以使用PODS 2框架创建保存前的帮助程序,并将帖子标题的首字母保存在某个字段中,并使用简单的WHERE条件。

或者使用所有字母创建一个下拉列表(另一个窗格/内容类型),并与您现有的帖子内容类型建立关系(在窗格2中是可能的),就是这样。因此,在保存词典术语之前,请从下拉框中选择要分配给该术语的字母。

在Pods 2中,您可以将多余的字段添加到现有的帖子内容类型中。这个插件/框架在Drupal世界中就像CCK + Views一样,真的很棒。

Pods 2是非常有用的插件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.