Задать вопрос
Damaks
@Damaks

Как составить запрос через хук request?

На просторах интернета нашёл способ изменения url рубрик. Например, изменение "/category/cat_old/" на "/category/cat_new/":
add_filter('request', 'my_request', 9999, 1);
function my_request($query){
	$url = urldecode($_SERVER['REQUEST_URI']);
	if ($url == '/category/cat_new/')
		$query['category_name'] = 'cat_old';
	return $query;
}

Мне необходимо проделать то же самое с пользовательской таксономией, где "tax" - таксономия, "term" - термин таксономии. По аналогии заменить ссылку "/tax/term_old/" на "/tax/term_new/".

Каким образом заменить "$query['category_name'] = 'cat_old'" в таком случае?
  • Вопрос задан
  • 294 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@stoik_kpd
Админ-панель: настройки - постоянные ссылки - в нужную строчку вписываете: /category/cat_new/

---------------

add_filter('request', 'my_request', 9999, 1);
function my_request($query){
  $url = urldecode($_SERVER['REQUEST_URI']);
  if ($url == '/tax/term_new/')
    $query['название таксономии'] = 'название термина';
  return $query;
}


Попробуйте так
Ответ написан
Damaks
@Damaks Автор вопроса
Полный код:
// перезаписываем ссылки
add_filter('term_link', 'sm_term_links', 10, 3);
function sm_term_links($url, $term, $taxonomy){
	$replace = $term->slug;
	/* нужно указать ID и новый ярлык */
	if ($term->term_id == 7)
		$replace = 'term_new';
	$url = str_replace($term->slug, $replace, $url);
	return $url;
}

// перезаписываем основной запрос
add_filter('request', 'sm_request', 9999, 1);
function sm_request($query){
	$url_zapros = urldecode($_SERVER['REQUEST_URI']);
	if ($url_zapros == '/tax/term_new/')
		$query['tax_name'] = 'term_old';
	return $query;
}

// ставим 301 редирект со старых ссылок на новые
add_action('template_redirect', 'sm_301_redirect');
function sm_301_redirect() {
	/* старые=>новые ссылки  */
	$rules = array(
		array('old'=>'/tax/term_old/','new'=>'/tax/term_new/') // рубрика
	);
	foreach ($rules as $rule) :
		// если URL совпадает с одним из указанных в массиве, то редиректим
		if (urldecode($_SERVER['REQUEST_URI']) == $rule['old']) :
			wp_redirect(site_url($rule['new']), 301);
			exit();
		endif;
	endforeach;
}


P,S,
Вопрос больше не актуален. Решил задачу другим методом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы