Массив в foreach для поля ACF условного logi c? - PullRequest
0 голосов
/ 19 июня 2020

В расширенных настраиваемых полях у меня есть страница параметров с полем повторителя. В поле репитера у меня есть ПОЛЕ ДАТЫ и ПОЛЕ СЕССИИ.

Датой (датапикер) может быть любой ПРИХОДЯЩИЙ ДЕНЬ. Сеансом (поле выбора) может быть ОБЕД или УЖИН.

На этой странице параметров я могу отключить ДАТЫ в сочетании с СЕССИЯМИ, чтобы отключить резервирование.

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;

    }

}
...