Intereting Posts

Как добавить правила перезаписи и разбиение на страницы для получения файлов вложений?

Я пытаюсь перечислить вложения, основанные на разных таксономиях. Сейчас он работает только для основного URL-адреса (без добавления страниц). Например

http://www.example.com/exams/high-school/city-name/subject/math/ 

Во-первых, я добавил свое правило перезаписи в functions.php следующим образом:

 function add_rewrite_rules($aRules) { $new_rules = array( // rule 1 'exams/([^/]+)/([^/]+)/subject/([^/]+)/?$' => 'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]', // rule 2 'exams/([^/]+)/([^/]+)/subject/([^/]+)/page/([0-9]+)/?$' => 'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]&page=$matches[4]' ); return $new_rules + $aRules; } // hook add_rewrite_rules function into rewrite_rules_array add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

Я перехожу к wordpress, постоянным ссылкам и нажимаю «Сохранить» каждый раз, когда меняю эту функцию.

Во-вторых, я добавил URL-адрес запроса, который я использую в URL-адресе (также в functions.php):

 // represents for example the name of the product category function add_query_vars($aVars) { $aVars[] = "level"; $aVars[] = "city"; $aVars[] = "subject"; $aVars[] = "page"; return $aVars; } // hook add_query_vars function into query_vars add_filter('query_vars', 'add_query_vars'); 

В-третьих, я создал страницу с именем «экзамены» и плагин для получения вложений, которые работают, только если просматриваемая страница является экзаменом:

 // Hooks a function to a filter action, 'the_content' being the action... add_filter('the_content','me_get_listado'); // Callback function function me_get_listado($content) { // Checking if on post page. if ( is_page('exams') ) { // get the query vars if ( get_query_var( 'level' ) && get_query_var( 'city' ) && get_query_var( 'subject' ) ) { // get_post ($args) ... } return $content; // the new content } else { // else on blog page / home page etc, just return content as usual. return $content; } } 

Ну, это работает почти так, как ожидалось. Когда я иду

 http://www.example.com/exams/high-school/city-name/subject/math/ 

Я получаю аттестат «математики» от «city-name» для «старшей школы». Но когда я иду:

 http://www.example.com/exams/high-school/city-name/subject/math/page/1 

или:

 http://www.example.com/exams/high-school/city-name/subject/math/page/2 

Я перенаправлен на :

 http://www.example.com/exams/1 or http://www.example.com/exams/2 

Итак, ничего не работает.

Мне интересно, что не так с правилами перезаписи, которые я добавил? Или если я вмешиваюсь в логику WordPress?

ПРИМЕЧАНИЕ: «уровень», «город» и «субъект» являются обычными таксономиями.

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

Основываясь на комментариях @Milo и использовании плагина анализатора перезаписи, я нашел то, что я понимаю как конфликт в правилах перезаписи ?. Следующий URL:

 exams/high-school/city-name/subject/math/ 

соответствует следующим правилам

 Pattern: (.?.+?)/page/?([0-9]{1,})/?$ Subtitution: pagename: exams/high-school/city-name/subject/math paged: 1 Pattern: (.?.+?)(/[0-9]+)?/?$ Subtitution: pagename: exams/high-school/city-name/subject/math/page page: /1 Pattern: exams/([^/]+)/([^/]+)/subject/([^/]+)/?$ Subtitution: pagename: examns level: high-school city: city-name subject: math page: 1 

Последний – тот, который я пытаюсь создать. Я не эксперт в правилах переписывания, но я думаю, что второй активировался первым и создавал неправильное перенаправление на http://www.example.com/exams/1 or http://www.example.com/exams/2 .

Итак, я изменил второе правило:

 exams/([^/]+)/([^/]+)/subject/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]&pages=$matches[4] 

Обратите внимание на var как « страницы » во множественном числе. Он работает правильно. Однако плагин анализатора перезаписи не определяет мои правила. '?'

На самом деле, если я меняю страницу на «страницы» или « anyIwant » и регистрирую это имя varname и получаю ее в своем плагине:

 $args = array( 'post_type' => 'attachment', 'posts_per_page' => 2, 'paged' => ( get_query_var('whateverIwant') ? get_query_var('whateverIwant') : 1 ), 'orderby' => 'post_title', 'order' => 'ASC', 'post_status' =>'published' ); 

Также работайте !. Итак, первый набор правил, которые я создал, был в конфликте с чем-то внутри wordpress. У меня есть чему поучиться.

PS: Я буду принимать любой вопрос с твердым аргументом, решая эту проблему.