WooCommerce - Gravity Forms产品附加组件 - 从购物车总计中排除所选选项总计

时间:2017-05-01 05:28:53

标签: php wordpress woocommerce gravity-forms-plugin

我需要从购物车总数中排除的GF产品附加组件选项。

我卖的产品是100美元。我需要购物车总额只需100美元+税。我不希望选项总数包含在其中。可以在购物车项目说明中显示它。这些选项的总数是每月重复出现并由客户离线支付,因此我不需要他们预先支付。

插件的源代码:WooCommerce - Gravity Forms Product Add-Ons

以下代码来自插件中的“gravityforms-product-addons-cart.php”。我不知道从哪里开始我需要做的事情。

class WC_GFPA_Cart {

private static $instance;

public static function register() {
    if ( self::$instance == null ) {
        self::$instance = new WC_GFPA_Cart;
    }
}

private function __construct() {
    // Filters for cart actions

    add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), 10, 2 );
    add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 10, 2 );
    add_filter( 'woocommerce_get_item_data', array( $this, 'get_item_data' ), 10, 2 );
    add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), 10, 1 );

    add_action( 'woocommerce_checkout_create_order_line_item', array( $this, 'order_item_meta' ), 10, 3 );
    add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 99, 3 );

    //Order Again
    add_filter( 'woocommerce_order_again_cart_item_data', array(
        $this,
        'on_get_order_again_cart_item_data'
    ), 10, 3 );
}

//Helper function, used when an item is added to the cart as well as when an item is restored from session.
public function add_cart_item( $cart_item ) {
    global $woocommerce;

    // Adjust price if required based on the gravity form data
    if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
        //Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
        $err_level = error_reporting();
        error_reporting( 0 );

        $gravity_form_data = $cart_item['_gravity_form_data'];
        $form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );

        if ( empty( $form_meta ) ) {
            $_product = $cart_item['data'];
            $woocommerce->add_error( $_product->get_title() . __( ' is invalid.  Please remove and try readding to the cart', 'wc_gf_addons' ) );

            return $cart_item;
        }

        $lead = $cart_item['_gravity_form_lead'];

        $products = array();
        $total    = 0;

        $lead['id'] = uniqid() . time() . rand();

        $products = $this->get_product_fields( $form_meta, $lead );
        if ( ! empty( $products["products"] ) ) {

            foreach ( $products["products"] as $product ) {
                $price = GFCommon::to_number( $product["price"] );
                if ( is_array( rgar( $product, "options" ) ) ) {
                    $count = sizeof( $product["options"] );
                    $index = 1;
                    foreach ( $product["options"] as $option ) {
                        $price += GFCommon::to_number( $option["price"] );
                        $class = $index == $count ? " class='lastitem'" : "";
                        $index ++;
                    }
                }
                $subtotal = floatval( $product["quantity"] ) * $price;
                $total += $subtotal;
            }

            $total += floatval( $products["shipping"]["price"] );
        }

        $cart_item['data']->adjust_price( $total );
        $cart_item['_gform_total'] = $total;
        error_reporting( $err_level );
    }


    return $cart_item;
}

