добавление функции автосохранения для пользовательских полей

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

Кто-нибудь знает, как добавить функцию автосохранения для расширенных пользовательских полей или добавить ACF к событию автосохранения. Я искал это, но не нашел решения.

Спасибо

Посмотрите на эти строки, чтобы получить представление о добавлении функции автосохранения:

function hcf_save( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( $parent_id = wp_is_post_revision( $post_id ) ) {
        $post_id = $parent_id;
    }
    $field_list = [
        'hcf_author',
        'hcf_published_date',
        'hcf_price',
    ];
    foreach ( $field_list as $fieldName ) {
        if ( array_key_exists( $fieldName, $_POST ) ) {
            update_post_meta(
                $post_id,
                $fieldName,
                sanitize_text_field( $_POST[ $fieldName ] )
            );
        }
    }
}
add_action( 'save_post', 'hcf_save' );

Вы можете найти больше информации о функции автосохранения здесь.

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

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

Проблема: Введение функции авто-сохранения для пользовательских полей

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

Решение: Скрипт для автоматического сохранения пользовательских полей

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

Код функции

function hcf_save( $post_id ) {
    // Проверяем, является ли это автоматическим сохранением
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Проверяем, является ли это ревизией
    if ( $parent_id = wp_is_post_revision( $post_id ) ) {
        $post_id = $parent_id;
    }

    // Список пользовательских полей для сохранения
    $field_list = [
        'hcf_author',
        'hcf_published_date',
        'hcf_price',
    ];

    // Проходим по каждому полю и обновляем его
    foreach ( $field_list as $fieldName ) {
        if ( array_key_exists( $fieldName, $_POST ) ) {
            update_post_meta(
                $post_id,
                $fieldName,
                sanitize_text_field( $_POST[ $fieldName ] )
            );
        }
    }
}

// Привязываем функцию к событию сохранения поста
add_action( 'save_post', 'hcf_save' );

Объяснение кода

  1. Проверка на автосохранение: Использование defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE предотвращает выполнение кода, если это событие вызвано автоматическим сохранением. Это ключевой момент, так как вас не должно заботить сохранение данных, когда WordPress выполняет свою собственную авто-сохранённую процедуру.

  2. Определение ревизий: Проверяя wp_is_post_revision, вы можете удостовериться, что вам не нужно сохранять поля для ревизий, а только для основного поста.

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

  4. Обновление метаданных: Внутри цикла проверяется, существует ли ключ в массиве $_POST, и если это так, то выполняется функция update_post_meta, которая обновляет значение поля. Использование sanitize_text_field необходимо для обработки и очищения введенных данных, что улучшает безопасность.

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

Заключение

Добавление функции авто-сохранения для пользовательских полей в ACF требует небольших усилий, однако это значительно улучшает взаимодействие пользователей с вашим сайтом. Следуйте приведенным выше шагам, чтобы интегрировать эту функциональность, и не забывайте тестировать на разных типах постов и с различными значениями пользовательских полей.

Если у вас возникли дополнительные вопросы или требуется помощь с реализацией, не стесняйтесь обращаться к сообществу разработчиков или изучать дополнительные ресурсы, такие как документация по ACF и материалы на metabox.io.

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

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