Как в WordPress url рубрик и меток из кириллицы сделать латиницей с 301 редиректом

WPPW | 26 ноября 2017, 13:51 | 1

Есть сайт, в котором все страницы были прописаны на кириллице. Теперь есть необходимость перевести всё на латиницу.
Если с записями и страницами вопрос решился с помощью плагина Cyr to Lat enhanced, то для меток и рубрик старые адреса на кириллице стали выдавать 404 ошибку. Как сделать 301 редирект со старых страниц категорий и тегов?


Метки:

Решения

  1. При переезде с кириллицы на латиницу нужно сохранить старые метки в метаданных меток, например, так:
    add_term_meta( $term->term_id, 'old_slug', $term->slug, $unique = true);
    

    Тут мы сохранили старые ярлыки меток в метаполе old_slug

  2. Далее, по этому ярлыку мы отлавливаем термины таксономий и редиректим на новый адрес, если он существует. Вот готовый пример для меток:
    add_action( 'request', function ( $request ) {
    
    	$q = new WP_Query( $request );
    
    	// Работаем только с метками, которые не определены
    	if ( $q -> is_tag and ! empty( $q -> query['tag'] ) and ! $q -> have_posts() ) {
    
    		// Пытаемся найти термин со старым ярлыком
    		$terms = get_terms( [
    			'taxonomy'	 => 'post_tag',
    			'number'	 => 1,
    			'meta_query' => [
    				[
    					'key'		 => 'old_slug',
    					'value'		 => $q -> query['tag'],
    					'compare'	 => 'LIKE',
    				]
    			],
    				] );
    
    		// Если метка есть, то редиректим на неё
    		if ( $terms ) {
    
    			$term = $terms[0];
    
    			$url = get_term_link( $term );
    
    			wp_redirect( $url, 301 );
    
    			exit;
    		}
    	}
    
    	return $request;
    } );