اضافه کردن مالیات ،تخفیف،درصد به قیمت Gravity Forms

سلام دوستان

گرویتی فرمز یکی از افزونه های منعطف و کاربردی وردپرس میباشد.
در این آموزش قصد داریم اعمال تخفیف به محصول و همچنین متغیرهایی نظیر مالیات و … برای قیمت نهایی را آموزش دهیم.
در واقع شما میتوانید همانند ووکامرس و Easy digital Downloads قیمت خود را بر اساس پارامترهای گوناگون متغیر نمایید.

نمونه ی تخفیف محصول در Gravity Forms  :

 

آموزش اعمال تخفیف و مالیات در Gravity Fomrs :

۱ – ابتدا در قالب خود به Function.php این کد را ضافه میکنید : (قبل از هر اقدامی ، از فایل Function.php خود ، نسخه پشتیبان تهیه کنید.)

class GWCalcSubtotal {
    public static $merge_tag = '{subtotal}';
    function __construct() {
        // front-end
        add_filter( 'gform_pre_render', array( $this, 'maybe_replace_subtotal_merge_tag' ) );
        add_filter( 'gform_pre_validation', array( $this, 'maybe_replace_subtotal_merge_tag_submission' ) );
        // back-end
        add_filter( 'gform_admin_pre_render', array( $this, 'add_merge_tags' ) );
    }
    /**
    * Look for {subtotal} merge tag in form fields 'calculationFormula' property. If found, replace with the
    * aggregated subtotal merge tag string.
    *
    * @param mixed $form
    */
    function maybe_replace_subtotal_merge_tag( $form, $filter_tags = false ) {
        
        foreach( $form['fields'] as &$field ) {
            
            if( current_filter() == 'gform_pre_render' && rgar( $field, 'origCalculationFormula' ) )
                $field['calculationFormula'] = $field['origCalculationFormula'];
            
            if( ! self::has_subtotal_merge_tag( $field ) )
                continue;
            $subtotal_merge_tags = self::get_subtotal_merge_tag_string( $form, $field, $filter_tags );
            $field['origCalculationFormula'] = $field['calculationFormula'];
            $field['calculationFormula'] = str_replace( self::$merge_tag, $subtotal_merge_tags, $field['calculationFormula'] );
        }
        return $form;
    }
    
    function maybe_replace_subtotal_merge_tag_submission( $form ) {
        return $this->maybe_replace_subtotal_merge_tag( $form, true );
    }
    /**
    * Get all the pricing fields on the form, get their corresponding merge tags and aggregate them into a formula that
    * will yeild the form's subtotal.
    *
    * @param mixed $form
    */
    static function get_subtotal_merge_tag_string( $form, $current_field, $filter_tags = false ) {
        
        $pricing_fields = self::get_pricing_fields( $form );
        $product_tag_groups = array();
        
        foreach( $pricing_fields['products'] as $product ) {
            $product_field = rgar( $product, 'product' );
            $option_fields = rgar( $product, 'options' );
            $quantity_field = rgar( $product, 'quantity' );
            // do not include current field in subtotal
            if( $product_field['id'] == $current_field['id'] )
                continue;
            $product_tags = GFCommon::get_field_merge_tags( $product_field );
            $quantity_tag = 1;
            // if a single product type, only get the "price" merge tag
            if( in_array( GFFormsModel::get_input_type( $product_field ), array( 'singleproduct', 'calculation', 'hiddenproduct' ) ) ) {
                // single products provide quantity merge tag
                if( empty( $quantity_field ) && ! rgar( $product_field, 'disableQuantity' ) )
                    $quantity_tag = $product_tags[2]['tag'];
                $product_tags = array( $product_tags[1] );
            }
            // if quantity field is provided for product, get merge tag
            if( ! empty( $quantity_field ) ) {
                $quantity_tag = GFCommon::get_field_merge_tags( $quantity_field );
                $quantity_tag = $quantity_tag[0]['tag'];
            }
            
            if( $filter_tags && ! self::has_valid_quantity( $quantity_tag ) )
                continue;
            
            $product_tags = wp_list_pluck( $product_tags, 'tag' );
            $option_tags = array();
            
            foreach( $option_fields as $option_field ) {
                if( is_array( $option_field['inputs'] ) ) {
                    $choice_number = 1;
                    foreach( $option_field['inputs'] as &$input ) {
                        //hack to skip numbers ending in 0. so that 5.1 doesn't conflict with 5.10
                        if( $choice_number % 10 == 0 )
                            $choice_number++;
                        $input['id'] = $option_field['id'] . '.' . $choice_number++;
                    }
                }
                $new_options_tags = GFCommon::get_field_merge_tags( $option_field );
                if( ! is_array( $new_options_tags ) )
                    continue;
                if( GFFormsModel::get_input_type( $option_field ) == 'checkbox' )
                    array_shift( $new_options_tags );
                $option_tags = array_merge( $option_tags, $new_options_tags );
            }
            $option_tags = wp_list_pluck( $option_tags, 'tag' );
            $product_tag_groups[] = '( ( ' . implode( ' + ', array_merge( $product_tags, $option_tags ) ) . ' ) * ' . $quantity_tag . ' )';
        }
        $shipping_tag = 0;
        /* Shipping should not be included in subtotal, correct?
        if( rgar( $pricing_fields, 'shipping' ) ) {
            $shipping_tag = GFCommon::get_field_merge_tags( rgars( $pricing_fields, 'shipping/0' ) );
            $shipping_tag = $shipping_tag[0]['tag'];
        }*/
        $pricing_tag_string = '( ( ' . implode( ' + ', $product_tag_groups ) . ' ) + ' . $shipping_tag . ' )';
        return $pricing_tag_string;
    }
    
