web-dev-qa-db-ja.com

WooCommerceカートでカートアイテムの製品IDを取得する

$cart_item = $woocommerce->cart->get_cart(); 

上記のコードがあります。

cart_itemでprint_rを実行すると、多次元配列が取得されます。

Array(    [a6292668b36ef412fa3c4102d1311a62] => Array        (            [product_id] => 6803

Product_idのみを取得するにはどうすればよいですか?

$ test = $cart_item['data'];を試しました

print_r($test);

うまくいきませんでした。

11
Kevin.a

Foreachループ内の各カートアイテムの_product ID_を取得するには(単純な製品の場合):

_foreach( WC()->cart->get_cart() as $cart_item ){
    $product_id = $cart_item['product_id'];
}
_

可変製品の場合、_variation ID_を取得するには:

_foreach( WC()->cart->get_cart() as $cart_item ){
    $variation_id = $cart_item['variation_id'];
}
_

または両方の場合(where _$cart_item['data']_ is _WC_Product_ Woocommerce 3+のオブジェクト]

_foreach( WC()->cart->get_cart() as $cart_item ){
    // compatibility with WC +3
    if( version_compare( WC_VERSION, '3.0', '<' ) ){
        $product_id = $cart_item['data']->id; // Before version 3.0
    } else {
        $product_id = $cart_item['data']->get_id(); // For version 3 or more
    }
}
_

更新:ループ外でのプロダクトIDの使用

1)ループを破る(カートの最初のアイテムID(製品ID)を取得するだけ)

_foreach( WC()->cart->get_cart() as $cart_item ){
    $product_id = $cart_item['product_id'];
    break;
}
_

カート内の最初の商品の_$product_id_変数を直接使用できます。


2)製品IDの配列の使用(カート内の各アイテムに1つ)

_$products_ids_array = array();

foreach( WC()->cart->get_cart() as $cart_item ){
    $products_ids_array[] = $cart_item['product_id'];
}
_
  • 最初のアイテムの製品IDを取得するには:_$products_ids_array[0];_
  • 2番目のアイテムの製品IDを取得するには:_$products_ids_array[1];_など…

カートのアイテムで製品カテゴリまたは製品タグを確認するにはWordPress has_term() like:

_foreach( WC()->cart->get_cart() as $cart_item ){
    // For product categories (term IDs, term slugs or term names)
    if( has_term( array('clothing','music'), 'product_cat', $cart_item['product_id'] ) ) {
        // DO SOMETHING
    }

    // For product Tags (term IDs, term slugs or term names)
    if( has_term( array('clothing','music'), 'product_tag', $cart_item['product_id'] ) ) {
        // DO SOMETHING ELSE
    }
}
_

カートアイテムが製品バリエーションの場合、親変数productを取得するため、常に_$cart_item['product_id']_を使用します。

製品のバリエーションは、カスタム分類を製品カテゴリおよび製品タグとして処理しません

26
LoicTheAztec