如何在WordPress的functions.php中修改文章归档链接
嘿,我来帮你搞定这个WordPress链接修改的需求!你已经写了一部分文章链接的代码,接下来我们把归档链接的修改也补上,同时优化现有代码避免冲突。
完整实现步骤
要实现把归档链接从http://localhost/wordpress/2018/03/改成http://localhost/wordpress/arr/2018/03/,同时保持文章链接也带上/arr/前缀,需要做三件事:添加重写规则、过滤归档链接输出、优化文章链接函数。
1. 添加自定义重写规则
首先要让WordPress识别带/arr/前缀的归档URL,把这段代码加到你的主题functions.php里:
function custom_arr_rewrite_rules() { // 匹配月归档:/arr/2018/03/ add_rewrite_rule( 'arr/([0-9]{4})/([0-9]{2})/?$', 'index.php?year=$matches[1]&monthnum=$matches[2]', 'top' ); // 匹配年归档:/arr/2018/ add_rewrite_rule( 'arr/([0-9]{4})/?$', 'index.php?year=$matches[1]', 'top' ); } add_action('init', 'custom_arr_rewrite_rules');
这段代码会在WordPress初始化时注册新的URL规则,告诉服务器/arr/年份/月份/这样的地址应该指向对应的归档页面。
2. 过滤归档链接输出
接下来要把默认的归档链接替换成带/arr/前缀的版本,添加这段代码:
function custom_arr_archive_link($url) { // 检测是否为日期归档链接(包含年份) if (preg_match('/\/[0-9]{4}\//', $url)) { // 在域名后插入/arr/前缀 $url = str_replace(home_url(), home_url('/arr'), $url); } return $url; } add_filter('year_link', 'custom_arr_archive_link'); add_filter('month_link', 'custom_arr_archive_link');
它会自动修改年归档和月归档的链接输出,把原来的日期前缀替换成/arr/年份/或/arr/年份/月份/。
3. 优化文章链接函数
你原来的文章链接代码可以调整一下,避免重复添加/arr/前缀,确保逻辑更稳定:
function append_query_string($url, $post, $leavename) { // 只处理文章类型为post的链接 if ($post->post_type == 'post') { // 检查URL是否已包含/arr/,防止重复添加 if (strpos($url, '/arr/') === false) { $relative_url = str_replace(home_url(), '', $url); $url = home_url(user_trailingslashit("arr$relative_url")); } } return $url; } add_filter('post_link', 'append_query_string', 10, 3);
现在单篇文章的链接会变成http://localhost/wordpress/arr/文章别名/,而且不会重复添加前缀。
最后一步:刷新重写规则
添加完代码后,登录WordPress后台,进入设置 → 固定链接,随便修改一下固定链接结构(比如从“文章名”切换到“自定义结构”再切回来),然后点击保存更改。这一步很重要,它会让WordPress刷新重写规则,新的URL规则才能生效。
做完这些后,你就可以测试归档链接和文章链接了,应该都能正常访问,并且URL格式符合你的需求。
内容的提问来源于stack exchange,提问作者Rushanthan