    /**
    * Get all pricing fields from a given form object grouped by product and shipping with options nested under their
    * respective products.
    *
    * @param mixed $form
    */
    static function get_pricing_fields( $form ) {
        $product_fields = array();
        foreach( $form["fields"] as $field ) {
            if( $field["type"] != 'product' )
                continue;
            $option_fields = GFCommon::get_product_fields_by_type($form, array("option"), $field['id'] );
            // can only have 1 quantity field
            $quantity_field = GFCommon::get_product_fields_by_type( $form, array("quantity"), $field['id'] );
            $quantity_field = rgar( $quantity_field, 0 );
            $product_fields[] = array(
                'product' => $field,
                'options' => $option_fields,
                'quantity' => $quantity_field
                );
        }
        $shipping_field = GFCommon::get_fields_by_type($form, array("shipping"));
        return array( "products" => $product_fields, "shipping" => $shipping_field );
    }
    
    static function has_valid_quantity( $quantity_tag ) {
        if( is_numeric( $quantity_tag ) ) {
            $qty_value = $quantity_tag;
        } else {
            // extract qty input ID from the merge tag
            preg_match_all( '/{[^{]*?:(\d+(\.\d+)?)(:(.*?))?}/mi', $quantity_tag, $matches, PREG_SET_ORDER );
            $qty_input_id = rgars( $matches, '0/1' );
            $qty_value = rgpost( 'input_' . str_replace( '.', '_', $qty_input_id ) );
        }
        
        return floatval( $qty_value ) > 0;
    }
    
    function add_merge_tags( $form ) {
        $label = __('Subtotal', 'gravityforms');
        ?>

        <script type="text/javascript">
            // for the future (not yet supported for calc field)
            gform.addFilter("gform_merge_tags", "gwcs_add_merge_tags");
            function gwcs_add_merge_tags( mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option ) {
                mergeTags["pricing"].tags.push({ tag: '<?php echo self::$merge_tag; ?>', label: '<?php echo $label; ?>' });
                return mergeTags;
            }
            // hacky, but only temporary
            jQuery(document).ready(function($){
                var calcMergeTagSelect = $('#field_calculation_formula_variable_select');
                calcMergeTagSelect.find('optgroup').eq(0).append( '<option value="<?php echo self::$merge_tag; ?>"><?php echo $label; ?></option>' );
            });
        </script>

        <?php
        //return the form object from the php hook
        return $form;
    }
    static function has_subtotal_merge_tag( $field ) {
        
        // check if form is passed
        if( isset( $field['fields'] ) ) {
            $form = $field;
            foreach( $form['fields'] as $field ) {
                if( self::has_subtotal_merge_tag( $field ) )
                    return true;
            }
        } else {
            if( isset( $field['calculationFormula'] ) && strpos( $field['calculationFormula'], self::$merge_tag ) !== false )
                return true;
        }
        return false;
    }
}
new GWCalcSubtotal();

 

۲ – حالا از منوی فرم یک فرم تازه ایجاد کنید و این موارد را به آن اضافه نمایید :

محصول : در قسمت توع فیلد : تنظیم شده توسط کاربر
محصول : در قسمت نوع فیلد : محاسباتی

سپس این کد را قرار میدهید :

{subtotal}*0.05

در این فرمول من با ضرب مجموع قیمت در ۰.۰۵ درواقع به عنوان مالیات ۵ درصد به رقم اضافه کردم..اگر شما بخواهید به کاربر تخفیف دهید میتوانید از این فرمول استفاده کنید

{subtotal}/0.05

در اینجا تقسیم برای ۰.۰۵ شده پس به کاربر ۵ درصد تخفیف میدهد.

 

+ در اخر هم مجموع قیمت را قرار میدهید تا قیمت نهایی شما به نمایش در بیاید.
امیدواریم این مقاله برای شما مفید بوده باشه ، منتظر نظرات شما هستیم …

نکات مهم دانلود:

قبل از دانلود فایل و هرگونه استفاده از سایت و لینک ها ابتدا قوانین و مقررات آرا وب کو را مطالعه و تایید نمایید.
بخشی از آرشیو قدیمی سایت از روی سرور حذف شده است در صورت غیرفعال بودن لینک ها از طریق نظرات اطلاع رسانی نمایید.
آرا وب کو تنها با دامنه ir. فعالیت میکند و دیگر دامنه های مشابه جعلی می‌باشند و ارتباطی با ما ندارند.
جهت درخواست فایل مورد نظر خود به صفحه تماس با ما مراجعه و درخواست خود را ارسال کنید.
اطلاعات پشتیبانی وردپرس را جهت بهبود عملکرد سایتتان ، مطالعه کنید.
سوالات و مشکلات خود را در رابطه با همین پست در نظرات مطرح کنید.
جهت سفارش طراحی سایت از بخش مربوطه اقدام کنید.
 

2 Comments

  1. امین گفت:

    سلام من با آخرین ورژن گرویتی فرم و گرویتی فرم فارسی تست کردم ولی بعد از اضافه کردن این کدها کلا دیگه سایت بالا نمیاد و کفن سفید میشه
    نیاز به تخفیف درصدی دارم
    ـآیا راه حلی هست؟

دیدگاهتان را بنویسید