Intereting Posts
Тема WordPress, которая возвращает все сообщения как объект JSON? Запросить настраиваемые типы сообщений и определенную страницу? Добавить мета-поле после публикации публикации Добавить код сразу после публикации Пользовательский тип сообщения, постоянные ссылки и разбивка на страницы, неправильное Заменяйте страницы категорий на пользовательские страницы на основе уровня категории Условная логика на основе пользовательской таксономии Скрыть защищенные паролем сообщения Удаление одной цитаты в str_replace для функции Nav Объединение функциональности плагина в тему Как показать сообщение «Комментарии закрыты» на сообщениях, где комментарии были закрыты? Функция поиска jQuery не работает в WordPress, но выполняется локально (скрипка) Таблица стилей администратора WordPress Загружает сообщения разного года через вызов AJAX Японские символы не отображаются должным образом

Добавление URL-адреса перезаписи для базы + детей отдельно

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

add_rewrite_rule('my-url/?([^/]*)', 'index.php?my-var=$matches[1]', 'top'); 

Это отлично работает. Но когда я пытаюсь переписать базу:

 add_rewrite_rule('my-url/?', 'index.php?my-var=main', 'top'); 

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

Есть ли способ сделать второе правило строгим, чтобы оно было эффективным только в том случае, если после «my-url /» нет НИЧЕГО? Таким образом, я должен перенести его первым, и все должно работать.

Я обыскал сеть и не нашел решения. Возможно, это мои условия, но я ломаю себя на этом. Я ненавижу регулярное выражение! Стреляйте, если это просто!

Solutions Collecting From Web of "Добавление URL-адреса перезаписи для базы + детей отдельно"

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

 add_rewrite_rule('my-url/([^/]*)/?$', 'index.php?my-var=$matches[1]', 'top'); add_rewrite_rule('my-url/?$', 'index.php?my-var=main', 'top'); 

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

Почему изменился синтаксис? Чтобы разрешить правильную обработку дополнительной строки запроса. Например, http://foo.bar/my-url/?my-var=foo и http://foo.bar/my-url/foo/?bar=1 должны быть получены.

Кроме того: перенаправление шаблона, если вы хотите применить свои правила перезаписи для запроса строковых запросов, таких как http://foo.bar/my-url/?my-var=foo :

 function custom_template_redirect(){ preg_match('/(\?|&)my-var=/', $_SERVER['REQUEST_URI'], $matches); if ( get_query_var( 'my-var', false ) !== false && !empty($matches) && !is_admin() ) { wp_redirect( home_url( '/my-url/'.(get_query_var( 'my-var' )?get_query_var( 'my-var' ).'/':'') ) ); exit(); } } add_action( 'template_redirect', 'custom_template_redirect' ); 

Это должно работать для обоих, небольшие корректировки для каждого шаблона регулярного выражения –

 add_rewrite_rule('my-url/([^/]+)/?$', 'index.php?my-var=$matches[1]', 'top'); add_rewrite_rule('my-url/?$', 'index.php?my-var=main', 'top');