Intereting Posts
Функция, которая получает значение полей ACF перед сохранением Как добавить 3 недели к функции the_time () внутренняя привязка прокрутки с помощью wordpress Как включить или отключить разбиение на страницы в результатах поиска и списках категорий по ссылке? Можете ли вы создать пользовательскую страницу с контентом в уже определенном центре? Создание сайта с интенсивным использованием данных в WordPress Можно ли использовать вывод Shortcode в качестве значения атрибута HTML? как получить отрывок без тега p html из сообщения WordPress Сайт больше не работает после сбоя сервера – как его восстановить Автоматизировать импорт продукта с помощью WooCommerce? Сделать связанные сообщения отображаются сначала в результатах поиска Как подсчитать длину заголовка сообщения? Настройка template_redirect с использованием has_term, когда назначено значение NO Получите значение Metakey, сохраняя сообщение Переименование подпапки

Переписывать конечные точки и CPT – как использовать в плагине

Я работаю над правилами перезаписи для плагина, который использует конечную точку URL /modifier , чтобы создать query_var &modifier=1 чтобы обозначить, что он должен делать что-то еще.

Переписывание связано с URL-адресами, в которых /modifier добавляется в конец URL-адреса для публикации, страницы или настраиваемого типа сообщений.

Похоже, что добавление конечной точки перезаписи было бы идеальным, но в соответствии с API-интерфейсом конечных точек WordPress для входящего URL-адреса нужно было бы получить значение, например /modifier/1 , чтобы автоматически переписать в &modifier=1 через API конечных точек. Если после конечной точки нет значения, она решает &modifier= и не имеет значения при проверке, если она isset .

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

Переписывание пользовательских типов сообщений, добавленных вверху, также работает, когда тип сообщения явно жестко закодирован.

 add_filter('generate_rewrite_rules', 'my_rewrite'); function my_rewrite($wp_rewrite) { // rewrite rules for custom post type "specific-type" $cpt_rules = array( 'specific-type-slug/([^/]+)/modifier' => 'index.php?specific-type='. $wp_rewrite->preg_index(1) .'&modifier=1' ); $wp_rewrite->rules = $cpt_rules + $wp_rewrite->rules; } 

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

Итак, вот цикл, который я пробовал. Очевидно, что это не работает, типы сообщений еще не настроены.

 add_filter('generate_rewrite_rules', 'my_rewrite'); function my_rewrite($wp_rewrite) { global $wp_post_types; $types = get_post_types( array( '_builtin' => false ) ); // get the registered data about each post type with get_post_type_object foreach( $types as $type ) { $cpt_rules = ''; $typeobj = get_post_type_object( $type ); if( isset( $typeobj->rewrite->slug ) ) { $slug = $typeobj->rewrite->slug; $cpt_rules = array( $slug.'/([^/]+)/modifier' => 'index.php?'.$type.'='. $wp_rewrite->preg_index(1) .'&modifier=1' ); $wp_rewrite->rules = $cpt_rules + $wp_rewrite->rules; } } } 

Что-то подсказывает мне, что использование класса плагинов может быть способом решить эту проблему, но я не понимаю, как это сделать.

Solutions Collecting From Web of "Переписывать конечные точки и CPT – как использовать в плагине"

Извиняюсь, если это кажется слишком очевидным для ответа, я просто получаю голову от перезаписи htaccess в wordpress.

Самый элегантный способ проанализировать модификатор с помощью URL-адреса, похожего на это, заключается в том, чтобы добавить конечную точку перезаписи и просто проверить ее в URL-адресе позже, если вы не хотите передавать значение.

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

 add_action( 'init', 'wp_modifier_endpoint' ); function wp_modifier_endpoint() { add_rewrite_endpoint( 'modifier', EP_PERMALINK | EP_PAGES ); } 

В функции, создающей ссылки /modifier , также нет необходимости добавлять значение после /modifier/value , если только вам не нужно значение. Моя предыдущая техника проверяет, существует ли конечная точка (как query_var), но вы можете просто проверить строку конечной точки в URL-адресе с strrpos функции php strrpos .

 $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; $endpoint = substr( $url, 9 ); /* number of chars in string "/modifier" */ if( false !== strpos( $endpoint, '/modifier' ) ) { /* do something; */ } 

Обновление: на комментарий Милоу ниже, лучше проверить modifier является ли modifier array_key query_vars – это кажется более надежным и легко расширяемым, если вы хотите проверить наличие нескольких ключей.

 global $wp_query; if( array_key_exists( 'modifier' , $wp_query->query_vars ) ) { /* do your thing; */ }