Intereting Posts
Как измерить установку WordPress? Почему Featured Image не отображается в моем настраиваемом типе сообщений? Запретить отображение биографической страницы автора в результатах поиска Запрос, чтобы получить всех пользователей от wp_users Без соответствия user_id В wp_usermeta Кнопки Share на нижнем колонтитуле статьи Варианты вариаций для WooCommerce – слишком много вариантов Если я переименую плагин (в его основном файле php), все равно получаю уведомления об обновлениях? Как изменить тип сообщения по умолчанию / сообщение на носитель или вложения Исключить post_type из admin comments_list Запросить пользователей для загрузки аватара при регистрации Пользовательские поля подсказки поля обмена метаданных всплывают HTML добавлен в редактор при удалении коротких кодов в браузере Chrome Значение cookie не может быть прочитано, пока я не войду в администратор WP Как хранить глобальную информацию, такую ​​как номер телефона, чтобы она была доступна для редактирования через CMS? Где сохранить общие библиотеки?

Rewrite rule, чтобы преффицировать две переменные $ _GET, в то время как в новой конечной точке со страницы

Я пытаюсь создать правило permalink, которое находится на нескольких уровнях.

У меня есть основная страница /page-slug/ – я добавляю к ней новую конечную точку: /page-slug/my-endpoint/ – отсюда мне нужно вложить один id и одну строку, которая содержит переменные $_GET , такие как /page-slug/my-endpoint/?some_id=123&some_string=string которая должна стать: /page-slug/my-endpoint/123/string/

Я получил все запросы, которые были успешно зарегистрированы, и я могу их захватить для использования в моих методах (например, если я делаю var_dump( $wp_query->query_vars ) они будут отображаться там, где установлено через $_GET ).

То, что я не могу заставить работать, – это правило перезаписи, чтобы превратить URL-адрес в довольно постоянную ссылку (этот фрагмент запускается при запуске init ):

  foreach ( $this->query_vars as $key => $var ) { add_rewrite_endpoint( $var, EP_PERMALINK | EP_PAGES, $var ); if ( 'my-endpoint' == $key ) { add_rewrite_tag( '%some_id%', '([^&]+)' ); add_rewrite_tag( '%some_string%', '([^&]+)' ); $page_id = get_some_page_id(); $page_slug = get_post( $page_id )->post_name; // eg /page-slug/my-endpoint/123/some-string/ add_rewrite_rule( "{$page_slug}/{$var}/([^/]*)/([^/]*)/?$", 'index.php?page_id=' . $page_id . '&some_id=$matches[1]&some_string=$matches[2]', 'top' ); } } 

Я тестировал регулярное выражение и не выглядел неправильно, он ловил то, что мне нужно ( 123 и some-string ).

До 'page-slug/' а также 'page-slug/my-query-var/ (2 уровня в глубину) он работает отлично, это два тега перезаписи, которые не работают при использовании в довольно постоянной структуре ссылок.

Я попытался с https://wordpress.org/plugins/monkeyman-rewrite-analyzer/, и там появились правила, но я не уверен в их интерпретации

Solutions Collecting From Web of "Rewrite rule, чтобы преффицировать две переменные $ _GET, в то время как в новой конечной точке со страницы"

Я думаю, что вы используете конечные точки неправильно. Когда создается endopoint, создается новое правило перезаписи с использованием запроса var с тем же именем конечной точки; его значение берется из строки, следующей за определением конечной точки. Итак, если вы зарегистрируете «my-endpoint» и создадите этот URL-адрес:

 /page-slug/my-endpoint/123/some-string 

Конечная точка передается как my-endpoint=123/some-string .

Насколько я понимаю из вашего кода, вам не нужен запрос my-endpoint var, поэтому вам не нужно его регистрировать; или вы можете зарегистрировать его с false значением для аргумента var запроса (этот аргумент в настоящее время не документирован в кодексе, а существует в исходном коде ):

 add_rewrite_endpoint( $var, EP_PERMALINK | EP_PAGES, false ); 

Или, если вы хотите, чтобы конечная точка была только на страницах:

 add_rewrite_endpoint( $var, EP_PAGES, false ); 

Кроме того, вы проверяете 'my-endpoint' == $key buth, затем включаете $var качестве имени конечной точки и как часть URL, а не $key .

Не зная, что такое $this->query_vars и get_some_page_id() , я не могу точно проверить ваш код, но это должно работать:

 foreach ( $this->query_vars as $key => $var ) { if ( 'my-endpoint' == $key ) { add_rewrite_tag( '%some_id%', '([^&]+)' ); add_rewrite_tag( '%some_string%', '([^&]+)' ); $page_id = get_some_page_id(); $page_slug = get_post( $page_id )->post_name; // eg /page-slug/my-endpoint/123/some-string/ // $key is equal to my-endpoint here because of the previous check add_rewrite_rule( "^{$page_slug}/{$key}/([^/]*)/([^/]*)/?$", 'index.php?page_id=' . $page_id . '&some_id=$matches[1]&some_string=$matches[2]', 'top' ); } } 

Примечание . Не забудьте обновить правила перезаписи перед тестированием этого кода.