Проверьте, что находится в URI (пост, архив и т. Д.)

Есть ли способ или функция, где вы можете перейти в пользовательский uri, например

uri-part/uri-part2 

и мы можем проверить, что находится по этому адресу?

Я хочу проверить, содержит ли uri сообщение, страницу, архив, категорию, тег, другую таксономию, пользовательский архив типа сообщения или пользовательский?

Solutions Collecting From Web of "Проверьте, что находится в URI (пост, архив и т. Д.)"

Получить «тип» запроса из URL: Предыдущие предложения

Как отмечено в связанном ответе, есть url_to_postid() . Это просто даст вам идентификатор объекта в этой конечной точке. Короче говоря, эта функция вернет только идентификатор, а затем запустит новый \WP_Query чтобы получить объект типа post из базы данных и, наконец, вернуть URl – если есть какой-либо объект, и если он является чем-то вроде is_singular (сообщение, страница ). Так что эта функция не очень полезна.

Как упоминалось в комментариях, есть также:

 $object = get_page_by_path( 'path/endpoint', OBJECT|ARRAY_N|ARRAY_A, [ 'post', 'page', 'custom_post_type', '…' ] ); 

который выполнит следующий запрос:

 $sql = " SELECT ID, post_name, post_parent, post_type FROM $wpdb->posts WHERE post_name IN ( $in_string ) AND post_type IN ( $post_types_string ) "; 

И снова: Не полезно.

WordPress Url to Query: за кулисами

Вот как выглядит процесс в WordPress

 ------- -------------- ------------- | URl | --> | Query Vars | --> | \WP_Query | ------- -------------- ------------- 

Как уже упоминалось @TheDeadMedic, есть WP::parse_request() который выполняет все магию:

  1. Получить все запросы vars
  2. Получить правила перезаписи
  3. Поиск совпадений между запросами и правилами перезаписи
  4. Запуск зарегистрированных переменных запроса через белый список

Выполняя все это, метод фактически заполняет ассоциативный массив: WP::$query_vars :

 WP::$query_vars = [ // $_POST or $_GET or query string variables `foo=bar&baz=dragons` // `custom` is not the actual name. The key will be named as the var. 'custom' => [], // An array of `$postTypeObject->query_var`s // Only those which are publicly queryable 'post_type' => [], // Only publicly queryable taxonomies 'taxonomy' => [], 'term' => [], 'name' => [], 'error' => [], // … ]; 

В конце этого метода у вас есть два фильтра. Первый:

 $this->query_vars = apply_filters( 'request', $this->query_vars ); 

где у вас есть вышеупомянутый массив. Теперь вы можете начать определять, какой ответ отвечает вашим URl:

 add_filter( 'request', function( Array $vars ) { // do whatever you need to do, depending on $vars in here return $vars; } ); 

Примеры некоторых var_dump( $vars ) :

  • Архив на основе даты:

     array (size=2) 'year' => string '2016' (length=4) 'monthnum' => string '04' (length=2) 
  • Архив рубрики:

     array (size=1) 'category_name' => string 'alignment' (length=9) 
  • Иерархическая таксономия Ребенок:

     array (size=1) 'category_name' => string 'parent-category/child-category-05' (length=33) 
  • Однострочное сообщение – липкое – такое же, как и по умолчанию:

     array (size=2) 'page' => string '' (length=0) 'name' => string 'sticky' (length=6)