Вопрос или проблема
У меня есть URL, оформленный так:
http://domain.com/custom-post-type/category/cat-name/page/page-number
Мне нужно извлечь:
cat-name
и page-number
Чтобы в моем functions.php
я мог создать собственное правило переписывания:
function my_insert_rewrite_rules( $rules ) {
$newrules = array();
$newrules['projects/category/(.+)/page/(\d+)/?$'] = 'index.php?post_type=project&project_cat=$matches[1]&paged=$matches[2]';
return $newrules + $rules;
}
Я пытаюсь использовать выражение:
projects/category/(.+)/page/(\d+)/?$
Которое, похоже, работает должным образом (экранируя слеши) в этом примере: http://rubular.com/r/5rzECsTexy
Однако это никогда не работает, URL:
http://domain.com/projects/category/print
и http://domain.com/projects/category/print/page/2
всегда ведут к 404.
Мое предыдущее правило переписывания projects/category/(.*/?)$
работало для категории, но не извлекало номер страницы правильно.
Редактировать
Код регистрации пользовательского типа записи (в function.php
моей темы)
// Пользовательские типы записей
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'project',
array(
'labels' => array(
'name' => __( 'Проекты' ),
'singular_name' => __( 'Проект' )
),
'public' => true,
'has_archive' => true,
'taxonomies' => array('category'),
'rewrite' => array('slug' => 'projects')
)
);
}
Вам не нужно настраивать собственное правило переписывания для этого, просто установите свой слаг переписывания так:
'rewrite' => array( 'slug' => 'projects/category/%project_cat%' )
Ответ или решение
Чтобы извлечь ‘cat-name’ и ‘page-number’ из URL, имеющего формат http://domain.com/custom-post-type/category/cat-name/page/page-number
, мы можем использовать регулярные выражения (regex) в комбинации с правилами перезаписи (rewrite rules) в WordPress. Рассмотрим этот процесс более подробно.
Шаг 1: Определение регулярного выражения
Для вашего случая мы можем использовать следующее регулярное выражение:
projects/category/([^/]+)/page/(\d+)/?$
Объяснение регулярного выражения:
projects/category/
– Эта часть соответствует статическому началу вашего URL.([^/]+)
– Это захватывающая группа, которая будет извлекать ‘cat-name’. Символы[^/]
указывают, что мы ищем любые символы, кроме слэша/
, один или более раз (+
)./page/
– Эта часть также указывает на наличие статической структуры URL.(\d+)
– Вторая захватывающая группа, которая будет извлекать ‘page-number’. Здесь\d
соответствует любой цифре, а+
указывает на одно или более вхождений./?$
– Указывает, что на конце URL может быть один слэш или не быть, и что это конец строки.
Шаг 2: Создание правила перезаписи
Теперь, когда мы определили регулярное выражение, мы можем использовать его для создания правила перезаписи в файле functions.php
вашей темы:
function my_insert_rewrite_rules( $rules ) {
$newrules = array();
$newrules['projects/category/([^/]+)/page/(\d+)/?$'] = 'index.php?post_type=project&project_cat=$matches[1]&paged=$matches[2]';
return $newrules + $rules;
}
add_filter('rewrite_rules_array', 'my_insert_rewrite_rules');
Шаг 3: Регистрация пользовательского типа записи
При регистрации пользовательского типа записи, важно убедиться, что вы правильно указываете параметры для перезаписи. Ваш текущий код регистрации выглядит следующим образом:
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'project',
array(
'labels' => array(
'name' => __( 'Projects' ),
'singular_name' => __( 'Project' )
),
'public' => true,
'has_archive' => true,
'taxonomies' => array('category'),
'rewrite' => array('slug' => 'projects')
)
);
}
Добавьте в массив rewrite
строку для таксономии:
'rewrite' => array('slug' => 'projects/category/%project_cat%')
Это позволит WordPress правильно интерпретировать ваши запросы.
Шаг 4: Обновление правил перезаписи
После внесения изменений в файл functions.php
, не забудьте обновить правила перезаписи:
- Перейдите в админку WordPress.
- В разделе «Настройки» выберите «Постоянные ссылки».
- Нажмите «Сохранить изменения» (даже если вы ничего не меняете).
Это обновит ваши правила перезаписи и активирует новые настройки.
Заключение
Вышеуказанный метод использует регулярные выражения для извлечения параметров ‘cat-name’ и ‘page-number’ из заданного URL. Обратив внимание на структуру URL и соответствующие правила перезаписи в WordPress, вы сможете избежать ошибок 404 и добиться правильной работы вашего пользовательского типа записи и таксономии.
Помните, что правильное тестирование после реализации изменений – это ключ к успешному управлению вашим сайтом на WordPress. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за поддержкой.