В WordPress хук {$taxonomy}_edit_form_fields
позволяет добавлять дополнительные пользовательские поля на страницы редактирования терминов таксономии, таких как категории или теги. Этот хук срабатывает после отображения стандартных полей формы редактирования термина и предоставляет возможность расширить интерфейс метаполями для SEO или других нужд.
Хук {$taxonomy}_edit_form_fields
является динамическим. В выражении {$taxonomy}
подставляется ключ используемой таксономии, например category
, post_tag
и т.д.
do_action( "{$taxonomy}_edit_form_fields", WP_Term $tag, string $taxonomy );
Параметры
$tag
(WP_Term
): Объект текущего термина таксономии.$taxonomy
(string
): Имя таксономии, к которой относится термин.
Пример 1: Добавление SEO метаполей на страницу редактирования термина
В этом примере создаются поля для ввода заголовка и описания SEO для терминов категории.
<?php
$taxonomy_name = 'category';
// Добавляем новые поля для термина при редактировании
add_action("{$taxonomy_name}_edit_form_fields", 'add_seo_fields_to_term_edit_form', 10, 2);
/**
* Функция для добавления метаполей SEO на страницу редактирования термина.
*
* @param WP_Term $term Текущий термин таксономии.
* @param string $taxonomy Имя таксономии.
*/
function add_seo_fields_to_term_edit_form($term, $taxonomy) {
// Получаем текущие значения метаполей
$seo_title = get_term_meta($term->term_id, 'seo_title', true);
$seo_description = get_term_meta($term->term_id, 'seo_description', true);
?>
<tr class="form-field">
<th scope="row"><label for="seo-title">SEO Заголовок</label></th>
<td>
<input type="text" name="term_meta[seo_title]" id="seo-title" value="<?php echo esc_attr($seo_title); ?>" />
<p class="description">Введите SEO заголовок для термина.</p>
</td>
</tr>
<tr class="form-field">
<th scope="row"><label for="seo-description">SEO Описание</label></th>
<td>
<textarea name="term_meta[seo_description]" id="seo-description"><?php echo esc_textarea($seo_description); ?></textarea>
<p class="description">Введите SEO описание для термина.</p>
</td>
</tr>
<?php
}
Пример 2: Сохранение пользовательских полей при редактировании термина
Для сохранения значений полей используется дополнительный хук edited_{$taxonomy}
, который срабатывает после сохранения изменений термина.
add_action("edited_{$taxonomy_name}", 'save_seo_fields_for_term', 10, 2);
/**
* Функция для сохранения метаполей SEO термина.
*
* @param int $term_id ID термина.
* @param string $taxonomy Имя таксономии.
*/
function save_seo_fields_for_term($term_id, $taxonomy) {
// Проверяем, есть ли данные для сохранения
if (isset($_POST['term_meta'])) {
$seo_title = sanitize_text_field($_POST['term_meta']['seo_title']);
$seo_description = sanitize_textarea_field($_POST['term_meta']['seo_description']);
// Сохраняем значения
update_term_meta($term_id, 'seo_title', $seo_title);
update_term_meta($term_id, 'seo_description', $seo_description);
}
}
Пример 3: Добавление редактора для описания
С помощью хука можно подключить текстовый редактор WordPress для редактирования описания термина, что упрощает добавление форматированного текста.
<?php
add_action("{$taxonomy_name}_edit_form_fields", 'add_wp_editor_to_term_description', 10, 2);
function add_wp_editor_to_term_description($term, $taxonomy) {
?>
<tr class="form-field">
<th scope="row"><label for="description">Описание</label></th>
<td>
<?php
$content = get_term_meta($term->term_id, 'description', true);
wp_editor($content, 'term-description-editor', [
'textarea_name' => 'term_meta[description]',
'media_buttons' => false,
'textarea_rows' => 10,
'tinymce' => true,
]);
?>
</td>
</tr>
<?php
}
add_action("edited_{$taxonomy_name}", 'save_wp_editor_description', 10, 2);
function save_wp_editor_description($term_id, $taxonomy) {
if (isset($_POST['term_meta']['description'])) {
update_term_meta($term_id, 'description', wp_kses_post($_POST['term_meta']['description']));
}
}
Заключение
Хук {$taxonomy}_edit_form_fields
предоставляет гибкие возможности для кастомизации интерфейса редактирования терминов таксономии. Это позволяет добавлять метаполя и визуальные улучшения, такие как текстовый редактор, что особенно полезно для расширения стандартного функционала WordPress.