Сегодня мы рассмотрим довольно распространенный сценарий: вы переносите сайт откуда-то куда-то, у вас есть список старых ссылок и список новых ссылок. Ваша задача сделать так, чтобы при заходе по старой ссылке шел редирект на новую ссылку. Это важно как для поисковиков, так и для пользователей — чтобы при переходе по ссылкам у вас не было 404 страниц.

Обработать такой список — это большая головная боль и сегодня мы рассмотрим пример, как это сделать с помощью excel. Для этого мы будем использовать простую библиотеку SimpleXLSX, которая умеет конвертировать файлы в формате .xlsx в простые массивы на php. О том, как она работает мы уже разбирали ранее.

Библиотека должна быть подключена следующим образом:

require_once get_template_directory() . '/includes/plugin-additions/simplexlsx.class.php';

В качестве примера рассмотрим сайт potolkoff59.ru, на котором при редизайне поменялась структура ссылок и список редиректов стал выглядеть следующим образом:

Редиректы в WordPress должны происходить на хуке template_redirect, мы создаем функцию и вешаем на этот хук. Импортируем excel-файл и собираем два массив — с редиректами и списком запросов. После этого проверяем, что текущий запрос есть в списке старых ссылок и в списке редиректов и производим редирект с помощью функции wp_redirect()

// excel-редиректы
add_action( 'template_redirect', 'potolki_redirects' );
function potolki_redirects() {

	$fileImport = get_stylesheet_directory() . '/data/potolkoff59.ru.xlsx';
	if ( $xlsx = SimpleXLSX::parse( $fileImport )) {
		$sheetData = $xlsx->rows(1);

		$array = array();
		$requests = array();

		foreach ( $sheetData as $keyD => $sheetRow ) {
			if ( $keyD != 0 && $sheetRow['0'] && $sheetRow['1'] ) {

				// убираем регулярками протокол и домен
				$old_request = $sheetRow['0'];
				$old_request = preg_replace('/^(http[s]?):\/\//', '', $old_request );
				$old_request = preg_replace('/^[^\/]+/', '', $old_request );

				// собираем два массив - с редиректами и запрсоами
				$array[$old_request] = $sheetRow['1'];
				$requests[] = $old_request;

			}
		}

		// проверяем, что массивы оказались не пустыми
		if ( !empty( $array ) && !empty( $requests ) ) {
			$current_request = $_SERVER['REQUEST_URI'];

			// проверяем, что текущий запрос есть в списке старых ссылок и в списке редиректов
			if ( in_array( $current_request, $requests ) && isset( $array[$current_request] ) ) {
				wp_redirect( $array[$current_request], 301 );
			}

		}

	}

}

Похожие посты

Как импортировать данные из excel в WordPress

При работе с WordPress часто возникает необходимость обработки табличных данных. Сегодня мы рассмотрим пример, как импортировать данные из excel на сайт на WordPress. В качестве инструмента будем использовать простую библиотеку SimpleXLSX, а о том, как с ней работать мы разбирали ранее. Библиотека должна быть подключена следующим образом: Для примера рассмотрим простую таблицу с контактами: Для…

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *