在WooCommerce中,你能列出数量增加的“步骤”吗?

时间:2018-07-17 作者:SeanAUS120

我在卖海报,我需要做一个自定义的数量阶跃值,随着它的上升而变化。大概是:100、500、1000、2500、10000、20000。

我的代码覆盖了WC数量,但有没有办法列出步骤值,而不是像下面那样将步骤设置为500?

add_filter( \'woocommerce_quantity_input_args\', 
\'posters_woocommerce_quantity_input_args\', 10, 2 );

function posters_woocommerce_quantity_input_args( $args, $product ) {
$args[\'input_value\']  = 1;    // Starting value
$args[\'max_value\']    = 20000;   // Maximum value
$args[\'min_value\']    = 100;    // Minimum value
$args[\'step\']         = 500;    // Quantity steps
return $args;
}

1 个回复
SO网友:Tim

遗憾的是,数量输入不支持这一点。数量输入在以下模板中呈现:global/quantity-input.php. 您可以在模板中看到,它使用的是“number”类型的html输入元素,它不支持自定义步骤。在这种情况下使用过滤器是行不通的。

如果您确信您总是希望在数量输入中使用自定义步骤,那么您可以覆盖主题/插件中的模板,并对html输入进行自定义编码。

如果您想更专业一些,可以使用wc_get_template 筛选以仅在数量输入参数中存在某个参数时显示自定义步骤输入。

The code below isn\'t tested, but hopefully it will point you in the right direction :)

add_filter( \'woocommerce_quantity_input_args\', \'posters_woocommerce_quantity_input_args\', 10, 2 );

function posters_woocommerce_quantity_input_args( $args, $product ) {
    $args[\'input_value\']  = 1;    // Starting value
    $args[\'custom_steps\'] = [100, 500, 1000, 2500, 10000, 20000]
    return $args;
}

add_filter(\'wc_get_template\', \'posters_woocommerce_quantity_input_template\', 10, 5);

/**
 * Filter to override the template for quantity_input.php
 */
function posters_woocommerce_quantity_input_template($located, $template_name, $args, $template_path, $default_path) {
    if ($template_name === \'global/quantity_input.php\' && isset($args[\'custom_steps\']) {
        // Override the template because custom steps are present.
        $located = \'global/custom_quantity_input.php\';
    }
    return $located;
}
然后在主题中创建一个新模板woocommerce/global/custom_quantity_input.php 通过复制global/custom_quantity_input.php 模板并对其进行修改以创建html<select> 使用基于您指定的自定义步骤的选项。

// ...

<div class="quantity">
    <label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php esc_html_e( \'Quantity\', \'woocommerce\' ); ?></label>
    <select
        id="<?php echo esc_attr( $input_id ); ?>"
        name="<?php echo esc_attr( $input_name ); ?>"
        value="<?php echo esc_attr( $input_value ); ?>"
        title="<?php echo esc_attr_x( \'Qty\', \'Product quantity input tooltip\', \'woocommerce\' ); ?>"
        aria-labelledby="<?php echo esc_attr( $labelledby ); ?>">
        <?php 
        // Render each step as an option in a select drop down.
        foreach ($args[\'custom_step\'] as $step) { 
        ?>
            <option value="<?php echo esc_attr( $step ); ?>"><?php esc_html_e( $step ); ?></option>
        <?php } // end foreach ?>
    </select>
</div>

// ...
这只是一个想法。我很确定原则上应该行得通。希望有帮助。

结束

相关推荐