Intereting Posts
WP rest api v2 фильтр сообщений по 'search' и 'category_name' не работает Попытка отправить почту со страницы темы Как создать пользователя WP вне WordPress и автоматического входа? Сохранение эскизов WordPress в подкаталоге Что происходит, когда wp_cron деактивируется в WordPress? Предложить плагин для mp3-плеера для веб-сайта группы? Изменить аргументы запроса (фильтр) с помощью jQuery / Ajax или PHP? WordPress галерея shortag Запрос MySQL для извлечения категории из wp_posts Короткие коды не всегда загружаются / обновляются должным образом Смешивание твитов с сообщениями Пользовательская надпись на слайдере WP Nivo Скрытие расширенного пользовательского поля на основе выбора таксономии функция установить постоянную ссылку на /% postname% / при активации темы На странице индекса и случайных сообщениях требуется принудительное обновление, чтобы показать новый контент.

Как проверить, находится ли я в архиве пользовательского типа сообщений в области администрирования

Я пытаюсь изменить запрос, который запускается на странице администратора моего настраиваемого типа сообщений. Эта страница: /wp-admin/edit.php?post_type=my_venue. Как правило, я должен использовать is_admin() && is_post_type_archive('my_venue') чтобы проверить, не is_admin() && is_post_type_archive('my_venue') ли я на правильную страницу, прежде чем изменять запрос. Тем не менее, я зарегистрировал свой тип сообщения с 'archive' => false так что теперь is_post_type_archive() всегда возвращает false.

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

 register_post_type( 'my_venue', [ 'has_archive' => false, ] ); add_action('pre_get_posts', 'my_venue_filters'); function my_venue_filters($query) { if (is_admin() && is_post_type_archive('my_venue')) { if (!empty($_GET['my_venue_ids'])) { $query->set('post__in', $_GET['my_venue_ids']); } } } 

Solutions Collecting From Web of "Как проверить, находится ли я в архиве пользовательского типа сообщений в области администрирования"

Вот три возможности, основанные на файле /wp-admin/admin.php :

Способ №1

Доступны глобальные $pagenow и $typenow :

  global $pagenow, $typenow; if( 'my_venue' === $typenow && 'edit.php' === $pagenow ) { // ... } 

Способ №2

Тогда есть текущий экран, также установленный в файле admin.php с помощью set_current_screen() ;

  $screen = get_current_screen(); if( is_a( $screen, '\WP_Screen') && 'edit-myvenue' === $screen->id ); { // ... } 

где мы используем свойство id объекта \WP_Screen .

Если мы \WP_Screen класс \WP_Screen , мы найдем хук current_screen , который может быть использован вместо этого:

 add_action( 'current_screen', function( \WP_Screen $s ) { if( 'edit-myvenue' === $s->id ) { // ... } } ); 

Способ № 3

Тогда есть крюк load-edit.php , доступный до крюка pre_get_posts :

 add_action( 'load-edit.php', function() { // Check for the post type here. } ); 

В этом случае общий крюк – load-$pagenow . Здесь нет необходимости is_admin() .

Заметка

Если вы нацеливаете основной запрос, вам следует добавить $query->is_main_query() а также в ваш pre_get_posts вызов pre_get_posts .

Также не забудьте проверить часть $_GET['my_venue_ids'] , она может даже не существовать в массиве $_GET .

Здесь ничего нового! Я думаю, что мы все видели такие методы, так или иначе, используемые во многих вопросах и ответах здесь, на WPSE 😉