Установите цену продажи товара условно на основе настраиваемых полей в Woocommerce

В Woocommerce я установил два настраиваемых поля в своих продуктах:

  1. iadi_price по специальной цене продажи.
  2. iadi_date на произвольную дату.

Я хотел бы обновить цену продажи, если между указанной датой и сегодняшней датой осталось менее 3 дней.

Я написал следующий код:

function fiyatidegistir() {
global $product;
$bugun = time();
$yenifiyat = get_post_meta($product->ID, 'iadi_price', true); //new sale price
$kgn = get_post_meta($product->ID, 'iadi_date', true); // date
if(!empty($kgn)) {
    $kalan = $kgn - $bugun;
    $dakika = $kalan / 60;
    $saat = $dakika / 60;
    $gun = $saat / 24;
    $yil = floor($gun/365);
    $gun_farki = floor($gun - (floor($yil) * 365));
    if($gun_farki<4 && !empty($yenifiyat)) {
        update_post_meta($product->ID, '_price', $yenifiyat);
    }
}
}
add_action( 'woocommerce_before_main_content', 'fiyatidegistir'); 

Но не работает и ничего не происходит.

Что я делаю неправильно? Как я могу программно изменить продажную цену продукта на основе настраиваемых полей цены и даты, как описано?


person sakarya    schedule 22.05.2018    source источник


Ответы (2)


Делать это таким образом - не лучшая идея, поскольку:

  • Как вы будете управлять продуктами, которые были обновлены, чтобы избежать многократного обновления цен подряд.
  • Таким образом, он просто убьет ваш веб-сайт (для многих процессов).
  • Ваши товары не будут продаваться, так как вы обновите активную цену.
  • По окончании периода вы не сможете вернуться к начальной цене.

Также ваш код полон ошибок, касающихся WC_Products в Woocommerce и расчетов дат. И последнее, когда вы пишете код, лучше называть переменные и функции по-английски, комментировать ваш код тоже по-английски, так как любой может это понять.

Вместо этого попробуйте следующее, которое будет работать для простых продуктов, отображая продажную цену для связанных продуктов, когда ваши условия совпадают (дата и индивидуальная цена):

add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 20, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 20, 2 );
function conditional_product_sale_price( $price, $product ) {
    if( is_admin() ) return $price;

    $new_price = get_post_meta( $product->get_id(), 'iadi_price', true ); //new sale price
    $date      = get_post_meta( $product->get_id(), 'iadi_date', true ); // date

    if( ! empty($date) && ! empty($new_price) ) {
        $date_time      = (int) strtotime($date); // Convert date in time
        $now_time       = (int) strtotime("now"); // Now time in seconds
        $one_day        = 86400; // One day in seconds

        // Calculate the remaining days
        $remaining_days = floor( ( $date_time - $now_time ) / $one_day );

        if( $remaining_days >= 0 && $remaining_days < 4  )
            $price = $new_price;
    }
    return $price;
}

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

введите здесь описание изображения

person LoicTheAztec    schedule 23.05.2018
comment
Спасибо. Мы продаем образование. Последние три дня, пятидневные цены на билеты разные. мы меняем их вручную, я хотел сделать это / научиться легко. - person sakarya; 24.05.2018

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

add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_sale_price', 'conditional_product_sale_price', 10, 2 );

И вам необходимо убедиться, что вы изменили woocommerce_get_variation_prices_hash из-за сохраненных переходных процессов.

Вы можете найти суть, которую я создал для клиента, полезной

https://www.rent-a-ninja.org/programming/wordpress-plugin-entwickler-naehe-graz/woocommerce-custom-sale-price-for-custom-role/

person Xandl    schedule 09.01.2020