【问题标题】:Custom quantities in single product pages on WoocommerceWoocommerce 上单个产品页面中的自定义数量
【发布时间】:2018-11-20 03:07:19
【问题描述】:

在 Woocommerce 中,我的单个产品需要固定数量。

例如数量:

100,300,500,1000,1200 & 1500

如何定制?

【问题讨论】:

  • 您可能会在wordpress.stackexchange.com得到更快的答复
  • @pathfinder 抱歉,但 Wordpress StackExchange 仅适用于纯 WordPress 问题……所有与插件相关的问题都与它无关。所以这是解决 Woocommerce 相关问题的正确地方。

标签: php wordpress woocommerce product product-quantity


【解决方案1】:

要自定义数量,您可以在单个产品页面上使用过滤钩woocommerce_quantity_input_args

这个钩子有两个参数:

  1. 返回的 $args 参数处理:
    • $args['input_value'] 的“输入默认值”(默认值为1
    • $args['max_value'] 的“最大允许值”(默认值为 -1
    • $args['min_value'] 的“最小允许值”(默认值为 0
    • $args['step'] 的“步骤默认值”(默认值为 1
    • $args['pattern'] 的“模式默认值”(默认值为'[0-9]*'
    • 带有$args['inputmode']的“模式默认值”(默认值为'numeric*'
  2. WC_Product 对象 $product 允许您定位特定产品。

但您还需要处理购物车页面中的数量字段,客户可以在其中编辑购物车商品的产品数量。

注意:您不能有可变步长,因为它是一个常数数值。


按产品定义的具体数量 (对于简单产品)

您可以为您的产品添加一个自定义字段来处理固定数量(对于简单产品):

// Adding and displaying additional product quantity custom fields
add_action( 'woocommerce_product_options_pricing', 'additional_product_pricing_option_fields', 50 );
function additional_product_pricing_option_fields() {
    $domain = "woocommerce";
    global $post;

    echo '</div><div class="options_group pricing">';

    woocommerce_wp_text_input( array(
        'id'            => '_input_qty',
        'label'         => __("Input quantity", $domain ),
        'placeholder'   => '',
        'description'   => __("Input quantity explanation goes here…", $domain ),
        'desc_tip'      => true,
    ) );


    woocommerce_wp_text_input( array(
        'id'            => '_step_qty',
        'label'         => __("Step quantity", $domain ),
        'placeholder'   => '',
        'description'   => __("Step quantity explanation goes here…", $domain ),
        'desc_tip'      => true,
    ) );

}

// Saving product custom quantity values
add_action( 'woocommerce_admin_process_product_object', 'save_product_custom_meta_data', 100, 1 );
function save_product_custom_meta_data( $product ){
    if ( isset( $_POST['_input_qty'] ) )
        $product->update_meta_data( '_input_qty', sanitize_text_field($_POST['_input_qty']) );

    if ( isset( $_POST['_step_qty'] ) )
        $product->update_meta_data( '_step_qty', sanitize_text_field($_POST['_step_qty']) );
}

// Set product quantity field by product
add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 );
function custom_quantity_input_args( $args, $product ) {
    if( $product->get_meta('_input_qty') ){
        $args['input_value'] = is_cart() ? $args['input_value'] : $product->get_meta('_input_qty');
        $args['min_value']   = $product->get_meta('_input_qty');
    }

    if( $product->get_meta('_step_qty') ){
        $args['step'] = $product->get_meta('_step_qty');
    }

    return $args;
}

代码进入您的活动子主题(活动主题)的 function.php 文件中。经过测试并且可以工作。


处理步骤

以下示例将从 100 开始,步长为 100:

add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 );
function custom_quantity_input_args( $args, $product ) {
    $args['input_value'] = is_cart() ? $args['input_value'] : 100;
    $args['min_value']   = 100;
    $args['step']        = 100;

    return $args;
}

对于产品变体 (可变产品)您需要额外使用:

add_filter( 'woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3 );
function custom_qty_available_variation_args( $data, $product, $variation ) {
    $data['min_qty'] = 100;

    return $data;
}

代码进入您的活动子主题(活动主题)的 function.php 文件中。经过测试并且可以工作。


【讨论】:

    【解决方案2】:

    这不会更改商店页面中的“添加到购物车”按钮。因此,当用户单击“添加到购物车”时,它仍然会以 1 的数量将产品添加到购物车,而不是定义的 100、200 等。

    将此添加到您的functions.php 文件以覆盖特定产品ID 的添加到购物车按钮,以便该按钮链接到产品页面而不是添加到购物车。

    add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
    function replacing_add_to_cart_button( $button, $product  ) {
     $specific_ids = array(2917, 2918, 2919, 2920);
    if( in_array($product->get_id(), $specific_ids) ) {
    $button_text = __("View product", "woocommerce");
    $button = '<a class="button" href="' . $product->get_permalink() . '">' . 
    $button_text . '</a>';
    }
    return $button;
    }
    

    此代码更改添加到购物车到特定按钮,用于定义的产品 ID。

    哦,感谢您删除我的回复。我还不能发表评论,因为没有足够的积分,所以我不得不这样做。

    问候, 米娜

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2019-04-09
      相关资源
      最近更新 更多