مشاوره رایگان بانک وردپرس در خدمت شماست

با ما تماس بگیرید از اینکه صدای نازنین شما را می شونیم لذت میبریم و سعی میکنیم ، تا بهترین خدمات را به شما ارائه دهیم.

ارتباط با واتس آب با کلیک روی دکمه زیر:

ورود به پشتیبانی

گرویتی فرمز یکی از افزونه های منعطف و کاربردی وردپرس میباشد.

در این آموزش قصد داریم اعمال تخفیف به محصول و همچنین متغیرهایی نظیر مالیات و … برای قیمت نهایی را آموزش دهیم.

در واقع شما میتوانید همانند ووکامرس و Easy digital Downloads قیمت خود را بر اساس پارامترهای گوناگون متغیر نمایید.

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

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

1 – ابتدا در قالب خود به 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();

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

2016-11-13_4-37-32+ محصول : در قسمت توع فیلد : تنظیم شده توسط کاربر

+ محصول : در قسمت نوع فیلد : محاسباتی

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

{subtotal}*0.05

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

{subtotal}/0.05

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

2016-11-13_4-43-57+ در اخر هم مجموع قیمت را قرار میدهید تا قیمت نهایی شما به نمایش در آید.

هر سوالی داشتید در قسمت نظرات بپرسید و در این زمنیه تردید نفرمایید.

 

 

[تعداد: 3   میانگین:  3.7/5]

7
دیدگاه بگذارید

avatar
5 Comment threads
2 Thread replies
4 Followers
 
Most reacted comment
Hottest comment thread
6 Comment authors
حیدرمجتبیامینفرزادسید حسین موسوی Recent comment authors
  Subscribe  
جدیدترین قدیمی ترین محبوب ترین
ارسال اطلاعیه در صورتیکه
حیدر
مهمان
حیدر

سلام و خسته نباشید
من در gravity form ی فرم برای دریافت سفارش مشتری ایجاد کردم و درگاه پرداختاینترنتی هم بهش وصل کردم ولی میخام مشتری نصف مبلغ سفارش رو به عنوان پیش پرداخت واریز کنه
ولی هرکاری میطفا راهنماییم کنیدکنم مبلغ کل برای پرداخت ارسال میشه
ل

مجتبی
مهمان
مجتبی

وقت بخیر سوالی داشتم
امکانش هست توی فرم گرویتی یک فیلد به عنوان کد تخفیف بذاریم و هر کس با وارد کردن اون کد تخفیفی که ما بهش دادی ( امکان داره توی تبلیغات و یا موارد دیگری ما یک سری کدها را بدیم) قیمت تغییر کنه
میخواستم بدونم راهکار برای این موضوع چی هست

امین
مهمان
امین

ضمن سلام و تشکر از زحماتی که کشیدید

من از آخرین ورژن گرویتی فرم و گرویتی فرم فارسی استفاده میکنم
وقتی این کد رو به سایتم اضافه کردم سایت قطع شد و کفن سفید بالا میاد.

من فقط به کد تخفیف درصدی نیاز دارم
آیا راهی هست که بشه از این کد استفاده کنم؟

فرزاد
مهمان
فرزاد

سلام . در حال حاضر کل محصول رو جمع میکنه و مالیات رو محاسبه میکنه . آیا امکانش هست بعد از انتخاب یک محصول محاسبه کنه ؟

و اینکه من هر فیلد محصول رو یک رادیو باکس گذاشتم . اما کاربر می تونه همه موارد رو انتخاب کنه آیا راهی هست که فقط یکی از موارد را بتونه انتخاب کنه

سمیرا
مهمان
سمیرا

سلام این کارو میشه رو کل محصولات کرد یعنی همه ی محصولات یکدفعه ۳ درصد افزایش بها داشته باشن