как узнать, находится ли администратор на странице или посте редактирования [дубликат]

Вопрос или проблема

Я использую это после того, как проверю, является ли пользователь администратором

   if ( isset($_GET['action'])  && $_GET['action'] === 'edit' )

Есть ли лучший способ?

Вы можете использовать get_current_screen, чтобы определить это.

$screen = get_current_screen();
if ( $screen->parent_base == 'edit' ) {
    echo 'экран редактирования';
}

Не знаю, могу ли я точно сказать, что это всегда лучше, это зависит от того, что необходимо, но, вероятно, это то, как я бы это сделал. Большое преимущество этого метода в том, что вы получаете доступ к большему объему информации и, следовательно, можете делать больше и разные различия. Просто посмотрите документацию, чтобы понять, что я имею в виду.

Следует использовать на более поздних хуках, Codex говорит:

Функция возвращает null, если вызвана из хука admin_init. Ее
можно использовать на более позднем хуке, таком как current_screen.

редактировать: читайте комментарии на возможные недостатки.


Вы можете использовать глобальную переменную $pagenow

global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {

    // редактирование поста блога

}
if ($pagenow == 'profile.php') {

    // редактирование страницы профиля пользователя

}

  • Используйте ‘get_current_screen’, просто заранее убедитесь, что она существует.
  • Как codex говорит “Эта функция определена на большинстве административных страниц, но не на всех.”
  • Это также фильтрует обычные (ориентированные на читателя) представления (перечитайте это
    предложение с акцентом на административные страницы).
  • Вполне вероятно, что следующее, что вы хотите выяснить, это, находитесь ли вы действительно на странице или посте…

    // Удалить ненужные мета блоки поста
    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' );
    

Ответ или решение

Для того чтобы определить, находится ли администратор на странице редактирования поста или страницы в админ-панели WordPress, существует несколько методов. Каждый из этих методов имеет свои особенности и может быть использован в зависимости от конкретных требований и контекста.

1. Использование функции get_current_screen()

Это один из наиболее рекомендуемых способов. Функция get_current_screen() возвращает объект текущего экрана админ-панели, который позволяет получить доступ ко множеству данных о текущей странице. Для использования этой функции, убедитесь, что она вызывается на более поздних хуках, таких как current_screen.

Пример кода:

add_action('current_screen', 'check_if_edit_screen');

function check_if_edit_screen() {
    if (function_exists('get_current_screen')) {
        $screen = get_current_screen();
        if ($screen->base === 'post' && $screen->action === 'edit') {
            echo 'Вы находитесь на странице редактирования поста.';
        }
    }
}

2. Глобальная переменная $pagenow

Еще один способ – использование глобальной переменной $pagenow, которая содержит имя текущего файла админ-страницы. Это применяется в более простых сценариях, когда достаточно проверить, какой файл загружен.

Пример:

global $pagenow;

if ($pagenow == 'post.php' && get_post_type() == 'post') {
    echo 'Вы редактируете блог-пост.';
} elseif ($pagenow == 'profile.php') {
    echo 'Вы редактируете свой профиль.';
}

3. Проверка через переменную $_GET

Этот подход включает в себя проверку параметров URL. Если в строке запроса присутствует параметр action со значением edit, значит, мы находимся на странице редактирования.

Пример:

if (isset($_GET['action']) && $_GET['action'] === 'edit') {
    echo 'Вы на странице редактирования.';
}

Заключение

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

Во всех случаях важно также учитывать контекст, в котором будет выполняться код, и необходимость в фильтрации пользовательских ролей и прав доступа, чтобы обеспечивать безопасность и корректное функционирование вашего кода в админ-панели WordPress.

Оцените материал
Добавить комментарий

Капча загружается...