Php 是否有可能制定定制价格?

Php 是否有可能制定定制价格?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我通过WoodPress上的WooCommerce销售礼品卡。我的客户应该能够自己设置礼品卡金额的值。我只是能够通过一个插件做到这一点。是否有可能通过更改一些代码或通过functions.php实现这一点 安装了Pimwick礼品卡Pro是的,但是如果从一个全新的WooCommerce安装中安装,而没有附加插件,那么这是一个相当复杂的过程。您需要执行以下操作才能实现此目标: 向产品添加自定义输入字段以添加自定义价格 将该产品添加到购物车时,将数据从自定义输入字段保存到会话(购物车) 创建订单时,

我通过WoodPress上的WooCommerce销售礼品卡。我的客户应该能够自己设置礼品卡金额的值。我只是能够通过一个插件做到这一点。是否有可能通过更改一些代码或通过functions.php实现这一点


安装了Pimwick礼品卡Pro是的,但是如果从一个全新的WooCommerce安装中安装,而没有附加插件,那么这是一个相当复杂的过程。您需要执行以下操作才能实现此目标:

  • 向产品添加自定义输入字段以添加自定义价格
  • 将该产品添加到购物车时,将数据从自定义输入字段保存到会话(购物车)
  • 创建订单时,将购物车元(在#2中创建)添加到订单中
  • 根据自定义价格元调整产品的成本(在#3中添加)

  • 步骤1:添加自定义输入字段: 您可以在添加到购物车之前使用
    woocommerce\u按钮添加输入字段,如下所示

    或者,您可以使用
    woocommerce\u wp\u text\u输入
    -


    步骤3:将购物车元添加到订单 接下来,我们必须将购物车/会话中的元添加到订单本身,以便在订单总额计算中使用。我们使用
    woomerce\u checkout\u create\u order\u line\u item
    (|)来执行以下操作:

    add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_meta_to_order', 10, 4 );
    function add_custom_meta_to_order( $item, $cart_item_key, $values, $order ) {
        //check if our custom meta was set on the line item of inside the cart/session
        if ( !empty( $values['so_57140247_price'] ) ) {
            $item->add_meta_data( '_custom_price', $values['so_57140247_price'] ); //add the value to order line item
        }
        return;
    }
    

    步骤4:调整礼品卡行项目总数 最后,我们只需根据输入字段中输入的值调整礼品卡行项目的成本。我们可以在计算总数之前先连接到
    woocommerce>(|)

    add_action( 'woocommerce_before_calculate_totals', 'calculate_cost_custom', 10, 1);
    function calculate_cost_custom( $cart_obj ) {
        foreach ( $cart_obj->get_cart() as $key => $value ) {
            $price      = intval($value['_custom_price']);
            $value['data']->set_price( $price );
        }
    }
    
    add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_meta_to_order', 10, 4 );
    function add_custom_meta_to_order( $item, $cart_item_key, $values, $order ) {
        //check if our custom meta was set on the line item of inside the cart/session
        if ( !empty( $values['so_57140247_price'] ) ) {
            $item->add_meta_data( '_custom_price', $values['so_57140247_price'] ); //add the value to order line item
        }
        return;
    }
    
    add_action( 'woocommerce_before_calculate_totals', 'calculate_cost_custom', 10, 1);
    function calculate_cost_custom( $cart_obj ) {
        foreach ( $cart_obj->get_cart() as $key => $value ) {
            $price      = intval($value['_custom_price']);
            $value['data']->set_price( $price );
        }
    }