【问题标题】:Adding h4 in Woocommerce attribute and custom field list在 Woocommerce 属性和自定义字段列表中添加 h4
【发布时间】:2021-05-20 13:35:07
【问题描述】:

我在单个产品页面上显示多个产品属性和自定义元字段,并使用我得到的此代码here

function action_woocommerce_single_product_summary() {
global $product;

$attributes_names = array( 'Brand', 'Color', 'Size' );

$attributes_data  = array();

foreach ( $attributes_names as $attribute_name ) {
    if ( $value = $product->get_attribute($attribute_name) ) {
        $attributes_data[] = $attribute_name . ': ' . $value;
    }       
}

// NOT empty
if ( ! empty($attributes_data) ) {
    echo '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul><li>' . implode( '</li><li>', $attributes_data );
}

// Get meta
$sn = $product->get_meta( 'Serial_Number' );    
$mpn = $product->get_meta( 'MPN' );

// NOT empty
if ( ! empty ( $sn ) ) {
    echo '<li>' . __( 'My label 1: ', 'woocommerce' ) . $sn . '</li>';
}

// NOT empty
if ( ! empty ( $mpn ) ) {
    echo '<li>' . __( 'My label 2: ', 'woocommerce' ) . $mpn . '</li>';
}

echo '</ul>';
}

add_action( 'woocommerce_single_product_summary', 'action_woocommerce_single_product_summary', 36, 0 );

我的问题是h4('Details')和起始ul只有在有属性的时候才会显示。当产品只设置了自定义字段时,不显示列表的 h4 和起始 ul。我怎样才能总是显示 h4 和开始

    每当为产品设置属性或自定义字段时?

    编辑澄清:有 3 种可能的产品类型:

  • 具有属性和自定义字段的产品
  • 只有属性或自定义字段的产品
  • 既没有属性也没有自定义字段的产品

对于第一类产品,应该显示例如:

<h4>Details</h4>
<ul>
<li>Brand: ...</li>
<li>MPN: ...</li>
</ul>

对于第二种类型的产品,示例如下:

<h4>Details</h4>
<ul>
<li>MPN: ...</li>
</ul>

对于最后一种产品,根本不应该显示任何内容。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    有多种设置方法,您可以使用if/else 语句或ternary 运算符来实现。例如,您可以这样做:

    // Using "if/else" method 
    
    if ( ! empty($attributes_data) ) {
    
        echo '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul><li>' . implode( '</li><li>', $attributes_data );
    
    }else{
    
        // if it's empty you could output a placeholder text OR a any value you could get from woocommerce
    
        echo '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><span>' . {YOUR VALUE OR PLACEHOLDER TEXT AS A FALLBACK} . '</span>';
    
    }
    

    或者您可以像这样使用ternary 运算符:

    echo ( ! empty($attributes_data) ) ? '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul><li>' . implode( '</li><li>', $attributes_data ) : '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><span>' . {YOUR VALUE OR PLACEHOLDER TEXT AS A FALLBACK} . '</span>';
    

    编辑

    假设Serial_NumberMPN 是您的自定义字段,您可以像这样设置if 条件:

    add_action( 'woocommerce_single_product_summary', 'action_woocommerce_single_product_summary', 36, 0 );
    
    function action_woocommerce_single_product_summary()
    {
      global $product;
      
      $attributes_names = array( 'Brand', 'Color', 'Size' );
      
      $attributes_data  = array();
      
      foreach ( $attributes_names as $attribute_name ) {
          if ( $value = $product->get_attribute($attribute_name) ) {
              $attributes_data[] = $attribute_name . ': ' . $value;
          }       
      }
    
      $sn = $product->get_meta( 'Serial_Number' );    
      $mpn = $product->get_meta( 'MPN' );
    
      // Assuming that 'Serial_Number' and 'MPN' are your custom fields
      
      if(! empty($attributes_data) && ! empty ( $sn ) && ! empty ( $mpn )){
    
        echo '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul><li>' . implode( '</li><li>', $attributes_data );
        echo '<li>' . __( 'My label 1: ', 'woocommerce' ) . $sn . '</li>';
        echo '<li>' . __( 'My label 2: ', 'woocommerce' ) . $mpn . '</li>';
        echo '</ul>';
    
      }elseif(! empty($attributes_data) || ! empty ( $sn ) || ! empty ( $mpn )){
    
        echo ( ! empty($attributes_data)) ? '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul><li>' . implode( '</li><li>', $attributes_data ): '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><ul>';
        echo (! empty ( $sn )) ? '<li>' . __( 'My label 1: ', 'woocommerce' ) . $sn . '</li>' : "";
        echo (! empty ( $mpn )) ? '<li>' . __( 'My label 2: ', 'woocommerce' ) . $mpn . '</li>': "";
        echo '</ul>';
    
      }else{
    
        echo '<h4>' . __( 'Details', 'woocommerce' ) . '</h4><p>Looks like there is no extra info on this product!</p>'; 
    
      }
    }
    

    让我知道您是否正在寻找它!

    【讨论】:

    • 谢谢,但这在我的情况下不起作用。我有同时具有属性和自定义字段的产品,在这种情况下,bth 应该显示在 ul 中,然后有些产品只有属性或自定义字段,然后这些应该显示在顶部的标题,并且那么有些产品没有属性或自定义字段,在这种情况下根本不应该显示任何内容。
    • 好的,你可以使用我建议的相同逻辑。如果您需要详细的答案,请使用所有详细信息和场景编辑您的问题,以便我可以编写完全适合您需求的代码!
    • 谢谢@Ruvee,但现在对于同时具有属性和自定义字段的产品,包括所有属性和自定义字段的整个“详细信息”块显示两次。
    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2019-07-29
    • 1970-01-01
    • 2017-07-09
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多