Intereting Posts

Разве это не должно быть легко ?! Пользовательский тип сообщения / пользовательская таксономия постоянная ссылка

Так что это сводит меня с ума. Я потратил несколько дней, пытаясь исправить это, и я не могу понять, почему это так сложно, так как это очень распространенная структура постоянных ссылок!

Я просмотрел сотни ответов и сообщений, и ни один из них, похоже, не решил проблему.

Я просто хочу эту структуру:

mysite.com/custom-post-type/custom-taxonomy-term/post-name 

Поэтому я добиваюсь:

 mysite.com/literature - all literature posts mysite.com/literature/fiction - all literature posts with 'fiction' term mysite.com/literature/fiction/mybook - the post 

Каждый раз, когда я пытаюсь что-то получить, я получаю 404 ошибки, или pagnination не работает.

Я не понимаю, почему это так сложно!

Любая помощь действительно ценится!

спасибо

================================================== ==== ================== ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ==================

В настоящее время я регистрирую тип публикации и таксономию следующим образом:

 register_post_type('literature',$args); 'rewrite' => array('slug' => 'literature/books','with_front' => false), register_taxonomy('literature_category',array('literature'), array( 'rewrite' => array( 'slug' => 'literature','with_front' => false ), 

Если я зарегистрирую как «литературу», я получаю 404 на странице mysite.com/literature, но это отображает мою постоянную ссылку как: mysite.com/literature/books/mybook

Следуя советам по этому вопросу – пользовательские типы сообщений, таксономии и постоянные ссылки

Я добавил это к моим функциям:

 function filter_post_type_link($link, $post) { if ($post->post_type != 'literature') return $link; if ($cats = get_the_terms($post->ID, 'literature_category')) $link = str_replace('%literature_category%', array_pop($cats)->slug, $link); return $link; } add_filter('post_type_link', 'filter_post_type_link', 10, 2); 

И изменил мой тип сообщения на 'slug' => 'literature/%literature_category%' И изменил мою таксономию на 'slug' => 'literature'

Это отлично работает, за исключением того, что на mysite.com/literature разбиение на страницы не работает, поэтому я получаю ошибку 404 на следующем URL-адресе:

mysite.com/literature/page/2/

Следуйте советам по этому вопросу, как и вы, но добавьте это в свой код:

 add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' ); function fix_literature_category_pagination( $wp_rewrite ) { unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']); $wp_rewrite->rules = array( 'literature/?$' => $wp_rewrite->index . '?post_type=literature', 'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ), 'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ), ) + $wp_rewrite->rules; } эта add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' ); function fix_literature_category_pagination( $wp_rewrite ) { unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']); $wp_rewrite->rules = array( 'literature/?$' => $wp_rewrite->index . '?post_type=literature', 'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ), 'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ), ) + $wp_rewrite->rules; } не add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' ); function fix_literature_category_pagination( $wp_rewrite ) { unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']); $wp_rewrite->rules = array( 'literature/?$' => $wp_rewrite->index . '?post_type=literature', 'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ), 'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ), ) + $wp_rewrite->rules; } 

И наконец, перейдите в «Настройки»> «Постоянная ссылка» и нажмите «Сохранить». Если он все еще не работает, сохраните ваши постоянные ссылки снова. Иногда мне кажется, что вам нужно спасать их дважды, но кто знает. В любом случае, дайте мне знать, как вы разобрались. Обратите внимание, что стандартный ответ № 1 «Компьютерная наука»: « Это работает для меня … 😉

Из земли ТМИ …

Для справки, причина, по которой страницы не работают по умолчанию, заключается в том, что WordPress ставит правило перезаписи для литературы /% literature_category% /% book% /% page%, что делает общий смысл, если вы думаете об этом. Поэтому ваши постоянные константы по умолчанию имеют эти конкурирующие правила в следующем порядке:

 [literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3] [literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2] 

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

Интересный факт: если у вас когда-либо была «книга», озаглавленная «страница», и она имеет несколько страниц, этот порядок будет конфликтовать, а последующие страницы не будут работать!