//When the item is being added to the cart.
public function add_cart_item_data( $cart_item_meta, $product_id ) {
    if ( ! isset( $_POST['gform_old_submit'] ) ) {
        return $cart_item_meta;
    }

    if ( isset( $cart_item_meta['_gravity_form_data'] ) && isset( $cart_item_meta['_gravity_form_lead'] ) ) {
        return $cart_item_meta;
    }

    $gravity_form_data                    = wc_gfpa()->get_gravity_form_data( $product_id );
    $cart_item_meta['_gravity_form_data'] = $gravity_form_data;

    if ( $gravity_form_data && is_array( $gravity_form_data ) && isset( $gravity_form_data['id'] ) && intval( $gravity_form_data['id'] ) > 0 ) {

        $form_id   = $gravity_form_data['id'];
        $form_meta = RGFormsModel::get_form_meta( $form_id );
        $form_meta = gf_apply_filters( array( 'gform_pre_render', $form_id ), $form_meta );

        //Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
        $err_level = error_reporting();
        error_reporting( 0 );

        //MUST disable notifications manually.
        add_filter( 'gform_disable_user_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
        add_filter( 'gform_disable_admin_notification_' . $form_id, array(
            $this,
            'disable_notifications'
        ), 10, 3 );
        add_filter( 'gform_disable_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );

        add_filter( "gform_confirmation_" . $form_id, array( $this, "disable_confirmation" ), 10, 4 );

        if ( empty( $form_meta ) ) {
            return $cart_item_meta;
        }

        GFFormDisplay::$submission[ $form_id ] = null;
        require_once( GFCommon::get_base_path() . "/form_display.php" );
        $_POST['gform_submit'] = $_POST['gform_old_submit'];
        GFFormDisplay::process_form( $form_id );
        $_POST['gform_old_submit'] = $_POST['gform_submit'];
        unset( $_POST['gform_submit'] );

        $lead                                 = GFFormDisplay::$submission[ $form_id ]['lead'];
        $cart_item_meta['_gravity_form_lead'] = array(
            'form_id'    => $form_id,
            'source_url' => $lead['source_url'],
            'ip'         => $lead['ip']
        );

        foreach ( $form_meta['fields'] as $field ) {
            if ( isset( $field['displayOnly'] ) && $field['displayOnly'] ) {
                continue;
            }

            $value = $this->get_lead_field_value( $lead, $field );


            $inputs = $field instanceof GF_Field ? $field->get_entry_inputs() : rgar( $field, 'inputs' );
            if ( is_array( $inputs ) ) {
                //making sure values submitted are sent in the value even if
                //there isn't an input associated with it
                $lead_field_keys = array_keys( $lead );
                natsort( $lead_field_keys );
                foreach ( $lead_field_keys as $input_id ) {
                    if ( is_numeric( $input_id ) && absint( $input_id ) == absint( $field->id ) ) {
                        $cart_item_meta['_gravity_form_lead'][ strval( $input_id ) ] = $value[ strval( $input_id ) ];
                    }
                }
            } else {
                $cart_item_meta['_gravity_form_lead'][ strval( $field['id'] ) ] = $value;
            }
        }

        if ( apply_filters( 'woocommerce_gravityforms_delete_entries', true ) ) {
            $this->delete_entry( $lead );
        }

        error_reporting( $err_level );
    }

    return $cart_item_meta;
}

public function get_cart_item_from_session( $cart_item, $values ) {

    if ( isset( $values['_gravity_form_data'] ) ) {
        $cart_item['_gravity_form_data'] = $values['_gravity_form_data'];
    }

    if ( isset( $values['_gravity_form_lead'] ) ) {
        $cart_item['_gravity_form_lead'] = $values['_gravity_form_lead'];
    }

    if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
        $this->add_cart_item( $cart_item );
    }

    return $cart_item;
}

public function get_item_data( $other_data, $cart_item ) {
    if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
        //Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
        $err_level = error_reporting();
        error_reporting( 0 );

        $gravity_form_data = $cart_item['_gravity_form_data'];
        $form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );
        $form_meta         = gf_apply_filters( array( 'gform_pre_render', $gravity_form_data['id'] ), $form_meta );
        if ( ! empty( $form_meta ) ) {

            $lead = $cart_item['_gravity_form_lead'];

            //$lead['id'] = uniqid() . time() . rand();

            $products       = $this->get_product_fields( $form_meta, $lead );
            $valid_products = array();
            foreach ( $products['products'] as $id => $product ) {
                if ( $product['quantity'] ) {
                    $valid_products[] = $id;
                }
            }

            foreach ( $form_meta['fields'] as $field ) {

                if ( ( isset( $field['inputType'] ) && $field['inputType'] == 'hiddenproduct' ) || ( isset( $field['displayOnly'] ) && $field['displayOnly'] ) || ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email-and-admin' ) !== false ) ) {
                    continue;
                }

                if ( $field['type'] == 'product' ) {
                    if ( ! in_array( $field['id'], $valid_products ) ) {
                        continue;
                    }
                }

                $value   = $this->get_lead_field_value( $lead, $field );
                $arr_var = ( is_array( $value ) ) ? implode( '', $value ) : '-';

                if ( ! empty( $value ) && ! empty( $arr_var ) ) {
                    $display_value     = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, false );
                    $price_adjustement = false;
                    $display_value     = apply_filters( "gform_entry_field_value", $display_value, $field, $lead, $form_meta );

                    $display_text = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, apply_filters( 'woocommerce_gforms_use_label_as_value', true, $value, $field, $lead, $form_meta ) );
                    $display_text = apply_filters( "woocommerce_gforms_field_display_text", $display_text, $display_value, $field, $lead, $form_meta );

                    if ( $field['type'] == 'product' ) {
                        $prefix        = '';
                        $display_title = GFCommon::get_label( $field );
                        $display_text  = str_replace( $display_title . ',', '', $display_text );;
                        $hidden = false;
                    } else {

                        $display_title = GFCommon::get_label( $field );

                        $prefix         = '';
                        $hidden         = $field['type'] == 'hidden';
                        $display_hidden = apply_filters( "woocommerce_gforms_field_is_hidden", $hidden, $display_value, $display_title, $field, $lead, $form_meta );
                        if ( $display_hidden ) {
                            $prefix = $hidden ? '_' : '';
                        }

                        if ( ! $display_hidden && ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email' ) !== false ) ) {
                            $prefix        = '_gf_email_hidden_';
                            $display_title = str_replace( '_gf_email_hidden_', '', $display_title );
                            $hidden        = true;
                        }
                    }

                    $other_data[] = array(
                        'name'    => $prefix . $display_title,
                        'display' => $display_text,
                        'value'   => $display_value,
                        'hidden'  => $hidden
                    );
                }
            }
        }
        error_reporting( $err_level );
    }

    return $other_data;
}

