Установить цену продажи товара на основе пользовательских полей в Woocommerce - PullRequest
0 голосов
/ 23 мая 2018

В 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'); 

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

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

1 Ответ

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

Делать это таким образом не очень хорошая идея:

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

Также ваш код полон ошибок, касающихся 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 вашей активной дочерней темы (или активной темы).Проверено и работает.

enter image description here

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