DOOFOX BLOG

5 月 29 2023 Category:

重塑WordPress链接结构:从文章标题到文章ID的重定向方法

从/%category%/%postname%.html 重定向为 /%category%/%post_id%.html 格式

在网站设计中,URL结构的选择是一项重要的决策。一个良好的URL结构可以使你的网站更易于索引和搜寻,同时也可以提高用户体验。然而,WordPress默认的链接结构可能并不适合所有的需求。但是如果我们直接修改固定链接,可能导致之前被收录的地址失效,严重影响 SEO。

解决思路

解决方案有两个主要步骤:检查URL,然后进行重定向。

第一步,检查请求的URL是否包含文章ID。如果不包含,我们就继续到下一步。

第二步,通过文章标题在数据库中查询文章的ID,然后生成新的URL,并将请求重定向到这个新的URL。

具体实现

function redirect_to_post_id() {
    // 如果请求的 URL 不包含 post_id,执行以下操作
    if (!is_numeric(basename($_SERVER['REQUEST_URI'], ".html"))) {
        global $wpdb;

        // 从 URL 中获取文章标题
        $postname = urldecode(basename($_SERVER['REQUEST_URI'], ".html"));

        // 在数据库中搜索对应的文章,获取文章的 ID
        $post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name = %s", urlencode($postname)));

        if ($post_id) {
            // 获取文章的分类
            $categories = get_the_category($post_id);
            $category_slug = $categories[0]->slug;

            // 生成新的 URL
            $new_url = home_url() . "/{$category_slug}/{$post_id}.html";

            // 将请求重定向到新的 URL
            wp_redirect($new_url, 301);
            exit;
        }
    }
}

// 将函数添加到 'template_redirect' 动作钩子,确保它在模板重定向时运行
add_action('template_redirect', 'redirect_to_post_id');
浙ICP备17013116号-1