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

Дубли страниц. Как убрать?

Есть произвольные типы записей "Store" и "Promocode". У "Promocode" есть таксономия "Offers". Была задача для записей типа "Promocode" привести url к виду site.com/store/%store%/promocode/%offers%/%promocode%. Для этого у каждой записи типа "Store" появилась дочерняя страница со слагом "promocode" + в functions.php добавлен код

function my_add_rewrite_rules_promocode() {
  add_rewrite_tag('%promocode%', '([^/]+)','promocode=');
  add_permastruct('promocode', '/store/%store%/promocode/%offers%/%promocode%', false);
  add_rewrite_rule('^store/([^/]+)/promocode/([^/]+)/([^/]+)/?$','index.php?promocode=$matches[3]&offers=$matches[2]','top');
}
add_action( 'init', 'my_add_rewrite_rules_promocode' );

function my_permalinks_promocode($permalink, $post, $leavename) {
  $post_id = $post->ID;
  if($post->post_type != 'promocode' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
	return $permalink;
  $parent = get_post_meta( $post->ID, 'stores_ids' , true );
  $parent_post = get_post( $parent
);
$tax_name = 'offers';
$offf = get_the_terms( $post->ID, $tax_name );

  $permalink = str_replace('%store%', $parent_post->post_name, $permalink);
  $permalink = str_replace('%offers%', $offf[0]->slug, $permalink);
  return $permalink;
}
add_filter('post_type_link', 'my_permalinks_promocode', 10, 3);

В итоге ссылки пришли к нужному виду: site.com/store/%store%/promocode/%offers%/%promocode%. Работають.

НО!

Если в урл вместо %store% и/или %offers% вписать любую белиберду, то запись открывается, как ни в чём не бывало, вместо того, чтоб отдать 404.

Как это побороть?

0
anastasiya-219
27 марта 2020 3

Нет ответов на этот вопрос.

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