这里有一个客户的网站初期默认设置的是ID URL,这里他在新建立的某个目录分类中希望不用ID URL,而是采用自定义SLUG URL。按照常理,我们需要统一一致的URL,这里我们可以单独指定某个分类设置支持自定义URL。

// 修改tools分类下文章的链接生成
function tools_post_permalink($post_link, $post) {
    if ($post->post_type === 'post') {
        $categories = get_the_category($post->ID);
        if (!empty($categories)) {
            foreach ($categories as $category) {
                if ($category->slug === 'tools') {
                    // 使用 文章slug.html 的格式
                    return home_url('/' . $post->post_name . '.html');
                }
            }
        }
    }
    return $post_link;
}
add_filter('post_link', 'tools_post_permalink', 10, 2);

// 添加自定义查询变量
function tools_query_vars($vars) {
    $vars[] = 'tools_post_slug';
    return $vars;
}
add_filter('query_vars', 'tools_query_vars');

// 处理tools分类下文章的查询解析
function tools_parse_request($wp) {
    if (isset($wp->query_vars['tools_post_slug'])) {
        $post_slug = $wp->query_vars['tools_post_slug'];
        
        // 查找文章
        $post = get_page_by_path($post_slug, OBJECT, 'post');
        if ($post) {
            // 验证文章是否属于tools分类
            $categories = get_the_category($post->ID);
            $is_tools_category = false;
            
            foreach ($categories as $category) {
                if ($category->slug === 'tools') {
                    $is_tools_category = true;
                    break;
                }
            }
            
            if ($is_tools_category) {
                // 设置查询变量为单篇文章
                $wp->query_vars['p'] = $post->ID;
                $wp->query_vars['post_type'] = 'post';
                unset($wp->query_vars['tools_post_slug']);
            }
        }
    }
}
add_action('parse_request', 'tools_parse_request');

// 刷新重写规则(激活时使用)
function flush_tools_rewrite_rules() {
    tools_custom_permalink_structure();
    flush_rewrite_rules();
}
// 取消注释下面的行来刷新重写规则(仅在需要时使用)
// add_action('after_switch_theme', 'flush_tools_rewrite_rules');

// 确保面包屑导航正确显示tools分类链接(保持原有分类链接)
function tools_breadcrumb_link($link, $category) {
    if ($category->slug === 'tools') {
        return home_url('/category/tools/');
    }
    return $link;
}
add_filter('get_category_link', 'tools_breadcrumb_link', 10, 2);

如上代码设置之后,我们可以重置保存一下固定链接后,我们在指定的 tools 分类中的内容页可以自定义URL页面名称,然后可以看到其他的分类下的文章是采用的ID URL,而Tools分类采用的Slug URL。

https://www.example.com/bmi-calculator.html

类似这样的格式。当然,我们也可以根据实际的需要去修改。

我要投票

相关新闻

联系我们
关注微信