Wordpress + ACF - фильтрация с помощью параметров множественного выбора в поле репитера - PullRequest
0 голосов
/ 05 августа 2020

Я интегрирую форму метода $ _POST с фильтрацией ajax, чтобы фильтровать через репитер, поданный во все сообщения. поэтому я не фильтрую сообщения (всегда отображаются все сообщения), а просто фильтрую внутри каждого сообщения.

поле повторителя содержит два подполя - multiselect и Wysiwyg Editor. Теперь, в соответствии с тем, что пользователь выбрал во внешней форме, если оно равно значениям множественного выбора поста, оно должно отображать поле редактора Wysiwyg соответствующего множественного выбора.

У меня это работает без множественного выбора. но с помощью множественного выбора я не могу получить условное значение ВСЕ выбранные значения фильтров, чтобы быть точным совпадением ВСЕХ значений множественного выбора. Итак, результат, который я получаю, как и в foreach l oop, - это несколько полей редактора Wysiwyg.

Я много чего пробовал, это пример кода одного из них: ('cond_options' - множественный выбор 'описание' - Wysiwyg Editor '' погода / небо / ночь '- значения фильтров)

if ( have_rows('cond-repeater') ):
   while (have_rows('cond-repeater') ) : the_row();

        $select_options = get_sub_field('cond_options');
        $selectdesc = get_sub_field('description');

            if( $select_options ):
               foreach( $select_options as $select ):
                    if( isset( $_POST['weather'] ) && $_POST['weather'] && isset( $_POST['sky'] ) && $_POST['sky'] && isset( $_POST['night'] ) && $_POST['night'] == $select  ){
                        echo $selectdesc;
                    }  
            echo $select; //just to see the output of selected options
                 endforeach; 

            endif; 

    endwhile;
endif;

1 Ответ

0 голосов
/ 05 августа 2020

Не зная о ваших данных и фактическом конечном результате, которого вы пытаетесь достичь. Я собрал кое-что, что может помочь направить вас в правильном направлении.

Главное, на что следует обратить внимание, это использование in_array, с помощью которого мы можем проверить, существует ли значение в множественном выборе, не имея на l oop через него с помощью foreach.

Дайте мне знать, если это поможет.

$_weather = !empty( $_POST[ 'weather' ] ) ? $_POST[ 'weather' ] : null;
$_sky = !empty( $_POST[ 'sky' ] ) ? $_POST[ 'sky' ] : null;
$_night = !empty( $_POST[ 'night' ] ) ? $_POST[ 'night' ] : null;

if ( have_rows('cond-repeater') ) {
    while ( have_rows('cond-repeater') ) {
        the_row();

        if ( $options = get_sub_field( 'cond_options' ) ) {

            // Check payload includes all required parameters
            if ( $_weather && $_sky && $_night ) {

                // Check if all parameters exist in the multiselect value
                if ( in_array( $_weather, $options ) && in_array( $_sky, $options ) && in_array( $_night, $options ) ) {
                    echo get_sub_field( 'description' );
                } else {
                    echo $select; // Warning: Undefined variable!
                }
            }
        }

    }
}
...