В 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.
