Как сделать WordPress трудным для клиентов, чтобы они испортились

Опубликовано: 2022-03-10
Краткое резюме ↬ WordPress — это удивительно мощная CMS, которая поставляется с множеством универсальных функций, позволяющих гибко работать из коробки для широкого круга пользователей. Однако, если вы профессионал, создающий собственные темы и плагины, иногда эти функции могут быть проблематичными. Те же функции и параметры, которые позволяют готовым темам адаптироваться ко многим различным вариантам использования, иногда также могут использоваться для подрыва тщательно разработанной пользовательской темы, созданной для конкретного варианта использования.

WordPress — это удивительно мощная CMS, которая поставляется с множеством универсальных функций, позволяющих гибко работать из коробки для широкого круга пользователей. Однако, если вы профессионал, создающий собственные темы и плагины, иногда эти функции могут быть проблематичными. Те же функции и параметры, которые позволяют готовым темам адаптироваться ко многим различным вариантам использования, иногда также могут использоваться для подрыва тщательно разработанной пользовательской темы, созданной для конкретного варианта использования.

Следующая статья содержит набор фрагментов кода, которые я использую снова и снова почти в каждом проекте WordPress. Их всех объединяет то, что они ограничивают функциональность, которая либо не нужна, либо сбивает с толку, либо небезопасна. Все нижеследующее можно использовать на любом сайте, но эти советы особенно актуальны для профессионалов, создающих собственные темы и плагины для клиентов.

Дальнейшее чтение на SmashingMag:

  • Как создать и настроить дочернюю тему WordPress
  • Написание эффективной документации для конечных пользователей WordPress
  • Ограничение видимости сообщений в WordPress с помощью имен пользователей
  • Использование ролей пользователей в WordPress

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

Еще после прыжка! Продолжить чтение ниже ↓

Отключить плагины и редактор тем

Нет веской причины, по которой кто-либо должен редактировать вашу пользовательскую тему или файлы плагинов в реальном времени через панель инструментов WordPress. Профессионалы так не работают, а магглы обычно не понимают, насколько легко сломать сайт, пропустив одну точку с запятой. Это также уязвимость безопасности, которую могут использовать хакеры. К счастью, наши друзья из WordPress.org упростили отключение этой функции. Просто добавьте следующий фрагмент в файл wp-config.php .

 define( 'DISALLOW_FILE_EDIT', true );

Помимо редактора тем, это также отключит редактор плагинов. Я считаю это особенностью, а не ошибкой.

Редактор плагинов Wordpress
Редактор плагинов Wordpress. (Посмотреть большую версию)

Ограничьте визуальный и текстовый редактор

По умолчанию редактор WordPress WYSIWYG поддерживает слишком много параметров форматирования для хорошо разработанной пользовательской темы. Позволить клиентам переопределить цвет текста или размер шрифта — это быстрый способ сделать даже самый шикарный сайт дешевым и уродливым. Если текст сообщения в блоге всегда выравнивается по левому краю, зачем давать автору кнопку для его выравнивания по правому краю? Как вы думаете, будет ли хорошо выглядеть, если текст на странице «О нас» будет фиолетовым, полужирным и выделенным курсивом? Тогда не вооружайте своего клиента средствами для этого. В большинстве случаев я рекомендую полностью отключить визуальный редактор.

Уродливая типографская страница
Уродливая типографская страница. (Посмотреть большую версию)

Отключение визуального редактора

