Постоянные ссылки и редирект

Я поменял постоянную ссылку с /%category%/%postname%/ на /%category%/%postname%-%post_id%/

Теперь не могу правильно настроить редирект.

Нашел и немного изменил функцию под свою ситуацию, но есть проблема. Функция срабатывает даже на главной странице и редиректит на первую запись на главной.

Мне нужно, чтобы функция срабатывала только при внешнем переходе по старой ссылке. А может сделать какую-нибудь дополнительную проверку, чтобы функция лишний раз не срабатывала.

Какие есть мысли?

function rudr_post_permalink( $url ){
$request_uri = urldecode($_SERVER['REQUEST_URI']);
$the_slug = basename(parse_url($request_uri, PHP_URL_PATH));
$args = array(
  'name'        => $the_slug,
  'post_type'   => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
    
if( $my_posts ) :
  $post_url = get_post_permalink($my_posts[0]->ID);
  wp_redirect($post_url, 301);
  die();
endif;

}

add_filter( 'template_redirect', 'rudr_post_permalink');

Ответы (1 шт):

Автор решения: W1ns

Если вдруг кому будет нужно, сделал так.

function rudr_post_permalink($url)
{
    $request_uri = urldecode($_SERVER['REQUEST_URI']);
    $the_slug = basename(parse_url($request_uri, PHP_URL_PATH));

    if ($the_slug)
    {
        $args = array(
            'name' => $the_slug,
            'post_type' => 'post',
            'post_status' => 'publish',
            'numberposts' => 1
        );
        $my_posts = get_posts($args);

        if ($my_posts):
            $post_url = get_post_permalink($my_posts[0]->ID);
            wp_redirect($post_url, 301);
            die();
        endif;

    }
}

add_filter('template_redirect', 'rudr_post_permalink');
→ Ссылка