Вопрос или проблема
Кто-нибудь знает, как добавить функцию автосохранения для расширенных пользовательских полей или добавить 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' );
Объяснение кода
-
Проверка на автосохранение: Использование
defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE
предотвращает выполнение кода, если это событие вызвано автоматическим сохранением. Это ключевой момент, так как вас не должно заботить сохранение данных, когда WordPress выполняет свою собственную авто-сохранённую процедуру. -
Определение ревизий: Проверяя
wp_is_post_revision
, вы можете удостовериться, что вам не нужно сохранять поля для ревизий, а только для основного поста. -
Список полей: Определите список пользовательских полей, которые вы хотите сохранить. Этот шаг позволяет вам централизовать поля, которые требуется обновлять.
-
Обновление метаданных: Внутри цикла проверяется, существует ли ключ в массиве
$_POST
, и если это так, то выполняется функцияupdate_post_meta
, которая обновляет значение поля. Использованиеsanitize_text_field
необходимо для обработки и очищения введенных данных, что улучшает безопасность. -
Привязка события: Последняя строка кода регистрирует вашу функцию на событие
save_post
, что гарантирует вызов вашей функции при каждом сохранении поста, включая автосохранения.
Заключение
Добавление функции авто-сохранения для пользовательских полей в ACF требует небольших усилий, однако это значительно улучшает взаимодействие пользователей с вашим сайтом. Следуйте приведенным выше шагам, чтобы интегрировать эту функциональность, и не забывайте тестировать на разных типах постов и с различными значениями пользовательских полей.
Если у вас возникли дополнительные вопросы или требуется помощь с реализацией, не стесняйтесь обращаться к сообществу разработчиков или изучать дополнительные ресурсы, такие как документация по ACF и материалы на metabox.io.