Intereting Posts
get_the_category_list открывается в родительском окне Показывать подстраницы категории в пользовательском меню Условия использования Каталог назначения для потоковой передачи файлов не существует или недоступен для записи Вызов заголовка и нижнего колонтитула на странице входа Получать ежемесячные архивы для пользовательских типов сообщений Изменить тему, чтобы иметь фильтр портфеля Dropdown Плагин. Убедитесь, что jquery загружен на моей странице настроек плюс мой JS-файл. Являются ли Drop-ins вредными для сайта WordPress? Wrap Shortcodes и wpautop Как обходить многопользовательский блог 2 Доступ запрещен при входе в систему как администратор Пользовательская сортировка столбцов в таблице сообщений администратора WordPress Получить адрес электронной почты администратора с внешней страницы PHP Сохранять выражение регулярного выражения в WordPress DB с помощью API-интерфейсов API

Проверьте, что находится в 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)