Я использую WordPress 3.0.1 и создал пользовательский тип записи с именем 'dienasgramatas'
. Мой плагин также создает настраиваемые правила перезаписи для отображения всех сообщений из этого типа сообщений и даже пользовательскую структуру постоянных ссылок для запроса сообщений с этим типом сообщений от определенного автора, но я не могу создать правило для разбиения на страницы:
Это тот, который работает:
$new_rules['dienasgramatas' . '/([^/]+)/?$'] =
'index.php?post_type=dienasgramata&author_name=' . $wp_rewrite->preg_index(1);
Это дает это правило перезаписи:
[dienasgramatas/([^/]+)/?$] => index.php?post_type=dienasgramata&author_name=$matches[1]
Но этот:
$new_rules['dienasgramatas' . '/([^/]+)/page/?([0-9]{1,})/?$'] =
'index.php?post_type=dienasgramata&author_name=' . $wp_rewrite->preg_index(1).
'&paged=' . $wp_rewrite->preg_index(2);
Выводит это (ошибочное) правило перезаписи:
[dienasgramatas/([^/]+)/page/?([0-9]{1,})/?$] =>
index.php?dienasgramata=$matches[1]&paged=$matches[2]
Как видите, post_type
оно игнорируется и это правило перезаписи не работает должным образом.
Может кто-нибудь сказать мне, почему это не работает или как сделать это правильно?
фильтр для функции:
add_filter('generate_rewrite_rules', 'add_rewrite_rules');
Полная функция выглядит следующим образом:
function add_rewrite_rules($wp_rewrite) {
$new_rules['dienasgramatas' . '/([^/]+)/?$'] = 'index.php?post_type=dienasgramata&author_name=' . $wp_rewrite->preg_index(1);
$new_rules['dienasgramatas' . '/([^/]+)/page/?([0-9]{1,})/?$'] = 'index.php?author_name=' . $wp_rewrite->preg_index(1) . '&paged=' . $wp_rewrite->preg_index(2) . '&post_type=dienasgramata';
$wp_rewrite->rules = array_merge($new_rules, $wp_rewrite->rules);
return $wp_rewrite;
}
Основная потребность в том, что я хочу пойти в
www.example.com/dienasgramatas/admin/page/2
и получать сообщения от ‘admin’ с post_type = ‘dienasgramata’ и второй страницей (например, смещение 10 сообщений). Правило перезаписи без page/2 работает нормально. Может быть, это проблема с регулярным выражением, или проблема с переменными запросов, или с тем, как назначаются правила перезаписи.
Пример живого сайта: http://dev.fiicha.lv/jb/dienasgramatas/juris/
— работает нормально http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
— не работает
внизу все правила перезаписи и переменные запроса
@banesto — мне нужно больше контекста, чтобы ответить на ваши вопросы. Какие крючки используете? Вы используете функцию
add_rewrite_rule()
? Если вы можете опубликовать полный пример, вам будет легче помочь.@MikeSchinkel — я добавил целую функцию с фильтром. есть и другие примеры, когда я хотел бы получить post_type в качестве переменной при перезаписи, но он игнорируется, но я считаю, что это по той же причине.
@banesto — Можете ли вы также показать, какие структуры URL-адресов вы пытаетесь получить, чтобы нам не приходилось гадать и, возможно, ошибаться? Приведите несколько примеров, пожалуйста.
@MikeSchinkel — я добавил живые примеры и объяснение
Большое спасибо! Немного хлопот с именем post_type в единственном/множественном числе, и оно работает: dev.fiicha.lv/jb/dienasgramatas/juris/page/2
@banesto — Круто! Рад, что смог помочь.
Привет @banesto :
Я думаю, что простой ответ может заключаться в том, что вам нужно, чтобы ваш URL-адрес страницы был указан перед более коротким URL-адресом, но, поскольку я не проверял его, я не уверен на 100%.
Тем не менее, у меня всегда было много проблем с
'generate_rewrite_rules'
крючком. Я уверен, что лучший разработчик, чем я, мог бы заставить его работать, но для меня было намного чище использовать этуadd_rewrite_rule()
функцию, поэтому я показываю, как вы должны настроить маршрут URL-адресов.Вот плагин, который делает то, что вы просили (
register_post_type()
вызов только для того, чтобы этот плагин работал в моей тестовой установке WordPress; вы можете заменить его своим):Конечно, всякий раз, когда вы добавляете правила перезаписи, вам нужно сбрасывать правила перезаписи, иначе они просто не будут работать. В идеале вы не хотите сбрасывать правила для каждой загрузки страницы, поэтому стандартный способ сделать это — использовать хук активации плагина. Поэтому я создал плагин для вас, но не стесняйтесь просто использовать
add_rewrite_rule()
вызовы вfunctions.php
файле вашей темы и вручную сбрасывать ваши URL-адреса, нажав «Сохранить изменения» в разделе «Настройки> Постоянные ссылки» консоли администратора.