0

我正在为基于 WordPress 的客户创建一个网站。我的客户希望在主页中显示按类别分组的文章。

例如,假设我们有类别“Cat A”、“Cat B”和“Cat C”。我的客户希望在主页中以“Cat B”、“Cat A”和“Car C”的方式显示类别顺序,然后在主页中列出每个类别的 6 个帖子。

假设这是我要显示的结果:

Cat B
---------------------------
Cat B - Article #1
Cat B - Article #2
Cat B - Article #3
Cat B - Article #4
Cat B - Article #5
Cat B - Article #6

Cat A
---------------------------
Cat A - Article #1
Cat A - Article #2
Cat A - Article #3
Cat A - Article #4
Cat A - Article #5
Cat A - Article #6

Cat C
---------------------------
Cat C - Article #1
Cat C - Article #2
Cat C - Article #3
Cat C - Article #4
Cat C - Article #5
Cat C - Article #6

我正在寻找的是一种排序要在主页中显示的类别的方法。

现在我已经在我的 WordPress 仪表板中创建了一个页面,从那里我可以根据需要对我的类别进行排序,然后我可以将订单选项保存在 wp 选项页面中。问题是,如何根据后端的顺序对前端的类别进行排序。

假设类别如下:

Categories
-----------------
Name   |  ID
-----------------
Cat A  |  100
Cat B  |  101
Cat C  |  102

在我的 wp_options 表中,我可以存储以下数组:

array(
    1 => 101,
    2 => 100,
    3 => 102
)

数组键可以是订单序列,值可以是类别 ID。

现在,通过知道序列是什么,我如何使用单个 MySQL Query 获得结果?

4

1 回答 1

2

分类(例如类别或标签)中的每个项目(例如类别或标签)都有一个名称、一个 slug(可以进入 URL 的短名称)和一个描述。

如果您愿意将描述专门用于订购您的类别项目,您可以在该字段中为 Cat B 输入 1,为 Cat A 输入 2,为 Cat C 输入 3。您可以从仪表板执行此操作。

然后,当您检索术语时,您可以使用此查询以适当的顺序获取类别 ID。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY tt.description, t.term_id

但这会占用您的描述字段,或者至少将一些内部垃圾放入由少数(但不是很多)主题用于显示目的的字段中。

您也可以将 slug 用于此订购目的。例如,您可以指定 '1catb' 来代替 'catb' (对于其他 slug 使用 '2cata' 和 '3catc')。同样,它会对您的显示产生一些影响,这一次是以您网站中某些 URL 的形式出现的。这是您在这种情况下可能使用的查询/

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY t.slug, t.term_id

在我看来,将单个 wp_options 行转换为可连接表太麻烦了,不值得麻烦,尤其是对于经常显示的网站前门页面。但是您可以为此使用多个 wp_options 行。像这样给你的 wp_options 名称和值:

   option_name       option_value
   mycat_order_001       2
   mycat_order_002       1 
   mycat_order_003       3

然后使用这样的查询来按顺序获取您的类别名称。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
  JOIN wp_options o ON (    o.option_name LIKE 'mycat_order_%'
                        AND o.option_value = t.term_id)
 WHERE tt.taxonomy = 'category'
 ORDER BY o.option_name, t.term_id

这将以正确的顺序提取您的条款。这里的成本是当您的用户指定所需顺序时更新 wp_options 表的更复杂的代码位。

所以有一些替代方案。请记住,简单就是好的。

于 2013-02-27T18:57:04.567 回答