You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中如何实现WP_Query结果按父页面标题字母排序

WordPress 按父页面标题排序查询结果

WP_Query原生不支持直接通过查询参数按关联父页面的字段排序,无需改写SQL联表逻辑,拿到结果集后做PHP二次排序即可,兼容性更强。

实现逻辑

  • 移除原WP_Query参数中针对子页面本身的orderby、order配置,这部分配置无法实现父级字段排序
  • 遍历查询得到的所有符合模板条件的页面对象,为每个项挂载对应的父页面标题属性
  • 用PHP原生数组排序函数,按父页面标题字段做字母排序
  • 遍历排序后的结果集输出前端内容,避免循环过程中修改全局$post变量导致的上下文异常

修正后完整代码

// 拉取所有匹配指定模板的已发布页面,移除无效的默认排序参数
$opnamePages = new WP_Query(array(
    'post_type'         => 'page',
    'posts_per_page'    => -1,
    'post_status'       => 'publish',
    'meta_key'          => '_wp_page_template',
    'meta_value'        => 'templates/dienst-sub-opname-page.php',
    'no_found_rows'     => true // 关闭分页计数,提升全量查询性能
));

if($opnamePages->have_posts()){
    $pageList = $opnamePages->posts;
    
    // 为每个页面项补充父页面标题字段
    foreach($pageList as $page){
        $parentId = wp_get_post_parent_id($page->ID);
        // 无父页面的项默认赋值空字符串,可按需调整排序优先级
        $page->parent_title = $parentId ? get_the_title($parentId) : '';
    }

    // 按父页面标题做字母排序:SORT_ASC为升序,需要降序替换strcmp两个参数顺序即可
    usort($pageList, function($a, $b){
        return strcmp($a->parent_title, $b->parent_title);
        // 降序排序使用下方返回值替换上行
        // return strcmp($b->parent_title, $a->parent_title);
    });

    // 遍历排序后的结果输出结构
    echo "<div class='subNavigationDropdown'>";
        echo "<div class='dropdown'>";
            foreach($pageList as $page){
                $pageLink = get_permalink($page->ID);
                $pageTitle = $page->post_title;
                $parentTitle = $page->parent_title;
                echo "<a href='{$pageLink}' title='Ga naar {$pageTitle}'>{$parentTitle}</a>";
            }
        echo "</div>";
    echo "</div>";
wp_reset_postdata();
}

可选调整说明

  • 如果需要把无父页面的项排到列表最后,可以在排序回调中单独判断parent_title为空的情况,返回更大的排序权重值
  • 如果需要做不区分大小写的字母排序,可以把排序函数里的strcmp替换为strcasecmp

内容的提问来源于stack exchange,提问作者Thessa Verbruggen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:31:09