В расширенных настраиваемых полях у меня есть страница параметров с полем повторителя. В поле репитера у меня есть ПОЛЕ ДАТЫ и ПОЛЕ СЕССИИ.
Датой (датапикер) может быть любой ПРИХОДЯЩИЙ ДЕНЬ. Сеансом (поле выбора) может быть ОБЕД или УЖИН.
На этой странице параметров я могу отключить ДАТЫ в сочетании с СЕССИЯМИ, чтобы отключить резервирование.
Fi:
Когда я установить 20.06.2020 как ДАТУ + ОБЕД как сеанс >> Клиенты не могут забронировать столик на обед 20 июня. Ужин все еще можно заказать.
Мой код ниже точно соответствует ... За исключением 1 небольшой (наиболее важной) части:
Код использует только последнюю строку поля репитера в опции страница как условие поля. Все более ранние комбинации даты и сеанса игнорируются. 1018 *
Вероятно, это как-то связано с отсутствующим foreach или чем-то в этом роде, но в последние недели я заблудился и почти готов сдаться: (
Кто-нибудь может мне помочь?
// Apply conditions to fields
add_filter('acf/prepare_field/name=bookings_field_time_session_1', 'yl_check_booking_exeptions_session_1');
function yl_check_booking_exeptions_session_1( $field ) {
// Retrieve option values. Date value should be like: 20200611 (unformatted)
$rows = get_field('bookings_settings_disabled_exceptions', 'bookings');
if( $rows ) {
foreach ( $rows as $row ) {
$option_date = get_sub_field('bookings_settings_disabled_date', 'bookings', false);
$date = date_i18n('Ymd', strtotime($option_date));
$session = get_sub_field('bookings_settings_disabled_session', 'bookings', false);
$arrays =
array(
array(
'field' => 'field_5ed4181bd63dc', // Time field session 1 in the form
'operator' => '!=', // If Value is different, then show the field
'value' => $session, // Compare against option page value
),
array(
'field' => 'field_5ed4178dd63d7', // Datepicker fiels in the form
'operator' => '!=', // If Value is different, then show the field
'value' => $date, // Compare against option page value
)
);
}
if ( $session == '1' ) {
$field['conditional_logic'] = array(
$arrays
);
}
}
// Return
return $field;
}
}