Intereting Posts
Устранение неполадок правильного родительского меню с классами wp_nav_menu при просмотре «отдельных сообщений» customize_register с несколькими элементами управления / настройками – как получить значения? как группировать персонализированные сообщения типа по пользовательским правилам таксономии Как сделать страницы с индексом arent для приложений ajax Пользовательский поиск post_type $ wp_query-> query_vars не соответствует Запрос, заданный с использованием tax_query с отношением 'OR', изменяет объект категории? Многоузловая установка с субдоменами на субдомене Как получить липкий пост в сыром sql? Ошибка синтаксиса PHP на get_posts этикетки пользовательских таксономов на иврите Внутреннее присоединение переопределяет get_field плагина расширенного пользовательского поля Добавление первых / последних классов CSS в меню WooCommerce: список всех категорий Пытается выводить содержимое со страницы, работает локально, но не в сети Использование разделителя с wp_list_categories

Пользовательское правило перезаписи типа публикации для автора и пейджинга?

Я использую 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 игнорируется, и это правило перезаписи не работает post_type образом.

Может ли кто-нибудь сказать мне, почему это не работает или как это сделать правильно?

фильтр для funcion:

 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 post offset). Правило перезаписи без страницы / 2 отлично работает. Возможно, это проблема с выпуском регулярных выражений или запросов, или как назначаются правила перезаписи.

пример живого сайта: http://dev.fiicha.lv/jb/dienasgramatas/juris/ – работает нормально http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/ – не работает

внизу находятся все правила перезаписи и запросы vars

Solutions Collecting From Web of "Пользовательское правило перезаписи типа публикации для автора и пейджинга?"

Привет @banesto :

Я думаю, что простой ответ может заключаться в том, что вам нужно, чтобы ваш URL-адрес, который вы указали, был указан до вашего более короткого URL-адреса, но поскольку я не тестировал его, я не уверен на 100%.

Тем не менее, я всегда сталкивался с множеством проблем с крюком 'generate_rewrite_rules' . Я уверен, что лучший разработчик, чем я, мог бы заставить его работать, но для меня было намного чище использовать add_rewrite_rule() так что я показываю, что вы должны сделать свой URL-адрес маршрутом.

Вот плагин для выполнения ваших запросов (вызов register_post_type() существует только там, чтобы этот плагин мог работать в моей тестовой установке WordPress, вы можете заменить его своим):

 <?php /* Plugin Name: Dienasgramatas Urls Version: 1.0 Author: Mike Schinkel Author URI: http://mikeschinkel.com/ */ if (!class_exists('Dienasgramatas_Urls')) { class Dienasgramatas_Urls { static function init() { $post_type = 'dienasgramatas' ; register_post_type($post_type, array( 'label' => 'Dienasgramatas', 'public' => true, 'show_ui' => true, 'query_var' => 'dienasgramatas', 'rewrite' => array('slug' => 'dienasgramatas'), 'hierarchical' => false, 'supports' => array('title','editor','custom-fields'), ) ); add_rewrite_rule("{$post_type}/([^/]+)/page/?([2-9][0-9]*)", "index.php?post_type={$post_type}&author_name=\$matches[1]&paged=\$matches[2]", 'top'); add_rewrite_rule("{$post_type}/([^/]+)", "index.php?post_type={$post_type}&author_name=\$matches[1]", 'top'); } static function on_load() { add_action('init',array(__CLASS__,'init')); } static function register_activation_hook() { self::init(); flush_rewrite_rules(false); } } Dienasgramatas_Urls::on_load(); } 

Конечно, всякий раз, когда вы добавляете правила перезаписи, вам нужно сбросить правила перезаписи или они просто не сработают. В идеале вы не хотите устанавливать правила для каждой загрузки страницы, поэтому стандартный способ сделать это – в подключении к плагину. Поэтому я создал для вас плагин, но не add_rewrite_rule() просто использовать add_rewrite_rule() в файле functions.php вашей темы и вручную удалять ваши URL-адреса, нажав «Сохранить изменения» в разделе «Настройки> Перманентные» в консоли администратора.