Intereting Posts
Как я могу получить страницу или почтовый язык, когда я использую wpml? foreach repeat html структура после каждого n-го для прикрепления Эффективное управление огромным количеством блогов с учетом ограничений на стороне сервера Интегрировать API-интерфейс фидов продуктов в Woocommerce Как я могу добавить программно настраиваемые термины таксономии к сообщению пользовательского типа при сохранении сообщений? Как реализовать комментарии по отдельным полям в WordPress? Правильный способ проверки nonce (безопасность) с использованием старого API-интерфейсов опций Разрешить роли автора публиковать один тип сообщения, а не другой создать объединенный запрос, например UNION, и использовать значения тега post post, такие как параметры Как получить настраиваемое поле изображения определенного идентификатора сообщения nowplaying.include.php не отображает результаты Как получить доступ к PostgreSQL с помощью WPDB? get_post_permalink () и пользовательская перестановка ссылок Получение определенных изображений из медиа-библиотеки get_term_by работает, но get_terms нет?

Если страница не существует, укажите другую страницу?

Я создаю веб-сайт для клиента, где они хотят несколько разных разделов, например:

Regular Site (/) - Section 1 (/section_1/) - Section 2 (/section_2/) ... - Section X 

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

Предположим, что пользователь посещает domain.com/section_1/features . Если существует страница с /section_1/features , я хотел бы отобразить это; однако, если страница не существует, я бы хотел, чтобы она отображала /features без перенаправления или изменения URL-адреса в адресной строке. Он должен быть полностью бесшовным и за кулисами.

Я думаю, мне нужно добавить функцию к parse_request , что-то вроде:

 function check_section_page( &$wp ) { $requested_path = $wp->request; if ( ! get_page_by_path($requested_path) ) { $new_requested_path = preg_replace("/^(.*?)\//", "", $requested_path); // do something here to make it read $new_requested_path } } add_filter("parse_request", "check_section_page"); 

Он корректно выполняет функцию, и эхо-запрос $ new_requested_path показывает, что у него есть новая требуемая страница. Я сражался с этим около двух часов, и моя голова была сделана. Помогите?

Solutions Collecting From Web of "Если страница не существует, укажите другую страницу?"

Мне удалось решить проблему. Вот как это сделать, если кому-либо еще понадобится это решение.

** Обновлено 10 марта 3:30 утра EST **

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

 function check_section_page( $posts ) { if (is_admin()) { return $posts; } global $wp, $wp_query; $requested_path = $wp->request; if ( $requested_path == "" ) { return $posts; } preg_match("/^([az\-]+)\//", $requested_path, $matches); if ( count($matches) > 1 ) { if ( get_page_by_path( $matches[1] ) ) { $section = $matches[1]; } } $wp_query->set("saleslink_section", $section); $this_page = get_page_by_path( $requested_path ); $new_requested_path = preg_replace("/^(.*?)\//", "", $requested_path); $requested_page = get_page_by_path($new_requested_path); if ( $requested_page->ID and ! $this_page->ID ) { $posts = NULL; $posts[] = $requested_page; $wp_query->is_page = true; $wp_query->is_singular = true; $wp_query->is_home = false; $wp_query->is_archive = false; $wp_query->is_category = false; unset($wp_query->query["error"]); $wp_query->query_vars["error"]=""; $wp_query->is_404=false; } return $posts; } remove_filter('template_redirect','redirect_canonical'); add_filter("the_posts", "check_section_page"); с function check_section_page( $posts ) { if (is_admin()) { return $posts; } global $wp, $wp_query; $requested_path = $wp->request; if ( $requested_path == "" ) { return $posts; } preg_match("/^([az\-]+)\//", $requested_path, $matches); if ( count($matches) > 1 ) { if ( get_page_by_path( $matches[1] ) ) { $section = $matches[1]; } } $wp_query->set("saleslink_section", $section); $this_page = get_page_by_path( $requested_path ); $new_requested_path = preg_replace("/^(.*?)\//", "", $requested_path); $requested_page = get_page_by_path($new_requested_path); if ( $requested_page->ID and ! $this_page->ID ) { $posts = NULL; $posts[] = $requested_page; $wp_query->is_page = true; $wp_query->is_singular = true; $wp_query->is_home = false; $wp_query->is_archive = false; $wp_query->is_category = false; unset($wp_query->query["error"]); $wp_query->query_vars["error"]=""; $wp_query->is_404=false; } return $posts; } remove_filter('template_redirect','redirect_canonical'); add_filter("the_posts", "check_section_page"); 

Линия remove_filter отключит поведение WordPress при автоматическом remove_filter -угадывании-перенаправлении, когда запрашиваемый URL-адрес не существует и аналогичный, и перенаправляет его на аналогичный URL-адрес.