public function add_to_cart_validation( $valid, $product_id, $quantity ) {
    global $woocommerce;

    if ( ! $valid ) {
        return false;
    }

    // Check if we need a gravity form!
    $gravity_form_data = wc_gfpa()->get_gravity_form_data( $product_id );

    if ( is_array( $gravity_form_data ) && $gravity_form_data['id'] && empty( $_POST['gform_form_id'] ) ) {
        return false;
    }

    if ( isset( $_POST['gform_form_id'] ) && is_numeric( $_POST['gform_form_id'] ) ) {
        $form_id = $_POST['gform_form_id'];

        //Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
        $err_level = error_reporting();
        error_reporting( 0 );

        //MUST disable notifications manually.
        add_filter( 'gform_disable_user_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );
        add_filter( 'gform_disable_admin_notification_' . $form_id, array(
            $this,
            'disable_notifications'
        ), 10, 3 );
        add_filter( 'gform_disable_notification_' . $form_id, array( $this, 'disable_notifications' ), 10, 3 );

        add_filter( "gform_confirmation_" . $form_id, array( $this, "disable_confirmation" ), 10, 4 );

        require_once( GFCommon::get_base_path() . "/form_display.php" );

        $_POST['gform_submit'] = $_POST['gform_old_submit'];

        GFFormDisplay::process_form( $form_id );
        $_POST['gform_old_submit'] = $_POST['gform_submit'];
        unset( $_POST['gform_submit'] );

        if ( ! GFFormDisplay::$submission[ $form_id ]['is_valid'] ) {
            return false;
        }

        if ( GFFormDisplay::$submission[ $form_id ]['page_number'] != 0 ) {
            return false;
        }

        $this->delete_entry( GFFormDisplay::$submission[ $form_id ]['lead'] );
        error_reporting( $err_level );
    }

    return $valid;
}

public function order_item_meta( $item, $cart_item_key, $cart_item ) {
    if ( function_exists( 'woocommerce_add_order_item_meta' ) ) {

        if ( isset( $cart_item['_gravity_form_lead'] ) && isset( $cart_item['_gravity_form_data'] ) ) {
            $item_id = $item->get_id();
            $item->add_meta_data( '_gravity_forms_history', array(
                    '_gravity_form_lead' => $cart_item['_gravity_form_lead'],
                    '_gravity_form_data' => $cart_item['_gravity_form_data']
                )
            );

            //Gravity forms generates errors and warnings.  To prevent these from conflicting with other things, we are going to disable warnings and errors.
            $err_level = error_reporting();
            error_reporting( 0 );

            $gravity_form_data = $cart_item['_gravity_form_data'];
            $form_meta         = RGFormsModel::get_form_meta( $gravity_form_data['id'] );
            $form_meta         = gf_apply_filters( array(
                'gform_pre_render',
                $gravity_form_data['id']
            ), $form_meta );
            if ( ! empty( $form_meta ) ) {
                $lead = $cart_item['_gravity_form_lead'];
                //We reset the lead id to disable caching of the gravity form value by gravity forms.
                //This cache causes issues with multipule cart line items each with their own form.
                $lead['id'] = uniqid() . time() . rand();

                $products       = $this->get_product_fields( $form_meta, $lead );
                $valid_products = array();
                foreach ( $products['products'] as $id => $product ) {
                    if ( ! isset( $product['quantity'] ) ) {

                    } elseif ( $product['quantity'] ) {
                        $valid_products[] = $id;
                    }
                }

                foreach ( $form_meta['fields'] as $field ) {

                    if ( ( isset( $field['inputType'] ) && $field['inputType'] == 'hiddenproduct' ) || ( isset( $field['displayOnly'] ) && $field['displayOnly'] )
                         || ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email-and-admin' ) ) !== false
                    ) {
                        continue;
                    }

                    if ( $field['type'] == 'product' ) {
                        if ( ! in_array( $field['id'], $valid_products ) ) {
                            continue;
                        }
                    }

                    $value   = $this->get_lead_field_value( $lead, $field );
                    $arr_var = ( is_array( $value ) ) ? implode( '', $value ) : '-';

                    if ( ! empty( $value ) && ! empty( $arr_var ) ) {
                        try {
                            $strip_html = true;
                            if ( $field['type'] == 'fileupload' && isset( $lead[ $field['id'] ] ) ) {
                                $strip_html = false;
                                $dv         = $lead[ $field['id'] ];
                                $files      = json_decode( $dv );

                                if ( empty( $files ) ) {
                                    $files = array( $dv );
                                }

                                $display_value = '';

                                $sep = '';
                                foreach ( $files as $file ) {
                                    $display_value .= $sep . '<a href="' . $file . '">' . $file . '</a>';
                                    $sep = ', ';
                                }
                            } else {

                                if ( $field['type'] == 'address' ) {
                                    $display_value = implode( ', ', array_filter( $value ) );
                                } else {
                                    $display_value = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, apply_filters( 'woocommerce_gforms_use_label_as_value', true, $value, $field, $lead, $form_meta ) );
                                }

                                $price_adjustement = false;
                                $display_value     = apply_filters( "gform_entry_field_value", $display_value, $field, $lead, $form_meta );
                            }

                            $display_title = GFCommon::get_label( $field );
                            $display_title = apply_filters( "woocommerce_gforms_order_meta_title", $display_title, $field, $lead, $form_meta, $item_id, $cart_item );
                            $display_value = apply_filters( "woocommerce_gforms_order_meta_value", $display_value, $field, $lead, $form_meta, $item_id, $cart_item );

                            if ( apply_filters( 'woocommerce_gforms_strip_meta_html', $strip_html, $display_value, $field, $lead, $form_meta, $item_id, $cart_item ) ) {
                                if ( strstr( $display_value, '<li>' ) ) {
                                    $display_value = str_replace( '<li>', '', $display_value );
                                    $display_value = explode( '</li>', $display_value );
                                    $display_value = trim( strip_tags( implode( ', ', $display_value ) ) );
                                    $display_value = trim( $display_value, ',' );
                                }

                                $display_value = strip_tags( wp_kses( $display_value, '' ) );
                            }

                            $display_text  = GFCommon::get_lead_field_display( $field, $value, isset( $lead["currency"] ) ? $lead["currency"] : false, false );
                            $display_value = apply_filters( "woocommerce_gforms_field_display_text", $display_value, $display_text, $field, $lead, $form_meta );

                            $prefix         = '';
                            $hidden         = $field['type'] == 'hidden';
                            $display_hidden = apply_filters( "woocommerce_gforms_field_is_hidden", $hidden, $display_value, $display_title, $field, $lead, $form_meta );
                            if ( $display_hidden ) {
                                $prefix = $hidden ? '_' : '';
                            }

                            if ( ! $display_hidden && ( isset( $field->cssClass ) && strpos( $field->cssClass, 'wc-gforms-hide-from-email' ) !== false ) ) {
                                $prefix        = '_gf_email_hidden_';
                                $display_title = str_replace( '_gf_email_hidden_', '', $display_title );
                            }

                            if ( $field['type'] == 'product' ) {
                                $prefix        = '';
                                $display_title = GFCommon::get_label( $field );
                                $display_value = str_replace( $display_title . ',', '', $display_text );;
                            }

                            $item->add_meta_data( $prefix . $display_title, $display_value );
                        } catch ( Exception $e ) {

                        }
                    }
                }
            }
            error_reporting( $err_level );
        }
    }
}

