wordpress可以通过内置的meta_query来非常方便的执行一些文章数据的筛选以及排序操作;
具体方法不再描述,今天主要来聊一下我们在使用过程中遇到的坑:
当部分post_meta没有设置时,会获取不到对应的文章数据;
作数据筛选时的代码:
如果我们要不显示自定义栏目notshow等于yes的文章,默认情况下我们的代码如下:
1 2 3 4 5 6 7 8 9 |
$args['meta_query'] = array( array( 'key' => 'notshow', 'value' => 'yes', 'compare' => '!=', ), ); query_posts($args); |
这时候如果我们有文章没有设置notshow自定义字段的话,也应该显示出来,不过问题出现了,这样调用是不会显示未设置notshow字段的文章的,修改过的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'notshow', 'value' => 'yes', 'compare' => '!=', ), array( 'key' => 'notshow', 'compare' => 'NOT EXISTS', ) ); query_posts($args); |
这样的话,就能将未设置notshow字段的文章也显示出来;
当然还有个终极解决方法,文末会给出方法的,也是我们比较推荐的方法。
按自定义字段排序
如按views(文章阅读数)排序代码如下:
1 2 3 4 5 6 7 8 |
$args = array( 'meta_key' => 'views', 'orderby' => 'meta_value_num', 'order' => $order, ); query_posts($args); //如果有主循环可以: query_posts(array_merge($args, $wp_query->query)); |
如果有部分文章未设置有views这个自定义栏目键值的话,列表就调用不出来。
当然我们还可以自定义SQL 语句来进行查询,但是这个专业性太强了,小白可以略过;
最终我们建议采用的方法是,为所有的没有自定义栏目的文章批量新建这个字段,代码如下:
1 2 3 4 5 |
query_posts( 'showposts=100000' ); while (have_posts()) { the_post(); if(!get_post_meta( get_the_ID(), 'views', true )) update_post_meta(get_the_ID(),'views',0); } |
以上代码,放到主题index.php顶部,访问一次首页即可完成对所有文章的views字段进行创建;
最后一步:在发布文章的时候自动创建该自定义字段:
1 2 3 4 |
add_action( 'save_post', 'set_post_default_category', 10,1 ); function set_post_default_category( $post_id, $post, $update ) { if(!get_post_meta( $post_id, 'views', true )) update_post_meta($post_id,'views',0); } |
代码添加到主题根目录的functions.php内即可。
Google搜索进来的,谢谢分享。