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

如何获取所有文章的ACF repeater字段值并按year子字段排序

修改后的实现代码

function get_search_results(): array 
{
    global $wpdb;

    $sql = "SELECT pm.meta_value title, pm.post_id post, pm_year.meta_value year
            FROM {$wpdb->posts} p
            -- 关联查询title子字段
            JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
            -- 关联查询同一repeater行对应的year子字段
            JOIN {$wpdb->postmeta} pm_year 
                ON p.ID = pm_year.post_id
                -- 匹配同一行索引:提取publication_{x}_title中的x,和publication_{x}_year的x对应,避免匹配错位
                AND SUBSTRING_INDEX(SUBSTRING_INDEX(pm.meta_key, '_', 2), '_', -1) = SUBSTRING_INDEX(SUBSTRING_INDEX(pm_year.meta_key, '_', 2), '_', -1)
            WHERE p.post_status = 'publish'
                  AND pm.meta_key LIKE 'publication_%_title'
                  AND pm.meta_value LIKE '%search-term%'
                  AND pm_year.meta_key LIKE 'publication_%_year'
            -- 按year排序,转为数值类型避免字符串排序异常,如需倒序把ASC改为DESC即可
            ORDER BY CAST(pm_year.meta_value AS UNSIGNED) ASC;";

    return $wpdb->get_results($sql, ARRAY_A);
}

核心改动说明

  • 新增一次postmeta表的关联查询,用来获取和匹配到的title属于同一repeater行的year值
  • 通过SUBSTRING_INDEX提取repeater的行索引数字,确保title和year的配对关系正确,不会出现跨行匹配的问题
  • 排序时用CAST将year的存储值转为数值类型,避免字符串格式的数字出现10 < 2这类异常排序结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:18:03