Как изменить расположение уведомления администратора в HTML без использования Javascript?

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

Я добавляю уведомление администратора с помощью стандартного хука admin_notice в своем плагине:

function my_admin_notice() { ?>
    <div class="notice notice-info is-dismissible">
        <p><?php _e( 'некоторое сообщение', 'my-text-domain' ); ?></p>
    </div>
    <?php
}

if ( my_plugin_show_admin_notice() )
  add_action( 'admin_notices', 'my_admin_notice' );

Как я могу контролировать, куда WordPress размещает уведомление администратора на текущем экране, не используя JavaScript?

Недавно я случайно узнал, что все уведомления будут перемещены после первого тега <h2> на странице внутри <div class="wrap">. Это дает вам некоторый небольшой контроль. Например, на странице настроек плагина вы можете поместить пустой <h2></h2> в самом верху, если хотите использовать <h2>Название плагина</h2>, не нарушая форматирование отображения.

Обновление: Как многие заметили, в какой-то момент это изменилось так, что теперь это происходит после тега h1 ИЛИ h2 внутри div с классом wrap, куда вставляются уведомления, в этом порядке (т.е. с первым предпочтением для h1, если он существует.) Для справки, любой, кто ищет актуальный JavaScript, делающий это, может найти его в /wp-admin/js/common.js:

    /*
     * Класс `.below-h2` здесь только для обеспечения обратной совместимости с плагинами,
     * которые (неправильно) его используют. Не используйте. Используйте `.inline` вместо этого. См. #34570.
     * Если найдена '.wp-header-end', добавьте уведомления после нее, в противном случае
     * после первого заголовка h1 или h2, найденного в основном содержимом.
     */
    if ( ! $headerEnd.length ) {
        $headerEnd = $( '.wrap h1, .wrap h2' ).first();
    }
    $( 'div.updated, div.error, div.notice' ).not( '.inline, .below-h2' ).insertAfter( $headerEnd );

Также, как вы можете видеть, если вы не хотите, чтобы ваше собственное уведомление было перемещено, просто дайте ему класс inline, и оно будет исключено.

Согласно Codex admin_notice выполняет следующее:

Уведомления отображаются в верхней части административных страниц. Функция hook
должна выводить сообщение для отображения.

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

К вашему сведению: я уже проверил это на новой установке. 😉

Но

Если вы хотите показать admin_notice на определенной странице, вы можете добавить действие в current_screen action:

function my_admin_notice() { ?>
    <div class="notice notice-info is-dismissible">
        <p><?php _e( 'некоторое сообщение', 'my_textdomain' ); ?></p>
    </div>
    <?php
}

function my_current_screen_example( $current_screen ) {
    // Все ваши условия размещаются здесь, например, показать уведомление при редактировании/создании поста (не страницы)
    if ( 'post' == $current_screen->post_type && 'post' == $current_screen->base ) {
        add_action( 'admin_notices', 'my_admin_notice' );
    }
}

add_action( 'current_screen', 'my_current_screen_example' );

Больше информации:

Недавно я столкнулся с этой проблемой и попробовал использовать метод с пустым <h2></h2>, и это не сработало для меня. В итоге я обнаружил, что использование <hr class="wp-header-end"> кажется работает, и уведомление администратора всегда будет отображаться прямо под ним.

Надеюсь, это кому-то поможет!

У меня была та же проблема, и я решил ее, убедившись, что все теги заголовков выше того места, где я хочу разместить уведомление, не содержат <h2>.

В этом случае я хотел отобразить уведомление об ошибке ниже поля ввода, как показано ниже:
введите описание изображения здесь

Я решил это, представив пустой тег <h2> сразу под полем ввода электронного адреса и также изменив тег вкладок на <h3> вместо <h2>

Действие admin_notices вызывается или применяется только один раз в файле admin-header.php на строке 238, прямо в начале div wpbody-content, который составляет тело страницы панели управления. Таким образом, нет возможности изменить положение уведомления администратора без использования JavaScript. Тем не менее, вы можете создать свои собственные div-уведомления в нужных местах и управлять их видимостью.

Просто создайте разметку для уведомления следующим образом:

<div class="notice notice-info is-dismissible">
    <p>Это уведомление.</p>
</div>

Теперь вы можете контролировать его видимость с помощью PHP. Это значит, что когда вы перенаправляете пользователя на эту страницу или отправляете форму на этой странице, просто установите сообщение в div и с помощью простого if else выведите этот div.

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

Решение с <h2>, упоминаемое ранее, ничего не дало.

Справочник WordPress settings_errors()

Просто добавьте класс inline в ваш div, например:

<div class="notice notice-success is-dismissible inline">
    Тестовое уведомление
</div>

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

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

1. Используйте Хук current_screen

Одним из наиболее эффективных способов изменить местоположение уведомления является использование хука current_screen, который позволяет более точно контролировать, где на странице будут отображаться уведомления:

function my_admin_notice() {
    ?>
    <div class="notice notice-info is-dismissible">
        <p><?php _e('Ваше сообщение', 'my_textdomain'); ?></p>
    </div>
    <?php
}

function my_current_screen_example($current_screen) {
    if ('post' == $current_screen->post_type && 'post' == $current_screen->base) {
        add_action('admin_notices', 'my_admin_notice');
    }
}

add_action('current_screen', 'my_current_screen_example');

Этот метод дает больше контроля над размещением уведомлений на основании условий, применимых к текущему экрану административного интерфейса.

2. Используйте <hr class="wp-header-end">

Если вы ищете простой способ гарантированно разместить уведомление в нужной части страницы, попробуйте использовать тег <hr class="wp-header-end">. Этот метод известен тем, что админ-уведомления WordPress будут отображаться сразу под этим тегом на странице.

3. Вручную Создайте Div Уведомления

Если ни один из методов использования стандартных хуков не подходит, рассмотрите возможность создания собственного HTML для отображения уведомлений. Так вы избавляетесь от необходимости полагаться на стандартное поведение WordPress:

<div class="notice notice-info is-dismissible">
    <p>Это уведомление будет показано в любом месте, где вы разместите этот код.</p>
</div>

С помощью PHP скриптов и условий вы можете контролировать, когда и где должно отображаться это уведомление.

4. Используйте Функцию settings_errors()

Функция settings_errors() предоставляет дополнительную гибкость. Вы можете интегрировать эту функцию в шаблон, чтобы контролировать, где должны появляться уведомления:

<?php settings_errors(); ?>

Это работает для выводов элементов конфигурации и может использоваться для размещения уведомлений в произвольных местах на ваших страницах настроек.

Вывод

Для изменения расположения уведомлений администратора без использования JavaScript важно понимать ограничения WordPress и использовать их наиболее эффективно. Рассмотренные методы помогут вам разместить уведомления в удобном для вас месте, улучшая взаимодействие пользователей с интерфейсом. Не забывайте уделять внимание корректности PHP логики и адаптировать решения под ваши текущие нужды и структуру проекта.

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

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