как узнать, находится ли администратор на странице редактирования страницы или записи
Я использую это после того, как проверил, является ли пользователь администратором
if ( isset($_GET['action']) && $_GET['action'] === 'edit' )
есть ли способ лучше?

Вы можете использовать функцию get_current_screen
для определения текущего экрана.
$screen = get_current_screen();
if ( $screen->parent_base == 'edit' ) {
echo 'это экран редактирования';
}
Не могу точно сказать, что этот способ всегда лучше — всё зависит от конкретной задачи, но лично я предпочитаю использовать именно его. Главное преимущество этого метода в том, что вы получаете доступ к большему количеству информации и, следовательно, можете делать более тонкие и разнообразные проверки. Просто взгляните на документацию, чтобы понять, о чём я говорю.
Эту функцию следует использовать в более поздних хуках, как указано в Кодексе:
Функция возвращает
null
, если вызывается в хукеadmin_init
. Её можно безопасно использовать в более поздних хуках, напримерcurrent_screen
.

Это будет верно и для списка записей и страниц, верно? Например, mywebsite.com/wp-admin/edit.php?post_status=draft&post_type=post

@Nathan Верно, это так. Как сказано в ответе, правильный подход зависит от конкретного случая использования. Это определенно не лучший способ для всех ситуаций, но в некоторых случаях он хорош или даже оптимален.

Примечание: Прямой вызов get_current_screen() во многих случаях может вызвать критическую ошибку. Обязательно оберните его в функцию и вызывайте через соответствующий хук.

Условие $screen->is_block_editor == 1 сработало для меня, чтобы проверить страницу редактирования. parent_base оказался пустым.

parent_base
у меня всегда NULL как в списке записей, так и при редактировании отдельной записи. Вместо этого я использовал if (get_current_screen()->base === 'post' && get_current_screen()->post_type === 'my_post_type')
. Это для админ-страницы редактирования отдельной записи. Для экрана edit.php (админ-страницы со списком записей) используйте edit
вместо post
.

редактирование: читайте комментарии для возможных недочетов.
Вы можете использовать глобальную переменную $pagenow
global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {
// редактирование записи блога
}
if ($pagenow == 'profile.php') {
// редактирование страницы профиля пользователя
}

Я обнаружил, что это работает, за исключением $_GET['post_type']
. Однако вместо этого мне помог get_post_type()
.

$_GET['post_type']
устанавливается только на странице post-new.php
при создании новой записи, но не на post.php
, где происходит редактирование записи. get_post_type()
будет работать для post.php, потому что запись уже существует и имеет тип записи, но я не уверен, что он сработает на post-new.php. Ответ Frank'а лучше, так как он работает в обоих случаях.

нет, как насчёт post-new.php? названия новых страниц меняются в каждой мажорной версии, это ненадёжно.

- Используйте 'get_current_screen', но предварительно убедитесь, что функция существует.
- Как говорится в кодексе "Эта функция определена на большинстве страниц админки, но не на всех."
- Кстати, это также отфильтровывает обычные (видимые пользователям) страницы (перечитайте это предложение, с акцентом на админ-страницы).
Скорее всего, следующее, что вам нужно выяснить - находитесь ли вы на странице или записи...
// Удаление ненужных метабоксов записей function FRANK_TWEAKS_current_screen() { // "Эта функция определена на большинстве страниц админки, но не на всех." if ( function_exists('get_current_screen')) { $pt = get_current_screen()->post_type; if ( $pt != 'post' && $pt != 'page') return; remove_meta_box( 'authordiv',$pt ,'normal' ); // Метабокс автора remove_meta_box( 'commentstatusdiv',$pt ,'normal' ); // Метабокс статуса комментариев remove_meta_box( 'commentsdiv',$pt ,'normal' ); // Метабокс комментариев remove_meta_box( 'postcustom',$pt ,'normal' ); // Метабокс произвольных полей remove_meta_box( 'postexcerpt',$pt ,'normal' ); // Метабокс цитаты remove_meta_box( 'revisionsdiv',$pt ,'normal' ); // Метабокс ревизий remove_meta_box( 'slugdiv',$pt ,'normal' ); // Метабокс слага remove_meta_box( 'trackbacksdiv',$pt ,'normal' ); // Метабокс трекбэков } } add_action( 'current_screen', 'FRANK_TWEAKS_current_screen' );
