Хорошо, я постараюсь объяснить это. Мы (моя команда) создали специальную функциональность для нашего клиента, которая сочетает в себе расширенные настраиваемые поля и средство удаления сообщений таким образом, что если сообщения запланированы к публикации или сроку их действия, они добавляются или удаляются из массива отношений, созданного с помощью ACF. Процесс публикации сообщений выглядит следующим образом:
Клиент создает сообщение и назначает время публикации и срок его действия. Это работает без недостатков, поскольку это стандартная функциональность плагина Wordpress и Post Expirator. Далее, в редакторе сообщений есть флажок, который при установленном значении «true» подключается к функции, которая добавляет и удаляет это сообщение из массива отношений (он используется для заполнения карусели домашней страницы сообщениями). Когда мы тестируем это локально, все работает отлично, однако у клиента продолжают возникать проблемы с случайным исчезновением сообщений из массива отношений до истечения срока действия сообщения.
Мы не видим, чтобы это происходило в нашей локальной тестовой установке, но мы не управляем никакими данными и никаким образом не обновляем контент, так что это самая большая разница. между нашей и клиентской установками.
Мы испробовали все виды устранения неполадок и настроек, пытались намеренно тормозить наши локальные сборки, но не смогли воспроизвести ошибку. Итак, теперь я ищу свежие идеи относительно того, почему эти сообщения могут случайно исчезнуть.
Спасибо!
Вот код php, который обрабатывает массив отношений ACF:
//Add post to homepage carousel on post update if posts ACF is checked true
function add_post_to_homepage_carousel() {
$homepage_id = get_option('page_on_front');
$post_to_add = get_post();
$post_checked = get_field('add_to_homepage_carousel', $post_to_add->ID);
$carray = get_field('carousel_post_selection', $homepage_id);
if ( !is_array($carray)) {
$carray = array();
}
if ($post_checked === 'true' && !in_array($post_to_add, $carray, true)) {
array_unshift($carray, $post_to_add);
update_field('carousel_post_selection', $carray, $homepage_id);
}
}
add_action('save_post', 'add_post_to_homepage_carousel', 10, 2);
add_action('publish_future_post', 'add_post_to_homepage_carousel', 10, 2);
//clean carousel array if post expired or unset from wp editor
function clear_carousel_array() {
$homepage_id = get_option('page_on_front');
$carray = get_field('carousel_post_selection', $homepage_id);
$post_to_remove = get_post();
$post_checked = get_field('add_to_homepage_carousel', $post_to_remove->ID);
if ( !is_array($carray)) {
$carray = array();
}
if ($post_checked === 'false') {
if (($key = array_search($post_to_remove, $carray, true)) !== NULL) {
unset($carray[$key]);
}
update_field('carousel_post_selection', $carray, $homepage_id);
}
}
add_action('save_post', 'clear_carousel_array');
Подробнее здесь: https://stackoverflow.com/questions/422 ... vior-items