Можно ли упростить данный код?
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'];
}
}
}