Intereting Posts
Как создать URL для страниц / сообщений Как остановить WordPress от обновления метаданных Показывать пустые таксономии с помощью get_terms () Включить комментарии для ролей, CPT Таксономии по URL-адресу проверьте наличие короткого кода в сообщениях / страницах И виджетах И файлы шаблонов ограничить выбор пользовательских таксономий одним? Как обрезать описание в панели администратора для пользовательской таксономии Пользовательский WP_Query для текущей категории (в категории.php)? Избранные сообщения и цикл Налоговый термин как cpt slug в permalink – перенаправление не работает на дочернем cpt post Получить все сообщения WHERE custom_field – это значение LIKE Невозможно просмотреть сообщение, перейти на страницу 404. Пожалуйста помоги Пользовательский класс post, генерирует уникальный идентификатор от 1 до x в зависимости от количества сообщений? Получить категории из «Страница»

Удаление иерархических страниц в постоянной ссылке

У меня есть несколько страниц, настроенных в иерархии на моем сайте. В настоящее время страницы и URL-адреса сайта выглядят так.

Page name | Current URL | Preferred URL -----------------|---------------------------------------- Page AAA | /pageAAA/ | /pageAAA/ |-- Page BBB | /pageAAA/pageBBB/ | /pageBBB/ Page CCC | /pageCCC/ | /pageCCC/ Page DDD | /pageDDD/ | /pageDDD/ |-- Page EEE | /pageDDD/pageEEE/ | /pageEEE/ 

Я хотел бы удалить иерархию страниц из URL-адреса и вместо этого использовать имя страницы. В настоящее время это не проблема для «POSTS», поскольку я установил «Permalink» в /%postname%/

Изменить: причина, по которой я хочу это сделать; Я импортирую существующий сайт в wordpress. Существующий сайт имеет иерархию для страниц (меню), но плоскую структуру URL. Я не знаю, есть ли у этого дополнительные преимущества для SEO, но я хочу, чтобы структура URL была такой же, как и старый сайт

Мне было бы любопытно, сможет ли кто-нибудь найти лучшее решение для этого. Вот что я придумал:

 function wpse_91821_flatten_page_paths( $wp ) { if ( false !== strpos( $wp->matched_query, 'pagename=' ) && isset( $wp->query_vars['pagename'] ) && $wp->query_vars['pagename'] && false === strpos( $wp->query_vars['pagename'], '/' ) ) { if ( !get_page_by_path( $wp->query_vars['pagename'] ) ) { $page = get_posts( array( 'name' => $wp->query_vars['pagename'], 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 1 ) ); if ( $page && isset( $page[0] ) ) { $wp->query_vars['pagename'] = get_page_uri( $page[0]->ID ); $wp->request = $wp->query_vars['pagename']; } } } } add_action( 'parse_request', 'wpse_91821_flatten_page_paths', 5 ); 

То, что я здесь делаю, это перехват parse_request и если это запрос pagename, и у pagename нет «/», я проверяю, могу ли я найти сообщение с правильным именем. Если я нахожу страницу, я устанавливаю запрос var, который позволяет остальной части цепочки запросов действовать как обычно, потому что WordPress считает, что запрос является полным иерархическим.

Вы также хотите добавить фильтр в post_type_link чтобы ваши ссылки были сгенерированы правильно (в противном случае они будут оставаться иерархическими).

Я бы не изменил поведение страницы. Гораздо проще / безопаснее будет установить плоскую иерархию страниц (если вы действительно хотите, чтобы она была плоской).

Если вы хотите иметь иерархию в меню, вы все равно можете ее использовать – вы можете создать собственное меню и отобразить его с wp_nav_menu функции wp_nav_menu .