2015-09-21 67 views
1

我们聘请了开发人员创建的代码的自定义位,它进去Woocommerce>单一产品>加入购物车> Variable.phpWoocommerce可变产品页面

您可以看到的页面已被修改,在这里看:Example of Single Variable Product Page

<?php 
/** 
* Variable product add to cart 
* 
* @author  WooThemes 
* @package  WooCommerce/Templates 
* @version  2.1.0 
*/ 

if (! defined('ABSPATH')) exit; // Exit if accessed directly 

function omniwp_output_variation_row($ref, $dimensions, $qty, $price1, $price2, $price3, $price4, $id) { 
?> 
     <tr id="ctl00_ContentPlaceHolder1_rptPrices_ctl00_tr" class=""> 
      <td class="colRef"><?php echo $ref ?></td> 
      <td class="colDimensions"><?php echo $dimensions ?></td> 
      <td class="colPackQty"><?php echo $qty ?></td> 
      <td class="colPPI1"><?php echo $price1 ?></td> 
      <td class="colPPI2-4"><?php echo $price2 ?></td> 
      <td class="colPPI5-9"><?php echo $price3 ?></td> 
      <td class="colPPI10"><?php echo $price4 ?></td> 
      <td class="colOrderQty"><input name="qty_variation_id[<?php echo $id ?>]" class="textbox txtQty" type="text"></td> 
     </tr> 
<?php 
} 

global $woocommerce, $product, $post; 

$discounts    = ''; 
$_enable_discount  = get_post_meta($product->post->ID, '_enablediscount', true); 
$dpta_overall_discounts = get_option('dpta_overall_discounts'); 

if ($_enable_discount == 'yes') { 

    $_attached_discount = get_post_meta($product->post->ID, '_attacheddiscount', true); 
    $discounts   = array_shift(dpta_get_applicable_discount($_attached_discount)); 

} elseif (isset($dpta_overall_discounts['common']) 
    && $dpta_overall_discounts['common'] == 'yes' 
    && isset($dpta_overall_discounts['commondiscount'])) { 

    $_attached_discount = $dpta_overall_discounts['commondiscount']; 
    $discounts   = array_shift(dpta_get_applicable_discount($_attached_discount)); 

} 

$currency_symbol  = get_woocommerce_currency_symbol(); 
$currency_symbol_len = strlen($currency_symbol); 

$dimensions   = false; 
$cartons   = false; 
$product_attributes = $product->get_attributes(); 

if ($product_attributes) { 

$dimensions_values = explode('|' , $product_attributes['dimensions']['value']); 
$dimensions_keys = array_map('sanitize_title', $dimensions_values); 
$dimensions   = array_combine($dimensions_keys, $dimensions_values); 

$cartons_values = explode('|' , $product_attributes['cartons']['value']); 
$cartons_keys = array_map('sanitize_title', $cartons_values); 
$cartons   = array_combine($cartons_keys, $cartons_values); 

} 

?> 

<?php do_action('woocommerce_before_add_to_cart_form'); ?> 

<form class="variations_form cart" method="post" enctype="multipart/form-data" data-product_id="<?php echo $post->ID; ?>" data-product_variations="<?php echo esc_attr(json_encode($available_variations)) ?>"> 
    <?php if (! empty($available_variations)) : ?> 
    <table> 
     <thead> 
     <tr> 
      <th class="colRef" rowspan="2" scope="col">Ref.</th> 
      <th class="colDimensions" rowspan="2" scope="col">Dimensions</th> 
      <th class="colPackQty" rowspan="2" scope="col">Pack Qty.</th> 
      <th class="colPPI" colspan="4" scope="colgroup">Price per Pack</th> 
      <th class="colOrderQty" rowspan="2" scope="col">Order Qty.</th> 
     </tr> 
     <tr> 
      <th class="colPPI1" scope="col">1</th> 
      <th class="colPPI2-4" scope="col">2-4</th> 
      <th class="colPPI5-9" scope="col">5-9</th> 
      <th class="colPPI10" scope="col">10+</th> 
     </tr> 
     </thead> 
     <tbody> 
