如果产品 ID 在购物车中并且也在受限数组中输出匹配的 ID [重复]

问题描述 投票:0回答:1

我有这些功能可以检查购物车中的产品 ID,但我需要使用变量

$products_ids
.

将其与添加到表单的产品 ID 数组进行检查

这会检查购物车中的产品 ID:

 $product_cart_id = WC()->cart->generate_cart_id( $product_ids );
 $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

这存储在管理字段中添加的产品 ID:

$product_ids = get_option('restricted_product_ids');

只有当它们包含在 $products_ids 数组和购物车中时,我才需要输出匹配的 id。

我想我需要使用

in_array()
array_intersect()

这是我试过的:

$product_ids     = get_option('restricted_product_ids');

$product_cart_id = WC()->cart->generate_cart_id( $product_ids );
$in_cart         = WC()->cart->find_product_in_cart( $product_cart_id );

echo var_dump( in_array( $in_cart, array( $product_ids ) ) );

还有这个:

$product_cart_id = WC()->cart->generate_cart_id( $product_ids );
$in_cart         = WC()->cart->find_product_in_cart( $product_cart_id );
    
$ids             = array_intersect( $product_ids, $in_cart );

更新:

$product_ids     = get_option('restricted_product_id
s');

   returns string '111342, 111347'

不过,我也可以这样输出:

   array (size=2)
        0 => string '111342' (length=6)
        1 => string '111347' (length=6)

更新:我也试过这个:

$cart_ids = array_merge(
        wp_list_pluck(WC()->cart->get_cart_contents(), 'variation_id'),
        wp_list_pluck(WC()->cart->get_cart_contents(), 'product_id')
    );
   
    $product_ids = get_option('restricted_product_ids');
    
    $ids = array_intersect( $cart_ids, $products_ids );

并使用 $ids 打印匹配的 ID,但我得到的是数组而不是 ID。

当我对受限 ID 进行 var_dump 时,我得到:

string '111342, 111347'

和 int 用于购物车 ID

array (size=1)
  'e877cbddd23b3bfa5b77782ba905b32e' => int 111347
php arrays multidimensional-array woocommerce conditional-statements
1个回答
0
投票

这应该可以解决问题...

// Convert comma separated string of ids into an array if integers.
$restricted_product_ids = array_filter( array_map( function( $id ) {
    return absint( $id );
}, explode( ',', get_option( 'restricted_product_ids' ) ) ) );

// Our output array.
$ids = [];

// Loop through each item in the cart.
foreach( WC()->cart->get_cart() as $cart_item ) {

    // Get the product id.
    $product_id = absint( $cart_item[ 'product_id' ] );

    // Check if the product id is restricted.
    if ( in_array( $product_id, $restricted_product_ids ) ) {

        // Add it to our output array.
        $ids[] = $product_id;
    }
}

我们获取购物车中的所有商品并循环遍历它们。在循环中,我们可以访问每个项目的产品 ID。使用产品 ID,我们可以检查它是否存在于受限数组中,然后将其推送到我们的输出。

© www.soinside.com 2019 - 2024. All rights reserved.