如何从`/%post_id%/`跳转到`/%postname%/`?

时间:2020-08-21 作者:Elron

我的永久链接设置为/%post_id%/ (职位id)。

https://elrons.co.il/%post_id%/

我想把它们都改成/%postname%/ (这是后段塞)。

https://elrons.co.il/%postname%/

问题是,每当我更改它时,它都会从我的旧页面URL中产生404个错误。

例如,这:https://elrons.co.il/1779/

应更改为:https://elrons.co.il/pil-kahol-font/

但它给出了404。

如何从/%post_id%//%postname%/?

2 个回复
最合适的回答,由SO网友:Elron 整理而成

我已经写了自己的解决方案,与大家分享,希望它能帮助别人。

将此添加到functions.php:

<?php

add_action(\'parse_request\', \'redirect_postid_to_postname\');
function redirect_postid_to_postname($wp)
{
    // If /%post_id%/
    if (is_numeric($wp->request)) {

        $post_id = $wp->request;
        $slug = get_post_field( \'post_name\', $post_id );

        // If the post slug === the post number, prevent redirection loops.
        if ($slug !== $post_id) {
            
            // Adding url parameters manually to $redirect_to
            $parameters = $_SERVER[QUERY_STRING];

            $redirect_from = (isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\'] === \'on\' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
            $redirect_to = get_permalink($post_id) . (!empty($parameters) ? ("?" . $parameters) : "");
            
            // Prevent loops
            if($redirect_from !== $redirect_to) {
                wp_redirect($redirect_to, 301);
                exit;
            }

        }
    }
}

SO网友:Suresh Shinde

你可以这样做。htaccess文件,对于您的案例url格式为;

重定向301/%post\\u id%/https://elrons.co.il/%postname%/

例如,通过重定向插件301 Redirects – Easy Redirect Manager

相关推荐

如果is_page()不能与wp_reDirect一起使用

我安装了一个插件,它正在前端创建用户配置文件。此页面的ID在wordpress后端为301。如果访问了配置文件站点,我想在url后面附加一个参数。参数值存储在cookie中。用于附加URL的代码正在运行,但当我添加代码以仅在此页面id上显示时,它不起作用。代码在my child themes函数中执行。phpNOT WORKINGif( is_page(301)) { echo \'page\'; // Event ID in der URL als $_GET hinz