Сделать 301 редирект постов wordpress
Столкнулся с такой проблемой. Нужно организовать 301 редирект для постов, у которых есть категория. Например, пользователь вводит название поста напрямую, получается что-то типа https://my_site/post-example Если пост относится к какой-то категории, пользователя должно перекинуть на https://my_site/categoty-example/post-example. Сразу скажу, что уже перепробовал: 1)плагины не подходят, только redirection. В нем можно задать такое поведение, но для каждого поста индивидуально, по-другому адекватно не работает, постов слишком много - не подходит. 2)Написать код, в котором будем получать текущий пост с БД, брать его название, после чего проверка на наличие категории данного поста, и формируем новый url. Тут проблема в том, что приходится задавать значение категории жёстко, если категорий больше, чем одна, то данный скрипт уже не работает. 3)Через файл .htaccess не получится, на беке nginx. В общем, прошу помощи, может у кого ещё какие-то мысли, с радостью приму советы. Заранее спасибо!
Ответы (1 шт):
Работающий код, который можно добавить в functions.php или использовать как mu-plugin:
<?php
function my_301_redirect() {
if ( ! is_404() ) {
return;
}
$post_name = trim(
wp_parse_url(
filter_var(
isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : '',
FILTER_SANITIZE_STRING
),
PHP_URL_PATH
),
'/'
);
$args = [
'name' => $post_name,
'posts_per_page' => 1,
];
$query = new WP_Query( $args );
if ( ! $query->have_posts() ) {
return;
}
wp_safe_redirect( get_post_permalink( $query->post->ID ), 301 );
exit;
}
add_action( 'template_redirect', 'my_301_redirect' );