Фильтрация в WordPress без указания параметров в ссылке?

Собственно, вопрос такой, пользуюсь ACF, сделал фильтрацию стандартным способом, получается примерно такой урл при фильтрации site/objects?metro=Kurskaya, реально ли сделать так, чтобы урл выглядел вот так: site/objects/Kurskaya без создания страницы?
И второй вопрос сразу - если сгенерировать такой урл, а не создавать страницу, роботы яндекса и гугла всё равно ее не увидят?
  • Вопрос задан
  • 849 просмотров
Решения вопроса 1
kobyakovdima
@kobyakovdima
Любитель экспериментов
Если objects - это постоянная страница, то все get параметры можно сделать в виде ЧПУ. Об этом подробно расписано тут с примерами.

А вот код, который решает Вашу проблему:
add_action('init', 'rewrite_rule_my');
function rewrite_rule_my(){
	add_rewrite_tag('%metro%', '([^&]+)');
	add_rewrite_rule('^(objects)/([^/]*)/?', 'index.php?pagename=$matches[1]&metro=$matches[2]', 'top');
}

Вставляется в functions.php. После вставки обязательно идём в админку -> Настройки ЧПУ и просто жмём "Сохранить", чтобы новые правила вступили в силу. В шаблоне страницы objects получаем значение так (3 способа):
get_query_var('metro') // рекомендуемый
$wp_query->query_vars['metro']
$wp_query->query['metro']

а там уже используете его по назначению.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Можно. Добавьте произвольное rewrite_rule которое будет транслироваться в нужные переменные:
/**
 * Custom rewrite rules for filters:
 * /objects/%metro%/
 */
function custom_rewrite_rules() {

	add_rewrite_rule(
		'objects/([^/]+)/?$',
		'index.php?pagename=objects&page=&metro=$matches[1]',
		'top'
	);

}
add_action( 'init', 'custom_rewrite_rules' );

В строчке где идет index.php? в примере подставлено правило на базе страницы (pagename=objects). Если у вас там custom post type - модифицируйте URL соответственно.

Что касается роботов - если на эти виртуальные страницы фильтров есть ссылки, то роботы их проиндексируют. Еще можно добавить / убедиться что они есть в sitemap.xml. Если наоборот, не нужно чтобы они индексировались - применяйте стандартные приемы - nofollow, noindex, исключайте из карты сайта.
Ответ написан
Ваш ответ на вопрос

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

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