Условная функция, которая проверяет, есть ли товары в корзине в Woocommerce 3 - PullRequest
0 голосов
/ 12 октября 2018

Привет решение, предоставленное здесь WooCommerce - Проверьте, есть ли товар в корзине работает отлично.Это код функции:

function woo_in_cart($arr_product_id) {
    global $woocommerce;
    $cartarray=array();

    foreach($woocommerce->cart->get_cart() as $key => $val ) {
       $_product = $val['product_id'];
       array_push($cartarray,$_product);
    }

    if (!empty($cartarray)) {
       $result = array_intersect($cartarray,$arr_product_id);
    }

    if (!empty($result)) {
       return true;
    } else {
       return false;
    };

}

Использование

  $my_products_ids_array = array(22,23,465);
if (woo_in_cart($my_products_ids_array)) {
  echo 'ohh yeah there some of that products in!';
}else {
  echo 'no matching products :(';
}

Но мне нужно использовать как будто (in_array), но пока не повезло.Что я делаю не так?

$my_products_ids_array = array("69286", "69287",);
if (in_array("69286", $my_products_ids_array)) {
    echo '<p>' . the_field ( 'cart_field', 'option' ) . '</p>';
}
if (in_array("69287", $my_products_ids_array)) {
    echo '<p>' . the_field ( 'cart_field-1', 'option' ) . '</p>';
}

Спасибо

1 Ответ

0 голосов
/ 12 октября 2018

Ваш основной код функции устарел.

Для расширенных настраиваемых полей (ACF):

  • необходимо использовать get_field() (что возвращает полезначение) вместо the_field() (это echo значение поля) .
  • Возможно, вам потребуется добавить идентификатор продукта в качестве второго аргумента в get_field('the_slug', $product_id ).

Так попробуйте:

function is_in_cart( $ids ) {
    // Initialise
    $found = false;

    // Loop Through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // For an array of product IDS
        if( is_array($ids) && ( in_array( $cart_item['product_id'], $ids ) || in_array( $cart_item['variation_id'], $ids ) ) ){
            $found = true;
            break;
        }
        // For a unique product ID (integer or string value)
        elseif( ! is_array($ids) && ( $ids == $cart_item['product_id'] || $ids == $cart_item['variation_id'] ) ){
            $found = true;
            break;
        }
    }

    return $found;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.

Пользовательская условная функция is_in_cart( $ids ) принимает строку (уникальный идентификатор продукта) или массив идентификаторов продукта.


Ваше повторное использование (ACF get_field может потребоваться идентификатор сообщения (идентификатор продукта)):

if ( is_in_cart( "69286" ) ) {
    echo '<p>' . get_field ( 'cart_field' ) . '</p>'; // or get_field ( 'cart_field', "69286" )
}
if ( is_in_cart( "69287" ) ) {
    echo '<p>' . get_field ( 'cart_field-1' ) . '</p>'; // or get_field ( 'cart_field', "69287" )
}
...