如何生成自定义文章类型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
相关产品推荐
相关产品推荐

