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

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

Есть произвольные типы записей "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.

Как это побороть?
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Aricus
Думаю, стоит создать дерево категорий с такими же названиями, и ссылки тоже делать через категории. Ведь для wordpress, насколько я знаю, никакой родительской зависимости между пользовательскими типами данных не предусмотрено.
Ответ написан
Ваш ответ на вопрос

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

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