WordPress自定义分类法按两个自定义字段排序问题求助
解决WordPress按两个自定义字段排序的问题
要实现按book_chapter和book_page两个数字型自定义字段排序,你之前的写法存在两个核心问题:仅指定了单个meta_key,且orderby数组的使用方式不符合WordPress的查询规则,导致页面崩溃。以下是正确的实现方案:
正确代码示例
$book_args = array( 'post_type' => 'portfolio', 'portfolio-category' => 'book', 'post_status' => 'publish', 'posts_per_page' => 120, 'paged' => $paged, 'meta_query' => array( 'relation' => 'AND', // 仅显示同时包含两个字段的文章,按需改为OR 'chapter_clause' => array( 'key' => 'book_chapter', 'type' => 'NUMERIC', // 明确为数字类型,确保数值排序 'exists' => true // 确保文章存在该字段 ), 'page_clause' => array( 'key' => 'book_page', 'type' => 'NUMERIC', 'exists' => true ) ), 'orderby' => array( 'chapter_clause' => 'ASC', // 先按章节升序 'page_clause' => 'ASC' // 章节相同时按页码升序 ) );
关键说明
- 使用
meta_query定义多字段:通过meta_query同时声明两个自定义字段,并为每个字段设置别名(chapter_clause、page_clause),这样WordPress能正确识别需要排序的字段。 - 指定字段类型:设置
type => 'NUMERIC'避免字符串排序问题(比如数字10会被当成字符串排在2前面)。 orderby关联别名:直接使用meta_query中定义的别名作为orderby数组的键,指定排序方向,确保排序逻辑生效。- 修复语法错误:你之前的
'order' => ASC缺少引号,正确写法是'order' => 'ASC',不过在多字段排序时,我们直接在orderby数组里指定每个字段的方向,无需全局order参数。
额外注意事项
- 如果部分文章可能缺少其中一个字段,可将
relation改为OR,或去掉exists => true(但可能导致排序结果不符合预期)。 - 确保自定义字段
book_chapter和book_page存储的是纯数字值,若为字符串格式的数字,NUMERIC类型也能正确转换排序。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

