Можно ли упростить данный код?

global $woocommerce;
$custom_price = 0;  //$price - переменная с ценой    //id любого товара
$quantity = 1;      //кол-во
$cart_item_data = array('custom_price' => $custom_price);
$product_array = array();
$additional_product = array();

foreach (WC()->cart->get_cart() as $product_s) {
  $product_array[] = $product_s['product_id'];
}

if ($url != ''){
  foreach(WC()->cart->get_cart() as $product){
    $product_id_check = $product['product_id'];
    
    if($product_id_check == '49547'){ //if komplekt-vpevnene-chitannya-ros-mova
      if(!in_array('15340', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 15340, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50565;
      }
      elseif (in_array('15340', $product_array)) {$additional_product[] = 50565;}

      if(!in_array('12182', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 12182, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50574;
      }
      elseif (in_array('12182', $product_array)) {$additional_product[] = 50574;}

    }
    if($product_id_check == '53238'){ //if komplekt-vpevneniy-rahunok-ros-mova/
      if(!in_array('50572', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 50572, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50572;
      }
      elseif (in_array('50572', $product_array)) {$additional_product[] = 50572;}

      if(!in_array('50573', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 50573, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50573;
      }
      elseif (in_array('50573', $product_array)) {$additional_product[] = 50573;}

    }

    //ru language with ua schet
    if($product_id_check == '53240'){

      if(!in_array('50587', $product_array)){
        WC()->cart->add_to_cart( $product_id = 50587, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50587;
      }
      elseif (in_array('50587', $product_array)) {$additional_product[] = 50587;}
      
      if(!in_array('50590', $product_array)){
        WC()->cart->add_to_cart( $product_id = 50590, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50590;
      }
      elseif (in_array('50590', $product_array)) {$additional_product[] = 50590;}

    }
    if($product_id_check == '49546'){

      if(!in_array('50586', $product_array)){
        WC()->cart->add_to_cart( $product_id = 50586, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50586;
      }
      elseif (in_array('50586', $product_array)) {$additional_product[] = 50586;}
      
      if(!in_array('50581', $product_array)){
        WC()->cart->add_to_cart( $product_id = 50581, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 50581;
      }
      elseif (in_array('50581', $product_array)) {$additional_product[] = 50581;}

    }
  }
} else {
  foreach(WC()->cart->get_cart() as $product){
    $product_id_check = $product['product_id'];

    if($product_id_check == '53241'){ //if komplekt-vpevnene-chitannya-ros-mova
      if(!in_array('168', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 168, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 168;
      }
      elseif (in_array('168', $product_array)) {$additional_product[] = 168;}

      if(!in_array('166', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 166, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 166;
      }
      elseif (in_array('166', $product_array)) {$additional_product[] = 166;}

    }
    if($product_id_check == '49080'){ //if komplekt-vpevneniy-rahunok-ros-mova/
      if(!in_array('170', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 170, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 170;
      }
      elseif (in_array('170', $product_array)) {$additional_product[] = 170;}

      if(!in_array('173', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 173, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 173;
      }
      elseif (in_array('173', $product_array)) {$additional_product[] = 173;}

    }

    if($product_id_check == '49077'){ //if komplekt-vpevneniy-rahunok-ros-mova/
      if(!in_array('15340', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 15340, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 15340;
      }
      elseif (in_array('15340', $product_array)) {$additional_product[] = 15340;}

      if(!in_array('12182', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 12182, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 12182;
      }
      elseif (in_array('12182', $product_array)) {$additional_product[] = 12182;}

    }

    if($product_id_check == '53239'){ //if komplekt-vpevneniy-rahunok-ros-mova/
      if(!in_array('13809', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 13809, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 13809;
      }
      elseif (in_array('13809', $product_array)) {$additional_product[] = 13809;}

      if(!in_array('13401', $product_array)) {
        WC()->cart->add_to_cart( $product_id = 13401, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data);
        $additional_product[] = 13401;
      }
      elseif (in_array('13401', $product_array)) {$additional_product[] = 13401;}

    }
  }
}

Ответы (1 шт):

Автор решения: teran

Если у вас в зависимости от параметров всегда повторяются одни и те же действия, то сформируйте из этих параметров массив и обрабатывайте в цикле.

что-нибудь вроде такого:

$cart = WC()->cart->get_cart();
$products = array_column($cart, 'product_id');


$checks = [];
if ($url != ''){
    $checks = [ 
        49547 => [['pid' => 15340, 'add' => 50565], ['pid' => 12182, 'add' => 50574] ], 
        53238 => [['pid' => 50572, ], ['pid' => 50573] ],
        53249 => [['pid' => 50587, ], ['pid' => 50590] ],
        49546 => [['pid' => 50586, ], ['pid' => 50581] ],  
    ];
}
else {
    $checks = [.....];
}

foreach($cart as &$product){
    $product_id_check = $product['product_id'];

    if(array_key_exists($product_id_check, $checks){
        $check = $checks[$product_id_check]; 
        foreach($check as $c){
            if(!in_array($c['pid'], $products)){
                WC()->cart->add_to_cart( $c['pid'], 1, 0, [], $cart_item_data);         
            }   
            $additional_product[] = $c['add'] ?? $c['pid'];
        }
    }
}
→ Ссылка