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