public function on_get_order_again_cart_item_data( $data, $item, $order ) {

    //disable validation
    remove_filter( 'woocommerce_add_to_cart_validation', array( $this, 'add_to_cart_validation' ), 99, 3 );

    $history = isset( $item['gravity_forms_history'] ) ? maybe_unserialize( $item['gravity_forms_history'] ) : false;
    if ( ! $history ) {
        //Not sure why exactly WC strips out the leading _, let's check for it anyways
        isset( $item['_gravity_forms_history'] ) ? maybe_unserialize( $item['_gravity_forms_history'] ) : false;
    }

    if ( $history ) {
        $glead = isset( $history['_gravity_form_lead'] ) ? $history['_gravity_form_lead'] : false;
        $gdata = isset( $history['_gravity_form_data'] ) ? $history['_gravity_form_data'] : false;

        if ( $glead && $gdata ) {
            $data['_gravity_form_lead'] = $glead;
            $data['_gravity_form_data'] = $gdata;
        }
    }

    return $data;
}

//Helper Functions
protected function get_product_fields( $form, $lead, $use_choice_text = false, $use_admin_label = false ) {
    $products = array();


    foreach ( $form["fields"] as $field ) {
        $id         = $field["id"];
        $lead_value = $this->get_lead_field_value( $lead, $field );

        $quantity_field = GFCommon::get_product_fields_by_type( $form, array( "quantity" ), $id );
        $quantity       = sizeof( $quantity_field ) > 0 ? $this->get_lead_field_value( $lead, $quantity_field[0] ) : 1;

        switch ( $field["type"] ) {

            case "product" :

                //ignore products that have been hidden by conditional logic
                $is_hidden = RGFormsModel::is_field_hidden( $form, $field, array(), $lead );
                if ( $is_hidden ) {
                    continue;
                }

                //if single product, get values from the multiple inputs
                if ( is_array( $lead_value ) ) {
                    $product_quantity = sizeof( $quantity_field ) == 0 && ! rgar( $field, "disableQuantity" ) ? rgget( $id . ".3", $lead_value ) : $quantity;
                    if ( empty( $product_quantity ) ) {
                        continue;
                    }

                    if ( ! rgget( $id, $products ) ) {
                        $products[ $id ] = array();
                    }

                    $products[ $id ]["name"]     = $use_admin_label && ! rgempty( "adminLabel", $field ) ? $field["adminLabel"] : $lead_value[ $id . ".1" ];
                    $products[ $id ]["price"]    = rgar( $lead_value, $id . ".2" );
                    $products[ $id ]["quantity"] = $product_quantity;
                } else if ( ! empty( $lead_value ) ) {

                    if ( empty( $quantity ) ) {
                        continue;
                    }

                    if ( ! rgar( $products, $id ) ) {
                        $products[ $id ] = array();
                    }

                    if ( $field["inputType"] == "price" ) {
                        $name  = $field["label"];
                        $price = $lead_value;
                    } else {
                        list( $name, $price ) = explode( "|", $lead_value );
                    }

                    $products[ $id ]["name"]     = ! $use_choice_text ? $name : RGFormsModel::get_choice_text( $field, $name );
                    $products[ $id ]["price"]    = $price;
                    $products[ $id ]["quantity"] = $quantity;
                    $products[ $id ]["options"]  = array();
                }

                if ( isset( $products[ $id ] ) ) {
                    $options = GFCommon::get_product_fields_by_type( $form, array( "option" ), $id );
                    foreach ( $options as $option ) {
                        $option_value = $this->get_lead_field_value( $lead, $option );
                        $option_label = empty( $option["adminLabel"] ) ? $option["label"] : $option["adminLabel"];
                        if ( is_array( $option_value ) ) {
                            foreach ( $option_value as $value ) {
                                $option_info = GFCommon::get_option_info( $value, $option, $use_choice_text );
                                if ( ! empty( $option_info ) ) {
                                    $products[ $id ]["options"][] = array(
                                        "field_label"  => rgar( $option, "label" ),
                                        "option_name"  => rgar( $option_info, "name" ),
                                        "option_label" => $option_label . ": " . rgar( $option_info, "name" ),
                                        "price"        => rgar( $option_info, "price" )
                                    );
                                }
                            }
                        } else if ( ! empty( $option_value ) ) {
                            $option_info                  = GFCommon::get_option_info( $option_value, $option, $use_choice_text );
                            $products[ $id ]["options"][] = array(
                                "field_label"  => rgar( $option, "label" ),
                                "option_name"  => rgar( $option_info, "name" ),
                                "option_label" => $option_label . ": " . rgar( $option_info, "name" ),
                                "price"        => rgar( $option_info, "price" )
                            );
                        }
                    }
                }
                break;
        }
    }

    $shipping_field = GFCommon::get_fields_by_type( $form, array( "shipping" ) );
    $shipping_price = $shipping_name = "";

    if ( ! empty( $shipping_field ) && ! RGFormsModel::is_field_hidden( $form, $shipping_field[0], array(), $lead ) ) {
        $shipping_price = $this->get_lead_field_value( $lead, $shipping_field[0] );
        $shipping_name  = $shipping_field[0]["label"];
        if ( $shipping_field[0]["inputType"] != "singleshipping" ) {
            list( $shipping_method, $shipping_price ) = explode( "|", $shipping_price );
            $shipping_name = $shipping_field[0]["label"] . " ($shipping_method)";
        }
    }

    $shipping_price = GFCommon::to_number( $shipping_price );

    $product_info = array(
        "products" => $products,
        "shipping" => array( "name" => $shipping_name, "price" => $shipping_price )
    );

    $product_info = apply_filters( "gform_product_info_{$form["id"]}", apply_filters( "gform_product_info", $product_info, $form, $lead ), $form, $lead );

    return $product_info;
}

