Как добавить пользовательскую поддержку для пользовательских типов записей?

Вопрос или проблема

Мне нужно определить пользовательскую функцию поддержки для моего плагина WordPress, но я не могу найти, как это сделать.

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

Для практического использования я хочу прикрепить эту пользовательскую функцию так же, как поддержка добавляется к записям:

<?php
$args = array(
    ...
    ...
    'supports' => array('title','editor', 'thumbnail', 'my_custom_support'),
    ...
    ...
);
register_post_type('my_custom_post_type', $args);
?>

ИЛИ, если мой пользовательский тип записи уже был создан ранее:

<?php
add_post_type_support('my_custom_post_type', 'my_custom_support');
?>

Я знаю, чего хочу, но просто не могу найти, как зарегистрировать новую поддержку…

Я надеюсь, кто-то сможет ответить на эту проблему, потому что я буквально рву на себе волосы!

Ну, вы можете добавить

...
'supports' => array('title','editor', 'thumbnail', 'custom-fields'),
...

Вам не нужно создавать что-либо заранее, вы можете определить два поля “широта” и “долгота” при добавлении новой записи.

Чтобы добавить пользовательскую поддержку для пользовательских типов записей в WordPress, вам нужно использовать функцию add_post_type_support().

add_action('init', 'register_custom_post_type_support');

function register_custom_post_type_support() {
    add_post_type_support('my_custom_post_type', 'my_custom_support');
}

После добавления поддержки для пользовательской функции, вам нужно определить метабокс, содержащий поля longitude и latitude. Вы можете использовать функцию add_meta_box() для добавления метабокса в экран редактирования вашего пользовательского типа записи.

add_action('add_meta_boxes', 'add_custom_metabox');

function add_custom_metabox() {
    add_meta_box(
        'custom_geolocation_metabox',
        'Geolocation',
        'render_custom_geolocation_metabox',
        'my_custom_post_type',
        'normal',
        'default'
    );
}

function render_custom_geolocation_metabox($post) {
    // Получение значений долготы и широты
    $longitude = get_post_meta($post->ID, 'longitude', true);
    $latitude = get_post_meta($post->ID, 'latitude', true);
    ?>
    <label for="longitude">Долгота:</label>
    <input type="text" id="longitude" name="longitude" value="<?php echo esc_attr($longitude); ?>"><br>
    <label for="latitude">Широта:</label>
    <input type="text" id="latitude" name="latitude" value="<?php echo esc_attr($latitude); ?>">
    <?php
}

add_action('save_post', 'save_custom_geolocation');

function save_custom_geolocation($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Сохранение значений долготы и широты
    if (isset($_POST['longitude'])) {
        update_post_meta($post_id, 'longitude', sanitize_text_field($_POST['longitude']));
    }
    if (isset($_POST['latitude'])) {
        update_post_meta($post_id, 'latitude', sanitize_text_field($_POST['latitude']));
    }
}

В приведенном выше коде замените my_custom_post_type на название вашего пользовательского типа записи, а my_custom_support на название пользовательской функции поддержки, которую вы хотите добавить.

Ответ или решение

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

Теория

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

Пример

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

add_action('init', 'register_custom_post_type_support');

function register_custom_post_type_support() {
    add_post_type_support('my_custom_post_type', 'my_custom_support');
}

add_action('add_meta_boxes', 'add_custom_metabox');

function add_custom_metabox() {
    add_meta_box(
        'custom_geolocation_metabox',
        'Геолокация',
        'render_custom_geolocation_metabox',
        'my_custom_post_type',
        'normal',
        'default'
    );
}

function render_custom_geolocation_metabox($post) {
    $longitude = get_post_meta($post->ID, 'longitude', true);
    $latitude = get_post_meta($post->ID, 'latitude', true);
    ?>
    <label for="longitude">Долгота:</label>
    <input type="text" id="longitude" name="longitude" value="<?php echo esc_attr($longitude); ?>"><br>
    <label for="latitude">Широта:</label>
    <input type="text" id="latitude" name="latitude" value="<?php echo esc_attr($latitude); ?>">
    <?php
}

add_action('save_post', 'save_custom_geolocation');

function save_custom_geolocation($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (isset($_POST['longitude'])) {
        update_post_meta($post_id, 'longitude', sanitize_text_field($_POST['longitude']));
    }
    if (isset($_POST['latitude'])) {
        update_post_meta($post_id, 'latitude', sanitize_text_field($_POST['latitude']));
    }
}

Применение

  1. Регистрация поддержки: Сначала добавляется поддержка специфичного функционала через add_post_type_support(). В данном случае, это не принципиально, так как настоящий механизм внедрения кастомный.

  2. Создание метабокса: Метабокс для ввода данных геолокации создается с помощью add_meta_box(). Здесь важно отслеживать идентификатор вашего типа записи и метаблока, а также указывать имя функции-обработчика.

  3. Обработка данных: Необходимо добавить функцию для сохранения введенных пользователем значений. Это гарантирует, что введенные данные сохраняются в метаполях, связанных с записью.

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

Оцените материал
Добавить комментарий

Капча загружается...