Woocommerce数量下拉选择器致命错误

时间:2016-01-27 00:47:35

标签: wordpress woocommerce

我正在开发一个使用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/

购物车页面:http://www.ticketexpress.com.au/cart/

1 个答案:

答案 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>';