WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Непонятные дубли записей

Такая проблема: на сайте зарегистрирован тип записей book, таксономия zhanry.
То есть ссылка на запись выглядит так:

https://vknige.net/zhanry/boevaya-fantastika/zakon-chernobylya

Но книга доступна ещё и по такому адресу:

https://vknige.net/zhanry/no-zhanry/zakon-chernobylya

Откуда они берутся я никак не пойму. Можно ли как-то их удалить, либо сделать 301 редирект?

Большое спасибо!

0
Николай
месяц назад
  • 1
    Andrew469 america-xix.ru

    Это происходит от того, что структура пермалинков записи работает только с идентификатором записи или её слагом и игнорирует любые другие составляющие.

    Такое правило перезаписи как в примере создано либо Вами, либо каким-то плагином.

    Проверьте правило с помощью плагина Rewrite Rules Inspector, он должен указать на "виновника".

    no-zhanry это, по-видимому, какой-то элемент таксономии zhanry, присваиваемый по умолчанию плагином, которым создана таксономия?

    Николай месяц назад

    Таксономию no-zhanry я не создавал, а саму таксономию создал с помощью записи в файл function.php

    Но на ряду с этим существует плагин pods, может ли он создавать данную таксономию?

    Николай месяц назад

    А можно просто поставить 301 редиректы?
    Но как это сделать? Подскажите, пожалуйста

    Andrew месяц назад

    создавать данную таксономию?

    no-zhanry это не таксономия, а элемент (метка, категория) таксономии "zhanry".

    Но на ряду с этим существует плагин pods, может ли он

    Плагин вполне мог создать в таксономии "метку по умолчанию" (об автоматической природе метки говорит слаг - к названию таксономии добавлено отрицание no) и присваивать её тем записям типа book, которым автор не присвоил метку руками.

    Поработайте с настройками плагина, запретите присваивание метки по умолчанию, не забывайте удалять метку по умолчанию и присваивать правильную метку при создании записи. (Судя по заданной структуре пермалинков, запретить присваивание вряд ли удастся, поскольку наличие метки является обязательным для пермалинка).

    А можно просто поставить 301 редиректы?

    можно, конечно. Воспользуйтесь хуком https://wp-kama.ru/hook/template_redirect

    Николай месяц назад

    Андрей, помогите, пожалуйста с редиректом...
    Я не силен в этом

    Andrew месяц назад

    во-первых, найдите посты, привязанные к элементу no-zhanry, и уберите связь с этим элементом у тех записей, которые не должны ее иметь. Можно было бы удалить сам элемент, но тут нужно копаться в настройках плагина pods и там указывать новую метку по умолчанию.

    Если этого не хватит, то напишите произвольную функцию для хука template_redirect. [Disclaimer: Пример написан "с головы" прямо в форме комментария, может содержать синтаксические ошибки, или вообще не сработать]

    add_action( 'template_redirect', 'check_301redirect', 9 );
    function check_301redirect(){
    
    	$parsed_url = parse_url( $_SERVER['REQUEST_URI'] );
    
    	if( ! is_singular('book') || strpos( $parsed_url['path'], 'no-zhanry' ) === false )
    		return; // прекращаем работу, если это не book или в адресе нет 'no-zhanry'
    
    	$qo = get_queried_object();
    
    	$redirect_to = get_permalink( $qo );
    
    	wp_redirect( $redirect_to, 301 );
    	exit;
    
    }

    в запущенном случае, если у поста несколько меток zhanry, или плагин окажется настойчивым, может потребоваться дополнительная обработка - получение меток поста, выбор нужной и замена 'no-zhanry' на слаг нужной метки в переменной $redirect_to;

    Николай месяц назад

    Код работает. Вставил его в function.php

    Большое спасибо!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация