Выполнить поиск по массиву по нескольким значениям внутри функции - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь условно отобразить поля в кассе WooCommerce в зависимости от кода купона, введенного в корзину. Имеющийся у меня Php позволяет мне искать только один купон за раз. Как я могу отредактировать код, чтобы разрешить поиск нескольких кодов купонов и показать поле, если функция находит ЛЮБОЙ из кодов?

Я использовал существующий код Php, предоставленный разработчиком Plugnin, он отлично работает для одного значения.

Я также думал об использовании 'или', но недостаточно хорошо знаю синтаксис для реализации.

Я также пытался использовать in_array_any вместо in_array в коде, но он выдал ошибку. Возможно, потому что я не знаком с синтаксисом PHP и неправильно его реализовал.

function thwcfe_modify_field_condition_text_field_2($show){
    global $woocommerce;
    $applied_coupons = $woocommerce->cart->applied_coupons;
    $show = false;
    if(is_array($applied_coupons) && in_array("will", $applied_coupons)) 
    {
        $show = true;
    }
    return $show;
}
add_filter('thwcfe_show_field_where_did_we_meet', 'thwcfe_modify_field_condition_text_field_2');

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Следующее использование функции array_intersect() php позволит вам выполнять поиск из массива (с несколькими значениями) в другом массиве (с несколькими значениями).

Примечание: global $woocommerce и $woocommerce->cart устарели и заменены непосредственно на WC()->cart.

Вот ваш повторный код:

add_filter('thwcfe_show_field_where_did_we_meet', 'thwcfe_modify_field_condition_text_field_2');
function thwcfe_modify_field_condition_text_field_2( $show = false ){
    // HERE define your coupon codes in the array
    $targeted_coupons = array("will", "other");

    $applied_coupons  = (array) WC()->cart->get_applied_coupons(); // Applied coupons (array)

    return array_intersect($targeted_coupons, $applied_coupons) ? true : false;
}

Или, как предлагает @ dWinder , мы не можем проверить счет array_intersect(), чтобы он был больше 0, например:

return count( array_intersect($targeted_coupons, $applied_coupons) ) > 0 ? true : false;

Это тоже будет работать.

0 голосов
/ 06 апреля 2019

Я не могу комментировать для ясности, но вы могли бы использовать здесь выражение switch?

https://www.php.net/manual/en/control-structures.switch.php

Зависит от того, нужно ли вам быть динамичным или вы просто хотитежестко закодируйте некоторые ваучеры, но приведенные ниже должны работать для вас (не проверено, просто глядя на вопрос)

function thwcfe_modify_field_condition_text_field_2($show){
    global $woocommerce;
    $applied_coupons = $woocommerce->cart->applied_coupons;
    $show = false;
    if(is_array($applied_coupons)) {
        switch(true) {
          case(in_array("will", $applied_coupons) :
             return $show = true;
          case(in_array("another_coupon", $applied_coupons) :
             return $show = true;
          default:
             return $show;
         }
     }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...