Intereting Posts
Как удалить только последнюю липкую запись из цикла добавить атрибут данных ко всем изображениям внутри the_content () Настройка параметров WordPress по умолчанию для WordPress показать короткие коды в редакторе изменить верхний баннер на определенной странице Неустранимая ошибка: вызов функции-члена add_rewrite_tag () для не-объекта в /wp-includes/taxonomy.php в строке 333 Можно использовать wordpress в качестве платформы публикации, но программно вставлять контент? Сообщения в боковой панели только по администратора получать случайных пользователей каждый раз на основе мета-ключа Как добавить nofollow в wp_nav_menu Пользовательский столбец редактирования столбца – категория, не отображающая Исключить текущую должность при получении связанной должности в пользовательском типе сообщений и таксономии Как запросить использование комбинации значений custom_field? Установка WPCLI Как я могу скрыть боковую панель от определенного сообщения?

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

Я пытаюсь изменить запрос, который запускается на странице администратора моего настраиваемого типа сообщений. Эта страница: /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 😉