как узнать, находится ли администратор на странице редактирования страницы или записи
Я использую это после того, как проверил, является ли пользователь администратором
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
@Nathan Верно, это так. Как сказано в ответе, правильный подход зависит от конкретного случая использования. Это определенно не лучший способ для всех ситуаций, но в некоторых случаях он хорош или даже оптимален.
Nicolai Grossherr
Примечание: Прямой вызов get_current_screen() во многих случаях может вызвать критическую ошибку. Обязательно оберните его в функцию и вызывайте через соответствующий хук.
squarecandy
Условие $screen->is_block_editor == 1 сработало для меня, чтобы проверить страницу редактирования. parent_base оказался пустым.
Floris
parent_base у меня всегда NULL как в списке записей, так и при редактировании отдельной записи. Вместо этого я использовал if (get_current_screen()->base === 'post' && get_current_screen()->post_type === 'my_post_type'). Это для админ-страницы редактирования отдельной записи. Для экрана edit.php (админ-страницы со списком записей) используйте edit вместо post.
Denis P
редактирование: читайте комментарии для возможных недочетов.
Вы можете использовать глобальную переменную $pagenow
global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {
// редактирование записи блога
}
if ($pagenow == 'profile.php') {
// редактирование страницы профиля пользователя
}
Я обнаружил, что это работает, за исключением $_GET['post_type']. Однако вместо этого мне помог get_post_type().
Ashe Abbott DiBlasi
$_GET['post_type'] устанавливается только на странице post-new.php при создании новой записи, но не на post.php, где происходит редактирование записи. get_post_type() будет работать для post.php, потому что запись уже существует и имеет тип записи, но я не уверен, что он сработает на post-new.php. Ответ Frank'а лучше, так как он работает в обоих случаях.
Jacob Peattie
нет, как насчёт post-new.php? названия новых страниц меняются в каждой мажорной версии, это ненадёжно.
scavenger
- Используйте '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' );