Добавьте следующий фрагмент в файл functions.php вашей темы, и вкладка для переключения редактора WYSIWYG исчезнет.

 function emersonthis_disable_visual_editor(){ # add logic here if you want to permit it selectively return false; } add_filter('user_can_richedit' , 'emersonthis_disable_visual_editor', 50);

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

Вкладка визуального редактора
Вкладка визуального редактора. (Посмотреть большую версию)

Удаление полужирных и курсивных быстрых тегов из текстового редактора

В текстовом редакторе есть кнопки быстрых тегов, которые заключают выделенный текст в теги <strong> и <em> . Добавьте следующий код в файл functions.php вашей темы, и у авторов больше не будет кнопок с жирным шрифтом или курсивом.

 # Removes bold and italic quicktags from text editor function emersothis_quicktags_settings( $qtInit ) { //To disable ALL butons it must be set to "," (not "") $qtInit['buttons'] = 'more,'; return $qtInit; } add_filter('quicktags_settings', 'emersonthis_quicktags_settings');

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

Если вы находитесь в редкой ситуации, когда пользователь должен сам форматировать текст, вы можете оставить визуальный редактор включенным, но отключить определенные кнопки по отдельности.

Отключение кнопок в визуальном редакторе

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

API WordPress для изменения редактора TinyMCE немного сложен, потому что вам нужно искать кодовые имена, используемые для ссылки на каждую кнопку, которую вы хотите удалить. Вы получите максимальную отдачу от затраченных средств, удалив кнопку «кухонная раковина», которая переключает весь второй ряд, содержащий наиболее проблемные кнопки форматирования. Для этого добавьте следующий код в файл functions.php вашей темы.

 # Remove visual editor buttons function emersonthis_tinymce_buttons($buttons) { # Remove the text color selector $remove = array('wp_adv'); //Add other button names to this array # Find the array key and then unset return array_diff($buttons,$remove); } add_filter( 'mce_buttons', 'emersonthis_tinymce_buttons' );

Один из способов выяснить кодовое имя кнопки, которую вы хотите удалить, — это проверить разметку формы. На момент написания каждая кнопка имеет имя класса, начинающееся с mce-i- , за которым следует кодовое имя, которое вы бы поместили в массив выше.

Удалить кнопку «Добавить медиа»

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

Сообщение в блоге заполнено уродливыми изображениями
Сообщение в блоге заполнено уродливыми изображениями. (Посмотреть большую версию)

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

Специальные фотографии, встроенные с помощью кнопки «Добавить медиа» в редакторе, трудно контролировать, и они имеют тенденцию выглядеть неуклюже в зависимости от того, где автор вставляет изображение по отношению к окружающему тексту. Они также вызывают путаницу у многих авторов, потому что с первого взгляда кнопку «Добавить медиафайл» легко спутать с кнопкой загрузки «Избранное изображение», которая появляется внизу страницы (по умолчанию) и может использоваться по-разному в зависимости от темы. Я почти всегда удаляю его, добавляя следующий код в файл functions.php темы.

 # Remove media buttons function emersonthis_remove_add_media(){ # do this conditionally if you want to be more selective remove_action( 'media_buttons', 'media_buttons' ); } add_action('admin_head', 'emersonthis_remove_add_media');

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

Отключить параметры настройки темы

Если вы работаете над дочерней темой, родительская тема может предлагать параметры настройки, которые не подходят для дочерней темы. Параметры настройки могут не использоваться в вашей дочерней теме или могут сломаться. В любом случае API настройщика темы WordPress позволяет легко избавиться от них, добавив следующий фрагмент в файл functions.php вашей темы.

 # Remove customizer options. function emersonthis_remove_customizer_options( $wp_customize ) { // $wp_customize->remove_section( 'static_front_page' ); // $wp_customize->remove_section( 'title_tagline' ); $wp_customize->remove_section( 'colors' ); $wp_customize->remove_section( 'header_image' ); $wp_customize->remove_section( 'background_image' ); // $wp_customize->remove_section( 'nav' ); // $wp_customize->remove_section( 'themes' ); // $wp_customize->remove_section( 'featured_content' ); // $wp_customize->remove_panel( 'widgets' ); } add_action( 'customize_register', 'emersonthis_remove_customizer_options', 30);

Каждая строка в приведенном выше фрагменте соответствует отдельному параметру настройки темы, который можно отключить, раскомментировав его.

Скрыть неиспользуемые пункты меню панели инструментов

Не каждый сайт имеет одинаковые типы контента; например, на некоторых сайтах нет блога. Если мы применим к панели инструментов WordPress ту же логику, что и к любому другому пользовательскому интерфейсу, будет непонятно и ненужно показывать кнопки, которые ничего не делают. В этом примере пункт меню «Сообщения» был бы ненужным, поэтому давайте удалим его, добавив следующий фрагмент в functions.php :

 function emersonthis_custom_menu_page_removing() { // remove_menu_page( 'index.php' ); //Dashboard // remove_menu_page( 'jetpack' ); //Jetpack* remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media // remove_menu_page( 'edit.php?post_type=page' ); //Pages remove_menu_page( 'edit-comments.php' ); //Comments // remove_menu_page( 'themes.php' ); //Appearance // remove_menu_page( 'plugins.php' ); //Plugins // remove_menu_page( 'users.php' ); //Users // remove_menu_page( 'tools.php' ); //Tools // remove_menu_page( 'options-general.php' ); //Settings } add_action( 'admin_menu', 'emersonthis_custom_menu_page_removing' );

Каждая строка соответствует определенному меню в приборной панели. Имена файлов не всегда совпадают с именами, отображаемыми в меню информационной панели, поэтому закомментированные строки оставлены в качестве краткого справочника.

Меню «Сообщения» появляется по умолчанию независимо от того, есть ли на сайте блог.
Пункт меню «Сообщения» появляется по умолчанию независимо от того, есть ли на сайте блог. (Посмотреть большую версию)
06-сообщений-меню-скрытый-предварительный просмотр-опция
Панель инструментов WordPress без пункта меню «Сообщения». (Посмотреть большую версию)

Важно понимать, что удаление этих пунктов меню фактически не аннулирует разрешения пользователя. Пользователь по-прежнему может получить доступ к скрытому элементу меню напрямую, используя URL-адрес. Если цель состоит в том, чтобы сделать приборную панель менее загроможденной, скрыв лишние элементы управления, то это, вероятно, нормально. Если цель состоит в том, чтобы фактически запретить пользователю доступ к этим элементам управления, вам потребуется изменить возможности роли пользователя. Для этого добавьте к хуку активации плагина фрагмент, подобный следующему (его нужно запустить только один раз):

 global $wp_roles; // global class $role = 'author'; $cap = 'delete_published_posts'; $wp_roles->remove_cap( $role, $cap );

Используйте эту всеобъемлющую таблицу всех возможностей, чтобы найти конкретные возможности, которые вы можете добавить или удалить для каждой из ролей по умолчанию.

Добавьте подсказку о том, как работают разрывы строк в редакторе

По умолчанию визуальный редактор (TinyMCE) создает новый абзац, когда автор нажимает клавишу Return . Если вам просто нужен старомодный разрыв строки (также известный как возврат каретки), вам нужно нажать Shift+Return . Это изящно и мощно, но не интуитивно понятно для многих авторов. Я начал добавлять быстрое напоминание, чтобы избежать неизбежной жалобы на «кучу странных пробелов», появляющуюся в сообщении или на странице.

Сообщение в блоге с уродливым дополнительным пробелом
Сообщение в блоге с уродливым дополнительным пробелом. (Посмотреть большую версию)

Добавьте следующий фрагмент в файл functions.php . Измените значение $tip , чтобы сказать все, о чем вы хотите напомнить своим авторам.

 # Adds instruction text after the post title input function emersonthis_edit_form_after_title() { $tip = '<strong>TIP:</strong> To create a single line break use SHIFT+RETURN. By default, RETURN creates a new paragraph.'; echo '<p>'.$tip.'</p>'; } add_action( 'edit_form_after_title', 'emersonthis_edit_form_after_title' );

Этот метод можно использовать для добавления напоминания обо всем, что вы хотите, чтобы авторы помнили при добавлении или редактировании контента.

Страница сообщений с добавленной подсказкой пробела
Добавлена ​​страница сообщений с пробелом. (Посмотреть большую версию)

Не раздавайте учетные записи администраторов

Роль администратора WordPress очень сильна, и с большой силой приходит большая ответственность. Некоторые клиенты являются опытными опытными пользователями WordPress, которые грамотно администрируют свой сайт. Многие из них не являются. Последние не должны ковыряться в роли администраторов. Вместо этого сделайте их редактором и создайте отдельную учетную запись администратора со сверхнадежным паролем. Если у вас есть постоянная связь с клиентом, вы можете сохранить эти учетные данные, пока клиент не будет готов самостоятельно администрировать сайт.

Список пользователей полон админов
Список пользователей полон админов. (Посмотреть большую версию)

В качестве альтернативы дайте клиенту оба набора учетных данных и попросите их хранить учетные данные администратора в безопасном месте и использовать их только для выполнения задач администрирования. Многие клиенты быстро потеряют учетные данные администратора, но это нормально: пароль всегда можно сбросить, и часто клиенты такого типа все равно будут повторно нанимать вас для выполнения рутинного обслуживания сайта за них.

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

Используйте мю-плагины

Каталог mu-plugins/ существует уже давно, но большинство хакеров WordPress, которых я встречал, никогда о нем не слышали. «Мю» означает « должен использовать ». Каталог — это альтернативное место, где могут быть установлены плагины.

Необходимо использовать интерфейс плагинов в панели инструментов Wordpress.
Необходимо использовать интерфейс плагинов в панели управления WordPress. (Посмотреть большую версию)

Разница в том, что «обязательные» плагины активируются автоматически и не могут быть случайно отключены на панели инструментов. Они также загружаются перед другими плагинами. Это идеально подходит для плагинов, которые должны присутствовать для правильной работы сайта. Это также отличная альтернатива для непрезентационных хаков, которые обычно могут быть забиты в файл functions.php вашей пользовательской темы. Например, мне нравится определять пользовательские типы сообщений в mu-плагине, потому что этот контент должен сохраняться независимо от того, активна ли конкретная тема.

Каталог mu-plugins/ изначально не существует. Вы создаете его вручную внутри wp-content/ .

 wp-content/ mu-plugins/ plugins/ themes/ ...

Самым большим ограничением является то, что WordPress ищет файлы только на верхнем уровне mu-plugins/ и игнорирует код внутри подкаталога. Однако вы можете обойти это, создав один PHP-файл в верхней части mu-plugins/ , который загружает код из родственного подкаталога. Также имейте в виду, что уведомления об обновлениях не распространяются на mu-плагины. Я думаю о mu-plugins/ как о месте для размещения важного кода, о котором клиент никогда не должен думать.

Узнайте больше об обязательных плагинах в Кодексе. Если вы хотите потребовать другие подключаемые модули, предотвратив возможность их деактивации, вам может пригодиться библиотека WDS-Required-Plugins.

Заключительное примечание

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

Если вам нужно больше фрагментов, я создал общедоступный репозиторий полезных фрагментов WordPress на GitHub, который содержит актуальные версии приведенных выше хаков, а также другие, которые я периодически добавляю. Если у вас есть собственные полезные фрагменты, которыми вы хотите поделиться, пулреквесты более чем приветствуются!