В процессе разработки тем и плагинов для WordPress часто возникает задача изменить или удалить поля в мета-боксах (meta boxes) на страницах редактирования записи. Это позволяет адаптировать интерфейс под конкретные нужды проекта, убрать лишние или ненужные элементы, либо переименовать их для удобства пользователей.
Что такое meta box и зачем менять поля в WordPress
Meta box — это блок на странице редактирования записей, страниц или пользовательских типов записей (Custom Post Types), в котором выводятся дополнительные поля для ввода информации. WordPress по умолчанию добавляет несколько meta box’ов, а разработчики могут создавать свои.
Иногда нужно изменить название поля, чтобы оно лучше отражало смысл, или вовсе убрать поле, которое не используется или мешает. Делать это можно программно, используя стандартные хуки и функции WordPress.
Удаление стандартного поля из meta box в WordPress
Для удаления поля нужно понять, к какому meta box оно относится и какой у него идентификатор (ID). Обычно это можно узнать, просмотрев исходный код страницы редактирования записи или документацию плагина/темы.
Например, чтобы удалить стандартный meta box «Слаг» (URL-имя записи), можно воспользоваться функцией remove_meta_box(). Вот пример кода, который нужно добавить в файл functions.php вашей темы или в плагин:
function wpwebsite_remove_slug_meta_box() {
remove_meta_box('slugdiv', 'post', 'normal');
}
add_action('admin_menu', 'wpwebsite_remove_slug_meta_box');
Здесь 'slugdiv' — это ID meta box, 'post' — тип записи, для которого удаляется meta box, и 'normal' — контекст отображения.
Таким же образом можно удалить и другие meta box’ы, если знаете их ID.
Как узнать ID meta box для удаления
Чтобы узнать ID, откройте страницу редактирования записи, нажмите правой кнопкой на заголовок meta box и выберите «Просмотреть код» или «Inspect». Найдите элемент div с классом postbox и атрибутом id. Вот ID и есть.
Изменение имени (заголовка) поля в meta box
Для изменения текста заголовка meta box нужно использовать фильтр gettext или postbox_classes_{$id}, но проще и надежнее — перерегистрировать meta box с новым заголовком.
Пример: допустим, вы хотите изменить заголовок стандартного meta box «Отрывок» на «Краткое описание».
function wpwebsite_change_excerpt_meta_box_title() {
remove_meta_box('postexcerpt', 'post', 'normal');
add_meta_box('postexcerpt', __('Краткое описание', 'wpwebsite'), 'post_excerpt_meta_box', 'post', 'normal', 'core');
}
add_action('add_meta_boxes', 'wpwebsite_change_excerpt_meta_box_title', 11);
Здесь мы сначала удаляем стандартный meta box с ID postexcerpt, затем добавляем его заново с новым заголовком. Функция post_excerpt_meta_box отвечает за вывод содержимого поля.
Изменение имени поля в пользовательском meta box
Если meta box создан вами или сторонним плагином, то заголовок можно изменить, отредактировав функцию добавления meta box или с помощью фильтра, если он предусмотрен.
Например, если у вас есть meta box с ID wpwebsite_custom_box, добавленный функцией:
add_meta_box('wpwebsite_custom_box', 'Старое имя поля', 'wpwebsite_custom_box_callback', 'post');
То для изменения имени можно написать функцию:
function wpwebsite_change_custom_box_title() {
remove_meta_box('wpwebsite_custom_box', 'post', 'normal');
add_meta_box('wpwebsite_custom_box', 'Новое имя поля', 'wpwebsite_custom_box_callback', 'post', 'normal', 'default');
}
add_action('add_meta_boxes', 'wpwebsite_change_custom_box_title', 11);
Практические советы и рекомендации
- Всегда делайте резервную копию перед изменением meta box’ов.
- Проверяйте ID и контекст meta box, чтобы не удалить важные элементы.
- Если изменяете поля плагинов, следите за обновлениями — изменения могут сбрасываться.
- Для сложных изменений можно использовать плагин Clearfy Pro, который помогает управлять мета-боксами и очисткой админки.
Удаление поля из meta box с помощью JavaScript
Иногда поле нельзя удалить через PHP, особенно если оно встроено в meta box без отдельных ID. Тогда помогает скрипт на JavaScript, который скрывает поле на странице редактирования.
function wpwebsite_admin_hide_meta_field() {
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
var field = document.querySelector("#your_field_id");
if(field) {
field.style.display = "none";
}
});
</script>';
}
add_action('admin_footer-post.php', 'wpwebsite_admin_hide_meta_field');
add_action('admin_footer-post-new.php', 'wpwebsite_admin_hide_meta_field');
Замените #your_field_id на селектор нужного поля.
Заключение
Удаление или изменение имени поля в meta box — задача, с которой сталкиваются разработчики при кастомизации WordPress. Важно точно знать ID meta box и использовать стандартные функции remove_meta_box() и add_meta_box(). В сложных случаях помогает JavaScript. Для удобства управления можно использовать инструменты из арсенала WPSHOP.