Включить расчетный лимит скидки на корзину в Woocommerce - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь собрать скидку WooCommerce без использования купонов, и все работает, кроме функции "limit".

Каждый новый клиент получит 20% (впервые покупатели) на свою покупку, но эти 20% не могут и не должны превышать 15 долларов.

Вот код, который является плагином, и мне нужна помощь, как «сказать ему», что если сумма скидки в корзине больше 15, то удалите ее и поставьте 15.

Вот что не работает: if ( $discount = $discountValue/100 >15) return $discountLimit;

Полный код:

    function loc_first_order_add_admin_menu(  ) { 
    add_submenu_page( 'woocommerce', 'First Order Discount', 'First Order Discount', 'manage_options', 'woocomerce_first_order_discount', 'first_order_add_options_page' );
}

function loc_first_order_add_settings_init(  ) { 
    register_setting( 'pluginPage', 'first_order_add_settings' );
    add_settings_section( 'first_order_add_pluginPage_section', __( 'This will give all first time customers a discount of your choice without using a coupon.', 'woo-first-discount' ), '', 'pluginPage' );
    add_settings_field( 'first_order_choose', __( 'Type', 'woo-first-discount' ), 'loc_first_order_options', 'pluginPage', 'first_order_add_pluginPage_section' );
    add_settings_field( 'first_order_add_value',  __( 'Value', 'woo-first-discount' ), 'loc_first_order_number', 'pluginPage',  'first_order_add_pluginPage_section' );
    add_settings_field( 'first_order_add_limit',  __( 'Limit', 'woo-first-discount' ), 'loc_first_order_limit', 'pluginPage',   'first_order_add_pluginPage_section' );
}

function loc_first_order_options(  ) { 
    $options = get_option( 'first_order_add_settings' );
    ?>
    <input id="off" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'off' ); ?> value='off'>
    <label for="off"><?php echo __( 'Disable', 'woo-first-discount' ); ?></label>
    <br>
    <input id="fixed" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'fixed' ); ?> value='fixed'>
    <label for="fixed"><?php echo __( 'Fixed', 'woo-first-discount' ); ?></label>
    <br>
    <input id="percent" type='radio' name='first_order_add_settings[first_order_choose]' <?php checked( $options['first_order_choose'], 'percent' ); ?> value='percent'>
    <label for="percent"><?php echo __( 'Percentage', 'woo-first-discount' ); ?></label>
    <?php
}


function loc_first_order_limit(  ) { 
    $options = get_option( 'first_order_add_settings' );
    ?>
    <input type='number' min="0" name='first_order_add_settings[first_order_add_limit]' value='<?php echo $options['first_order_add_limit']; ?>'>
    <?php
}

function loc_first_order_number(  ) { 
    $options = get_option( 'first_order_add_settings' );
    ?>
    <input type='number' min="0" name='first_order_add_settings[first_order_add_value]' value='<?php echo $options['first_order_add_value']; ?>'>
    <?php
}

function first_order_add_options_page(  ) { 
    ?>
    <form action='options.php' method='post'>
        <h2><?php echo __( 'First Order Discount', 'woo-first-discount' ); ?></h2>
        <?php
        settings_fields( 'pluginPage' );
        do_settings_sections( 'pluginPage' );
        submit_button();
        ?>
    </form>
    <?php
}

function loc_first_order_discount() {
    global $wpdb, $woocommerce;
    if ( is_user_logged_in() ) {
        $customer_id = get_current_user_id();
        $orderNumCheck = wc_get_customer_order_count( $customer_id );
        $options = get_option( 'first_order_add_settings' );
        $discountType = $options['first_order_choose'];
        $discountValue = $options['first_order_add_value'];
        $discountLimit = $options['first_order_add_limit'];

        if ($orderNumCheck == 0 and $discountType != 'off') {
            $subtotal = WC()->cart->cart_contents_total;
            if ($discountType == 'fixed') {
                WC()->cart->add_fee( 'First Time Order Discount ', -$discountValue );
            } else {
                if ( $discount = $discountValue/100 >15) return $discountLimit;
                WC()->cart->add_fee( 'First Time Order Discount ', -$subtotal*$discount );
            }
        } else {
            WC()->cart->add_fee( 'First Time Order Discount ', 0 );
        }
    }
}

add_action( 'woocommerce_cart_calculate_fees', 'loc_first_order_discount' );

add_filter( 'woocommerce_checkout_login_message', 'loc_return_customer_message' );
function loc_return_customer_message() {
return '<b>Have you shopped with us before?</b><br>Did you know that all first time orders automatically receives a 20% discount with a maximum value of 15 dollars?<br>';
}

Любая помощь приветствуется.

1 Ответ

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

Я пересмотрел весь ваш код функции, так как он немного устарел. Попробуйте это:

add_action( 'woocommerce_cart_calculate_fees', 'loc_first_order_discount', 20, 1 );
function loc_first_order_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( ! is_user_logged_in() )
        return; // Only for logged in users

    $customer_id   = get_current_user_id();
    $orderNumCheck = wc_get_customer_order_count( $customer_id );
    $options       = get_option( 'first_order_add_settings' );
    $discountType  = $options['first_order_choose'];

    if ( $orderNumCheck > 0 || $discountType == 'off' )
        return; // Exit

    $discountValue = $options['first_order_add_value'];
    $discountLimit = $options['first_order_add_limit'];
    $subtotal      = $cart->cart_contents_total;
    $discount_text = __('First Time Order Discount ', 'woocommerce');
    $discount      = 0;


    if ($discountType == 'fixed') {
        $discount = $discountValue;
    } else {
        $discount = $subtotal / 0.20; // 20%

        if( $discount > $discountLimit )
            $discount = $discountLimit;
    }

    if( $discount > 0 )
        $cart->add_fee( $discount_text, -$discount );
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Теперь он должен работать как положено ...

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