Условно изменить конкретную цену товара в Woocommerce - PullRequest
0 голосов
/ 30 мая 2018

Я хотел бы изменить конкретный продукт в Woocommerce, добавив программно к его оригиналу сумму $ 10, ИСКЛЮЧИТЬ в этих случаях :

  • На страницах конкретного продукта, которыезаказываемые продукты (Woocommerce Bookings), принадлежащие к определенной категории «C».
  • Если какой-либо товар в корзине относится к этой категории «C».

Я использовал этот код ответа на один из моих вопросов до сих пор.Но мне нужно отображать измененную цену этого конкретного продукта везде, кроме тех страниц продукта, которые можно забронировать, в начале.

У меня также есть этот код, который отображает цену Force Sells рядом с заголовками.Это должно по-прежнему отображать первоначальную цену конкретного продукта на страницах этого продукта, которые можно забронировать в разделе Force Sells:

function wc_forcesells_product_price( $name, $product ) {
    // Only in single product pages
    if( ! is_product() ) return $name;

    // The product name + the product formatted price
    return $name . ' (' . wc_price( wc_get_price_to_display( $product ) ) . ')';
}
add_filter( 'woocommerce_product_title', 'wc_forcesells_product_price', 20, 2 );

Ссылка выше: Добавить цену рядом с Woocommerce Force Sells .

1 Ответ

0 голосов
/ 30 мая 2018

Обновлен для обработки нескольких идентификаторов продуктов, если это необходимо.

Попробуйте выполнить следующее, чтобы для определенного идентификатора продукта отображалась пользовательская цена везде , за исключением :

  • На страницах бронирования продуктов для проката
  • Когда категория продукта находится в корзине

Код также изменит эту пользовательскую цену продукта в корзине , за исключением когда определенная категория товара находится в корзине.

Вам нужно будет установить следующие функции:

  • Идентификатор конкретного продукта
  • Идентификаторы продуктов бронированиянанять
  • Сумма дополнительной цены
  • Категория товара (Id slug или name)

Код:

// Change product ID 87 price everywhere on front end EXCEPT:
// - On booking products to hire pages
// - When a product category is in cart
add_filter( 'woocommerce_get_price_html', 'product_id_87_displayed_price', 10, 2 );
function product_id_87_displayed_price( $price_html, $product ) {
    // Only for product ID 87
    if( in_array( $product->get_id(), array( 87, 2799 ) ) ){ 
        return $price_html; // Exit

    // HERE set booking products IDs to hire in the array
    $product_ids_to_hire = array( 53, 738 );

    // HERE set your product category term ID, slug or name
    $product_category = 'hoodies';

    // HERE set the price additional amount
    $addp = 10;

    // EXCEPT on booking products to hire pages
    if( is_single($product_ids_to_hire) ) return $price_html; // Exit

    // Checking for the product category in cart items loop
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) )
             return $price_html; // Product category found ==> Exit
    }

    if ( '' !== $product->get_price() && ! $product->is_on_sale() ) {
        $price_html = wc_price( wc_get_price_to_display( $product ) + $addp ) . $product->get_price_suffix();
    }
    return $price_html;
}

// Add custom calculated price to cart item data for product ID 87
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_simple_product_custom_price', 20, 2 );
function add_cart_simple_product_custom_price( $cart_item_data, $product_id ){
    // Only for product ID 87
    if( ! in_array( $product->get_id(), array( 87 ) ) ) 
        return $cart_item_data; // Exit

    // HERE set the price additional amount
    $addp = 10;

    $product = wc_get_product($product_id); // The WC_Product Object
    $price   = (float) $product->get_price(); // The product price

    // Set the custom amount in cart object
    $cart_item_data['new_price'] = $price + $addp;

    return $cart_item_data;
}

// Set custom calculated price to cart for product ID 87
add_action( 'woocommerce_before_calculate_totals', 'set_cart_simple_product_custom_price', 20, 1 );
function set_cart_simple_product_custom_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE set your product category term ID, slug or name
    $product_category = 'hoodies';

    // 1st cart items Loop: checking for the product category
    foreach ( $cart->get_cart() as $cart_item ) {
        if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) )
            return; // Product category found ==> We EXIT from this function
    }

    // 2nd Loop: Changing cart item prices (Product category not found)
    foreach ( $cart->get_cart() as $cart_item ) {
        if( isset($cart_item['new_price']))
            $cart_item['data']->set_price( $cart_item['new_price'] );
    }
}

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

Должно также работать с вашей wc_forcesells_product_price() функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...