在WordPress中通过自定义字段来控制排序
通过ACF做了一个item_order作为排序值控制页面输出的顺序,如果这个值没有设置的时候,post可以正常输出,按默认时间排到后面,有排序值的就按排序值处理。
需求说明
1、通过ACF新增了字段item_order 作为排序值输入;
2、当有设置了排序值,则按排序值输出;
3、如果没设置排序值,则按默认时间输出:
4、优先输出有排序值的Post,没有的这靠后站。
<?php
$current_category = get_queried_object(); // 获取当前分类对象
$category_name = $current_category->name; // 获取当前分类名称
$args = array(
'post_type' => array('product', 'service'),
'category_name' => $current_category->slug, // 当前分类的别名
'posts_per_page' => -1, // 每页显示所有文章
'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'item_order',
'compare' => 'EXISTS' // 找到有item_order的文章
),
array(
'key' => 'item_order',
'compare' => 'NOT EXISTS' // 找到没有item_order的文章
)
),
'orderby' => array(
'meta_value_num' => 'ASC', // 按照item_order值从小到大排序
'date' => 'DESC' // 如果没有item_order,则按时间排序
),
);
$tit_query = new WP_Query($args);
?>
代码说明:
meta_query
部分:EXISTS
用于筛选有item_order
的文章。NOT EXISTS
用于处理没有设置item_order
的文章。
orderby
部分:meta_value_num
确保按item_order
的数值排序。- 当没有
item_order
时,使用date
进行默认的时间排序。
这样,没有设置 item_order
的文章将会排在有 item_order
的文章之后,并按时间排序。