首页 > 解决方案 > 在 Woocommerce 属性和自定义字段列表中添加 h4

问题描述

我在单个产品页面上显示了几个产品属性和自定义元字段,这里有以下代码:

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 和开始

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

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

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

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

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

标签: phpwordpresswoocommerce

解决方案


有多种设置方法,您可以使用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_NumberandMPN是您的自定义字段,您可以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>'; 

  }
}

让我知道这是否是您正在寻找的东西!


推荐阅读