<?php 


    foreach ($available_variations as $variation) { 

     $name = false; 
     $qty = ''; 

     if ($dimensions && array_key_exists('attribute_dimensions', $variation['attributes'])) 
      $name = $dimensions[ $variation['attributes']['attribute_dimensions'] ]; 
     elseif ($cartons && array_key_exists('attribute_cartons', $variation['attributes'])) 
      $name = $cartons[ $variation['attributes']['attribute_cartons'] ]; 
     elseif (array_key_exists('attribute_pa_dimensions', $variation['attributes'])) { 
      $term = get_term_by('slug', $variation['attributes']['attribute_pa_dimensions'], 'pa_dimensions'); 
      if ($term) 
       $name = $term->name; 
     } 

     if (! $name) { 
      $option = 'Not found variation attribute for `' . print_r($variation['attributes'], true) . '`'; 
      $qty = '-'; 
     } else { 
      $option = substr($name, 0, strpos($name, '(') - 1 ); 
      if (strpos($name, '(Qty.')) 
       $qty = substr($name, strpos($name, '(Qty.') + 5, -1); 
      elseif (strpos($name, '(Qty')) 
       $qty = substr($name, strpos($name, '(Qty') + 4, -1); 

      $qty = str_replace(')', '', $qty); 

     } 

     $price1 = $variation['price_html']; 

     if (empty($price1)) 
      $price1 = '<span class="price">' . wc_price($product->get_variation_price('min', $display = true)) . '</span>'; 
    // $price1 = '<span class="price">' . wc_price($product->get_price()) . '</span>'; 

     if (empty($discounts)) { 
      $price2 = $price3 = $price4 = $price1 . ' no discounts'; 
     } else { 

      $price = substr($price1, strpos($price1, $currency_symbol) + $currency_symbol_len ); 
      $price = substr($price, 0, strpos($price, '<') ); 
      $price = str_replace(array('.', ','), '', $price); // remove any number formating 
      $price = $price/100;         // make price a float with 2 digits 


      $price2 = '<span class="price">' . wc_price($price - ($price/100) * $discounts['rules'][1]['amount']) . '</span>'; 
      $price3 = '<span class="price">' . wc_price($price - ($price/100) * $discounts['rules'][2]['amount']) . '</span>'; 
      $price4 = '<span class="price">' . wc_price($price - ($price/100) * $discounts['rules'][3]['amount']) . '</span>'; 
     } 

     omniwp_output_variation_row( 
      $ref = $variation['sku'], 
      $variation_dimensions = esc_html(apply_filters('woocommerce_variation_option_name', $option)), 
      $qty, 
      $price1, 
      $price2, 
      $price3, 
      $price4, 
      $field_name = $variation['variation_id'] 
      ); 
    } 
?> 
     </tbody> 
     <tfoot> 
     <tr> 
      <th class="colRef" rowspan="2" scope="col">Ref.</th> 
      <th class="colDimensions" rowspan="2" scope="col">Dimensions</th> 
      <th class="colPackQty" rowspan="2" scope="col">Pack Qty.</th> 
      <th class="colPPI" colspan="4" scope="colgroup">Price per Pack</th> 
      <th class="colOrderQty" rowspan="2" scope="col">Order Qty.</th> 
     </tr> 
     <tr> 
      <th class="colPPI1" scope="col">1</th> 
      <th class="colPPI2-4" scope="col">2-4</th> 
      <th class="colPPI5-9" scope="col">5-9</th> 
      <th class="colPPI10" scope="col">10+</th> 
     </tr> 
     </tfoot> 
    </table> 

     <?php do_action('woocommerce_before_add_to_cart_button'); ?> 

     <div class="multiple_variation_wrap"> 
      <div class="variations_button"> 
       <button type="submit" class="single_add_to_cart_button button alt"><?php echo $product->single_add_to_cart_text(); ?></button> 
       <input type="hidden" name="multiple-add-to-cart" value="<?php echo $product->id; ?>" /> 
       <input type="hidden" name="product_id" value="<?php echo esc_attr($post->ID); ?>" /> 
       <input type="hidden" name="xvariation_id" value="multiple-add-to-cart" /> 
      </div> 
     </div> 

     <?php do_action('woocommerce_after_add_to_cart_button'); ?> 

    <?php else : ?> 

     <p class="stock out-of-stock"><?php _e('This product is currently out of stock and unavailable.', 'woocommerce'); ?></p> 

     <?php endif; ?> 

     </form> 

     <?php do_action('woocommerce_after_add_to_cart_form'); ?> 

然而,当我们尝试更新woocommerce到最新版本,它打破这个代码(和单变量产品页),并不再看起来应该。任何人都可以发现任何需要改变的耀眼事物。我想也许有一些不再使用/需要改变的弃用功能。

我真的很感激从别人的任何帮助,知道PHP和Woocommerce :)

保罗

+0

它是如何中断的,是否显示任何带有'WP_DEBUG'的警告? – vard

回答

0

是,一些变化已经走在象,有必要更新

$product->id to $product->get_id() 

$product->product_type to $product->get_type() 

因为Woocommerce 3.0.0更新。