Wordpress - 根据自定义字段的值和字母顺序对帖子进行排序

时间:2011-08-31 10:59:23

标签: wordpress select custom-fields

我的客户有一个列出不同航行服务的网站。这些服务具有不同级别的订阅:

  • 高级
  • 完整

在后端,我使用高级自定义字段设置了一些自定义字段(与普通WP自定义字段完美配合)。该服务的自定义字段称为“subscription_level”,它是一个带有上述选项的下拉列表。

我想要实现的是按照订阅级别的顺序显示帖子,并按字母顺序显示。首先,您将按标题排序所有“完整”服务,然后是“高级”,然后是“免费”服务。

像:

---- Full ---

全程服务A

全面服务B

全面服务C

---- Premium ---

高级服务A

高级服务B

高级服务C

----自由---

免费服务A

免费服务B

免费服务C

理想情况下,这也应该有分页,但如果这不可能,那就不是世界末日。

我通过查看Codex指令尝试了几个自定义选择查询,没有运气。我的问题是我需要两种“orderby”方式?一个根据我的自定义字段“subscription_level”的meta_value划分帖子,同时根据标题命令每个级别的订阅......我似乎无法找到实现此目的的方法。 / p>

任何指向我正确方向的想法都会很棒!

提前致谢

1 个答案:

答案 0 :(得分:0)

希望我理解这个问题:

  • 你有一个post_type“服务”(或者这实际上是你的标准帖子)
  • 这些服务中的每一项都具有存储在自定义字段中的“免费”,“高级”或“完整”等订阅级别

所以要做的第一件事就是将帖子分类到这些级别。

之后,在这些级别内,帖子应根据其标题(或其他)进行排序。

我不确定使用一个自定义SQL查询来实现这一点是否容易。它假设它会是这样的:

SELECT * FROM wp_posts,wp_postmeta.meta_value INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE wp_posts.post_status='publish' AND wp_postmeta.meta_key = "service" ORDER BY wp_postmeta.meta_value, wp_posts.post_title, ASC

但如果这变得复杂,你可以选择另一种方式来实现这个目标。收集所有“全服务”帖子的ID,所有“高级服务”帖子的ID以及所有“免费服务”帖子的ID,例如。

SELECT wp_posts.post_ID FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE wp_postmeta.meta_key = "service" and wp_postmeta.meta_value="premium"

(为每种服务都这样做)

然后使用'posts_in'数组或其他自定义SQL查询运行WP_QUERY,您可以按标题或新值对所收集的帖子进行排序。

根据您要使用的分页类型,有一篇博文介绍如何以简单的方式集成自定义分页:

http://www.blackbam.at/blackbams-blog/2011/07/18/implementing-a-simple-and-flexible-paging-algorithm-using-php/

希望这有帮助。