我正在开发一个使用WooCommerce的在线商店。我已设法在函数文件中使用此代码显示数量选择器:
function woocommerce_quantity_input($data = null) {
global $product;
if (!$data) {
$defaults = array(
'input_name' => 'quantity',
'input_value' => '1',
'max_value' => apply_filters( 'woocommerce_quantity_input_max', '', $product ),
'min_value' => apply_filters( 'woocommerce_quantity_input_min', '', $product ),
'step' => apply_filters( 'woocommerce_quantity_input_step', '1', $product ),
'style' => apply_filters( 'woocommerce_quantity_style', 'float:left;', $product )
);
} else {
$defaults = array(
'input_name' => $data['input_name'],
'input_value' => $data['input_value'],
'max_value' => apply_filters( 'woocommerce_quantity_input_max', '', $product ),
'min_value' => apply_filters( 'woocommerce_quantity_input_min', '', $product ),
'step' => apply_filters( 'woocommerce_quantity_input_step', '1', $product ),
'style' => apply_filters( 'woocommerce_quantity_style', 'float:left;', $product )
);
}
if ( ! empty( $defaults['min_value'] ) )
$min = $defaults['min_value'];
else $min = 1;
foreach ($product->get_available_variations() as $key) {
if ( ! empty( $defaults['max_value'] ) )
$max = $key['max_qty'];
else $max = $key['max_qty'];
}
if ( ! empty( $defaults['step'] ) )
$step = $defaults['step'];
else $step = 1;
$options = '';
for ( $count = $min; $count <= $max; $count = $count+$step ) {
$selected = $count === $defaults['input_value'] ? ' selected' : '';
$options .= '<option value="' . $count . '"'.$selected.'>' . $count . '</option>';
}
echo '<div class="quantity_select" style="' . $defaults['style'] . '"><select name="' . esc_attr( $defaults['input_name'] ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';
}
它在单个产品页面下工作得很完美,但问题出现在购物车页面上,出现此错误:
致命错误:在第240行的functions.php中的非对象上调用成员函数get_available_variations() - &gt; foreach($ product-&gt; get_available_variations()as $ key){
有谁知道我怎么能解决这个问题?
单品:http://www.ticketexpress.com.au/product/hong-kong-sevens-friday-tickets/
答案 0 :(得分:-1)
我可以看到你重写了一个woocommerce功能。我不建议你做一些特别是在插件上做的事情。这很危险。其他插件可能正在使用该功能。您可以使用过滤器来更改args。还有一个用于数量输入的woocommerce模板,您可以将其复制到主题并进行编辑。这应该是最安全和正确的方法。
如果您需要更改$default
或给定$args
使用woocommerce_quantity_input_args
过滤器...
类似这样的内容......将其复制到functions.php
add_filter('woocommerce_quantity_input_args','my_quantity_input_args',10,2);
function my_quantity_input_args( $args, $product ){
// add style to the $default;
$args['style'] = apply_filters( 'woocommerce_quantity_style', 'float:left;', $product );
// check for min
if ( empty( $args['min_value'] ) )
$args['min_value'] = 1;
// check for max
if ( empty( $args['max_value'] ) )
$args['max_value'] = 8; // I'm not sure where to get your max_qty.
return $args;
}
然后在您的插件文件夹quantity-input.php
中找到woocommerce/templates/global/quantity-input.php
文件。将其复制到yourtheme/woocommerce/global/quantity-input.php
进行编辑。删除那里的代码并将其替换为下面的代码。下一行代码将为您准确地提供您现在要做的事情。
for ( $count = $min_value; $count <= $max_value; $count = $count+$step ) {
$selected = $count === $input_value ? ' selected' : '';
$options .= '<option value="' . $count . '"'.$selected.'>' . $count . '</option>';
}
echo '<div class="quantity_select" style="' . $style . '" ><select name="' . esc_attr( $input_name ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';