首页 > 解决方案 > WooCommerce:显示产品变体/变量描述

问题描述

我想始终在产品页面上显示每个变体的变体描述(目前它只会显示通过下拉列表选择的任何变体的描述)。我似乎无法访问

plugins/woocommerce/templates/single-product/add-to-cart/variation.php中,它似乎可以通过以下方式访问:

{{{ data.variation.variation_description }}}

在编辑产品页面中检查所需字段时,它name=是:

variable_description0

我尝试通过这两种方式访问​​,以及:

if($product && taxonomy_exists($attribute)) {
  $terms = wc_get_product_terms($product->get_id(), $attribute, array(
    'fields' => 'all',
  ));

  foreach($terms as $term) {

    $variable_description = get_post_meta( $id, '_variation_description', true );

    if(in_array($term->slug, $options, true)) {
      $radios .= '<div><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($term->slug).'" '.checked(sanitize_title($args['selected']), $term->slug, false).'><label for="'.esc_attr($term->slug).'">'.esc_html(apply_filters('woocommerce_variation_option_name', $term->name)).' <span class="description">' . 'DESCRIPTION' . '</span></label></div>';
    }
  }
} else {
  foreach($options as $option) {

    // var_dump($options);
    $variable_description = get_post_meta( $id, '_variation_description', true );


    $checked    = sanitize_title($args['selected']) === $args['selected'] ? checked($args['selected'], sanitize_title($option), false) : checked($args['selected'], $option, false);
    $radios    .= '<div><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($option).'" id="'.sanitize_title($option).'" '.$checked.'><label for="'.sanitize_title($option).'">'.esc_html(apply_filters('woocommerce_variation_option_name', $option)).' <span class="description">' . $variable_description . '</span></label></div>';
  }
}

然而,一切都返回为 NULL。

我应该为 $id 使用什么/如何为所有变量打印出来?

标签: phpwordpresswoocommercewoocommerce-theming

解决方案


更新2020 年 1 月 30 日似乎我们正在使用已弃用的代码

我已更换:

$variation_data[$single_variation->attributes[$attribute]] = $single_variation->description;
}

$variation_data[$single_variation->get_attributes()[$attribute]] = $single_variation->get_description();

这里同样的问题。我不敢相信没有简单的解决方案。

感谢您的代码 - 非常有用

一项改进(我希望)是只对变化进行一次循环并将值保存到数组中。

所以:

function mc_return_variation_data($product, $attribute){
    $variation_data = array();
    $variations = $product->get_children();
    foreach ($variations as $value){
        $single_variation = new WC_Product_Variation($value);
        $variation_data[$single_variation->get_attributes()[$attribute]] = $single_variation->get_description();
    }
     return $variation_data;
}

然后在您获得 $product 和 $attribute 的值后调用该函数一次,因此:

$variation_data = mc_return_variation_data($product, $attribute);

然后在 foreach($terms as $term) 循环中获取实际描述,请使用:

$variable_description = $variation_data[$term->slug];

我唯一不确定的是我需要做多少错误检查才能确保

$variation_data[$term->slug]

被定义为


推荐阅读