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

如何生成自定义文章类型papers有发布内容的年度存档链接数组

核心疑问解答

你没有操作错误,get_archives() 函数原生默认返回格式化的HTML列表,确实不直接输出可复用的纯链接数组,你可以通过以下两种方案实现需求:


方案1:直接查询年份拼接链接(更稳定,推荐)

通过WordPress数据库查询直接拉取存在已发布papers文章的年份,自行拼接存档链接,不受HTML结构变动影响:

function get_papers_year_archive_links() {
    global $wpdb;
    $post_type = 'papers';

    // 查询所有有已发布自定义文章的年份,按时间倒序排列
    $years = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT DISTINCT YEAR(post_date) 
            FROM $wpdb->posts 
            WHERE post_type = %s 
            AND post_status = 'publish'
            ORDER BY post_date DESC",
            $post_type
        )
    );

    $link_array = [];
    foreach ($years as $year) {
        $link_array[] = home_url( "/{$year}/?post_type={$post_type}" );
    }
    return $link_array;
}

// 调用方法:直接获取目标数组
$papers_archive_links = get_papers_year_archive_links();

返回的$papers_archive_links就是你需要的结构,无内容的年份会自动排除。


方案2:基于get_archives()提取链接

如果不想直接操作数据库,也可以关闭get_archives()的自动输出,拿到HTML后正则提取链接:

// 获取年度存档HTML字符串
$archives_html = get_archives([
    'type' => 'yearly',
    'post_type' => 'papers',
    'echo' => false
]);

// 正则提取所有href属性值
preg_match_all('/href="([^"]+)"/', $archives_html, $match_result);
$papers_archive_links = $match_result[1] ?? [];

该方案依赖get_archives()输出的HTML结构,如后续WordPress版本调整默认输出格式可能失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:05