Alex
Алекс

WordPress. Как быстро сделать всплывающее окно приветствия в админке

Такое всплывающее окно в админке WordPress бывает нужно для многопользовательских сайтов. Например, каждый, кто зарегистрировался на сайте после активации попадает в т.н. “Консоль”, а там ему показывается модальное окошко с определённым текстом – поздравлнием/правилами/прочим.

Задача

Она довольно ясна и часто востребована. Поэтому, сформулировав её чётко и внятно, приступим к её реализации.

Как сделать всплывающее окно приветствия в админке WordPress, которое будет появляться при каждом заходе пользователя (но не админа) до тех пор, пока он не нажмёт кнопку “Больше не показывать”?

Решение

Тут есть два пути: использовать встроенные библиотеки (thickbox), либо подключить сторонние (bootstrap). У обоих вариантов есть свои минусы. Например, Thickbox слабоват в настройках и выводит модальное окно только при нажатии на ссылку. А вот Bootstrap может подпортить стили вашей админки, потому что подгрузит свои.

Я остановился на втором варианте, достаточно долго промучившись с первым. Первое, что нужно сделать, это подключить две библиотеки и стили файле functions.php вашей темы:

function my_bootstrap_modals()
{
 $screen = get_current_screen(); // проверка, где находимся в данный момент
 wp_register_script('modaljs', get_stylesheet_directory_uri() . '/assets/js/bootstrap.min.js', array('jquery'), '1', true); //ну вы поняли, этот файл должен быть уже на сайте в папке с Вашей темой
 wp_register_script('cookiejs', get_stylesheet_directory_uri() . '/assets/js/jquery.cookie.js', array('jquery'), '1', true);
 if ($screen->base == 'dashboard') { wp_register_style('modalcss', get_stylesheet_directory_uri() . '/assets/css/bootstrap.min.css', '', '', 'all');}; // подключить стили Bootstrap, если мы находимся на главной странице админки
 wp_enqueue_script('modaljs');
 wp_enqueue_script('cookiejs');
 wp_enqueue_style('modalcss');
}
add_action('admin_enqueue_scripts', 'my_bootstrap_modals');

Теперь нам нужно вывести модальное (всплывающее) окно в корне админки для всех, кто не администратор. Для этого мы добавим следующий код:

add_action('admin_footer', 'open_modal');
function open_modal()
{
 if (!current_user_can('manage_options')) { // если пользователь не может менять настройки сайта (значит, он не админ)
  $screen = get_current_screen();
// если текущее положение - основная страница "Консоли" и всплывающее окошко не запрещено куками 
  if (($screen->base == 'dashboard') && ($_COOKIE['no-modal'] !== '1')) { ?>
      <!-- Обычный код для Bootstrap модального окна -->
<div id="myModal" class="modal fade" tabindex="-1">
          <div class="modal-dialog">
              <div class="modal-content">
                  <div class="modal-header">
                      <button class="close" type="button" data-dismiss="modal">×</button>
                      <h4 class="modal-title">Привет!</h4>
                  </div>
                  <div class="modal-body">
                      <p>Вы находитесь в админке нашего сайта. Заполните, пожалуйста <a href="profile.php">ваш профиль</a>!</p>
                  </div>
                  <div class="modal-footer">
                      <button class="btn btn-default" type="button" data-dismiss="modal">Ок</button>
                      <button class="btn btn-primary no-more" data-dismiss="modal" type="button">Больше не показывать
                      </button>
                  </div>
              </div>
          </div>
      </div>
      <script>
          jQuery(document).ready(function () {
              jQuery('#myModal').modal('show'); // вывести модальное окно
          });
      </script>
      <script>
          jQuery(".no-more").click(function () {
              // если нажата кнопка "Больше не показывать", то записать в куки единичку и нарушить условие показа модального окна
              var d = new Date();
              d.setTime(d.getTime() + (1000 * 24 * 60 * 60 * 1000)); // не показывать 1000 суток
              var expires = "expires=" + d.toUTCString();
              document.cookie = 'no-modal' + "=" + 1 + ";" + expires + ";path=/";
          });
      </script>
  <?php }
 } ?>
<?php }

Этот код мы располагаем под первым и тестируем. Всё должно получиться. А чтобы сделать модальное окно посредине, добавьте такой код:

add_action('admin_head', 'center_bootstrap_modal');
function center_bootstrap_modal() {
  echo '<style>
.modal {
	text-align: center;
}
@media screen and (min-width: 768px) {
	.modal:before {
		display: inline-block;
		vertical-align: middle;
		content: " ";
		height: 100%;
	}
}
.modal-dialog {
	display: inline-block;
	text-align: left;
	vertical-align: middle;
} 
  </style>';
}

Итоги.

Вот так довольно быстро и не затратно мы можем выводить своим пользователям сайта на WordPress всплывающее окошко. Буду рад замечаниям и предложениям по улучшению кода в комментариях.

Якщо вам сподобався чи став у нагоді текст, ви завжди можете віддячити! На каву

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*
*
*