/**
 * @param $lead
 * @param $field GF_Field
 *
 * @return array|bool|mixed|string|void
 */
private function get_lead_field_value( $lead, $field ) {
    return RGFormsModel::get_lead_field_value( $lead, $field );
}

//Use a custom delete function so we don't delete files that are uploaded.
private function delete_entry( $entry ) {
    global $wpdb;
    $lead_id = $entry['id'];

    GFCommon::log_debug( __METHOD__ . "(): Deleting entry #{$lead_id}." );

    /**
     * Fires before a lead is deleted
     *
     * @param $lead_id
     *
     * @deprecated
     * @see gform_delete_entry
     */
    do_action( 'gform_delete_lead', $lead_id );

    $lead_table        = GFFormsModel::get_lead_table_name();
    $lead_notes_table  = GFFormsModel::get_lead_notes_table_name();
    $lead_detail_table = GFFormsModel::get_lead_details_table_name();


    //Delete from lead details
    $sql = $wpdb->prepare( "DELETE FROM $lead_detail_table WHERE lead_id=%d", $lead_id );
    $wpdb->query( $sql );

    //Delete from lead notes
    $sql = $wpdb->prepare( "DELETE FROM $lead_notes_table WHERE lead_id=%d", $lead_id );
    $wpdb->query( $sql );

    //Delete from lead meta
    gform_delete_meta( $lead_id );

    //Delete from lead
    $sql = $wpdb->prepare( "DELETE FROM $lead_table WHERE id=%d", $lead_id );
    $wpdb->query( $sql );
}

/**
 * Disable gravity forms notifications for the form.
 *
 * @param type $disabled
 * @param type $form
 * @param type $lead
 *
 * @return boolean
 */
public function disable_notifications( $disabled, $form, $lead ) {
    return true;
}


/**
 * Disable any type of confirmations for the form.
 *
 * @param type $confirmation
 * @param type $form
 * @param type $lead
 * @param type $ajax
 *
 * @return boolean
 */
public function disable_confirmation( $confirmation, $form, $lead, $ajax ) {
    if ( is_array( $confirmation ) && isset( $confirmation['redirect'] ) ) {
        return $confirmation;
    } else {
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:0)

add_action('woocommerce_calculate_totals', array($this, 'calculate_totals'), 10, 1);

function calculate_totals($totals){
//your code
}

尝试使用此代码段