Intereting Posts
CSS загружается только в бэкэнд Как я могу открыть свою административную панель для всех? Содержимое домашней страницы зависит от пользовательских значений полей (устанавливается автоматически), как мне получить домашнюю страницу для обновления без ручной страницы обновления? Почему авторам разрешено принимать комментарии к своим сообщениям? Как отменить привилегии? Кнопка загрузки для Featured Image в каждом посте – автоматически Как использовать страницу на главной странице, почему работает / page / ###? Удалить ссылку More register_post_type exclude_from_search аргумент не работает Нет доступа к глобальным переменным? Страница таксономии приводит к 404 страницам в разбивке на страницы wp_enqueue_script вне файла functions.php? Как создать пользовательский экран для архива woocommerce и страниц категории продуктов? Пользовательский тип URL-адреса переписки Добавить поле ввода в простой форме контактной формы (smcf) плагин как создавать сообщения о выходе сайта с отображаемым URL-адресом назначения

URL Переписывание, если это один пост / перенаправляющий пост-пост тип

У меня есть уникальный вопрос, который я обволакиваю вокруг себя. Google наказывает нас дублированным контентом, потому что вы можете получить доступ к нашим отдельным сообщениям в блогах, перейдя к:

http://www.domain.com/blog/the-post-slug 

так же как :

 http://www.domain.com/the-post-slug 

Мы действительно хотим:

 http://www.domain.com/blog/the-post-slug 

и если пользователь или googlebot происходит с goto:

 http://www.domain.com/the-post-slug 

перенаправить их на:

 http://www.domain.com/blog/the-post-slug 

Я знаю, что это особая ситуация, но у нас есть много настраиваемых типов сообщений в нашей системе. Поэтому наша структура выглядит так.

 http://www.domain.com/food/pizza http://www.domain.com/ice-cream/strawberry http://www.domain.com/fireworks/bottle-rockets 

В идеале, что я хотел бы сделать, это найти какой-то фильтр, который логически проверяет, является ли post_type сообщение и перенаправление:

 http://www.domain.com/the-post-slug 

в

 http://www.domain.com/blog/post-slug 

Я попытался изменить register_post_type для объекта post и добавить with_front => false и добавить блог в slug, но это не работает.

Я смог добавить / blog /% postname% / в структуру permalink, и у меня была возможность иметь приличную структуру, которая работала, но я застрял в таксономиях. Когда я пошел на страницу таксономии, мне пришлось перейти:

 http://www.domain.com/blog/the-taxonomy/flavors 

а также:

 http://www.domain.com/the-taxonomy/flavors 

давал мне 404. Таким образом, даже если я найду способ сделать таксономии работать там, где я могу:

 http://www.domain.com/the-taxonomy/flavors 

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

Я знаю, что это много, но мой мозг не может идти дальше .. lol

ТИА!

Любое понимание этого?

Прежде всего установите для своей структуры /%postname% ссылку /%postname% .

После этого добавьте правило перезаписи, чтобы переписать весь запрос, например example.com/blog/postname в соответствующий запрос:

 add_action('init', 'blog_front'); function blog_front() { add_rewrite_rule('^blog/([^/]+)/?','index.php?name=$matches[1]','top'); } 

Теперь вам нужно предотвратить дублирование URL-адреса, отправив 301 переадресацию при запросе example.com/postname :

 add_action('template_redirect', 'say_hello_to_google'); function say_hello_to_google() { if ( is_main_query() && is_single() && ( empty( get_post_type() ) || (get_post_type() === 'post') ) ) { if ( strpos( trim( add_query_arg( array() ), '/' ), 'blog' ) !== 0 ) { global $post; $url = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) ); wp_safe_redirect( $url, 301 ); exit(); } } } 

Наконец, вы должны создать постоянную ссылку для своего сообщения с «blog /» впереди:

 add_filter('the_permalink', 'post_permalink_w_blog'); function post_permalink_w_blog( $link ) { global $post; if ( $post->post_type === 'post' ) { $link = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) ); } return $link; } 

Последняя вещь – это перезаписать правила и … тест.


редактировать

Как отметил @Milo в комментариях, все это можно избежать, установив структуру permalink в /blog/%postname% а затем используйте param 'rewrite' с 'with_front' для false для всех CPT и всех таксономий.

 'rewrite' => array( 'with_front' => false ) 

Проблема в том, что в большинстве случаев в среднем WP-установке с большим количеством CPT и таксономий есть вероятность, что некоторые из них зарегистрированы через сторонние плагины … в этом случае, если эти плагины регистрируют CPT / таксономии, не использующие 'with_front' => false , это проблема, и решение, опубликованное выше, является последним шансом.

В зависимости от этого я должен сказать, что стандартные категории и теги регистрируются с помощью «with_front» = true, поэтому, используя этот альтернативный метод, стандартная категория и тег должны быть перерегистрированы с параметром with_front, установленным на false .