Я пытаюсь восстановить URL-адрес своего сайта WordPress, но безуспешно.
У меня есть 3 пользовательских типа сообщений, строк, коллекций и продуктов. Идея в том, что они связаны иерархией (один ко многим): линейки, коллекции, товары.
Итак, если у меня есть строка с именем L, коллекция с именем C и продукт P, я хотел бы получить доступ к ним следующим образом:
Строка A должна выглядеть как site.com/l.
Столбец A должен выглядеть как site.com/l/c.
Продукт А должен выглядеть как site.com/l/c/p.
Я написал этот код, но он не работает должным образом.
В этом порядке правил перезаписи все 3 URL-адреса возвращают строку A.
Но если я инвертирую порядок и закодирую правила перезаписи, поставив продукты первыми, коллекции вторыми и строки третьим правилом, поведение изменится.
При инверсии URL-адрес site.com/l возвращает строку A, а URL-адреса site.com/l/c и site.com/l/c/p возвращают столбец A.
Я понятия не имею, почему я не могу получить доступ к странице продукта.
Кстати, я использую плагин Types для создания CPT и плагин ACF для создания метаполя с взаимосвязью между CPT (именно поэтому у меня есть функция «get_field»)
// BACK_END
add_filter('post_type_link', 'site_type_permalink', 10, 4);
function site_type_permalink($post_link, $post, $leavename, $sample) {
$permalink = $post_link;
if ($post->post_type == 'lines') {
$permalink = str_replace('lines/', '', $post_link);
}
if ($post->post_type == 'collections') {
global $post;
$lines = get_field('line_obj');
$title = $lines[0]->post_name;
$permalink = str_replace('collections/', $title . '/', $post_link);
}
if ($post->post_type == 'products') {
global $post;
$col = get_field('collection_obj');
$colSlug = $col[0]->post_name;
$lin = get_field('line_obj', $col->ID);
$linSlug = $lin[0]->post_name;
$permalink = str_replace('products/', $linSlug . '/' . $colSlug . '/', $post_link);
}
return $permalink;
}
// FRONT_END
function site_rewrite_rules() {
// lines
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/?',
'index.php?lines=$matches[1]',
'top'
);
// collections
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/([^/]*)/?',
'index.php?lines=$matches[1]&collections=$matches[2]',
'top'
);
// products
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/([^/]*)/([^/]*)/?',
'index.php?lines=$matches[1]&collections=$matches[2]&products=$matches[3]',
'top'
);
}
add_action('init', 'site_rewrite_rules', 10, 0);
У кого-то есть идея, что я делаю неправильно? Спасибо