WordPress按照文章自定义字段进行排序的内部调用方法

2016-10-11 17:32 来自:WordPress 评论(0) 查看(1,089)

WordPress虽然是一款博客程序,但实际上有很多企业网站依然使用它,其中包括很多著名的大型公司官网都是基于WordPress创建的。而事实上,除了博客和企业官网,它还可以通过二次开发,开发成购物商城、资讯门户等逻辑更为复杂的web应用。当然有人会说在不经过深度优化前提下,WordPress的性能是一个问题,但我想说的是,对于绝大多数企业官网也好,还是其他应用也好,它的性能问题不是问题,因为你的运营如果能遇到真正的性能问题,说明你的运营已经非常成功了(当然指的是中小网站)。

因为二次开发,因此我们时长会碰到各种各样的需求,比如说一个个人博客,他需要对他的博客文章按照浏览数进行排序;再或者,一个基于WordPress开发的购物网站,需要对商品按照评分来排序(商品采用posts表改造,只是post_type的值另外指定的,这个功能需要另外开发,这里先不说)。

简单地来说,这样的需求都可以总结为:按照文章自定义字段进行排序。

诚然,这是再简单不过的东西了,无非就是select的了,一句sql就能搞定,而且WordPress有内置的数据库操作方法(如$wpdb对象)。但如果熟悉这个程序的都知道,实际上它的数据结构的范式是比较低的,三大主要内容post、comment以及users实际上一共有6张表,各自分别有一个主表和一个存储meta信息的数据表。

实际上这个问题,在一般情况下(是指没有特殊应用需求场景下),根本不需要自己自己重新用$wpdb对象来对数据库进行操作。而使用非常强大也非常常用的query_posts()方法即可,这个方法的说明在国内网站上比比皆是,但我觉得大部分都没讲透彻,比如现在说的这个需求很多文章就没讲。

在国内很多文章中,也写到了query_posts()参数中有orderby和order,但其中orderby主要还是介绍按照指定的某几个字段(主要是posts主表中的字段)进行排序的。而关于自定义字段的排序很多都没有讲到,实际上是可以按照自定义字段排序的。

下面来举一个例子,按照文章阅读数调取阅读最多的10篇文章,当然阅读数WordPress默认情况下也是没有的,需要另外开发相应功能,开发过程网上一大把,自己写也很简单。实际上query_posts()的orderby的值是支持自定义字段的,如果给上meta_value_num即可,当然同时要定义meta_key这个参数,比如在开发阅读数的时候meta_key的值是views,那么以上需求的核心代码就是如下了:

$args=array(
     'meta_key' => 'views',
     'orderby' => 'meta_value_num',
     'posts_per_page'=>10,
     'order' => 'DESC'
);
query_posts($args);  while (have_posts()) : the_post();
//输出代码段,如带上HTML代码
endwhile;wp_reset_query();

当然最好的理解就是直接看官方文档,文档地址为:

https://developer.wordpress.org/reference/functions/query_posts/

最后还有更好准确的就是去阅读源代码吧,源码位于wp-includes/query.php中。

转载请注明出处:WordPress按照文章自定义字段进行排序的内部调用方法 - 木泉网
分享:

发表评论

请登录

未登录

返回顶部