php - 在 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 和开始
- 每当为产品设置属性或自定义字段时?
- 具有属性和自定义字段的产品
- 仅具有属性或自定义字段的产品
- 既没有属性也没有自定义字段的产品
编辑澄清:有3种可能的产品类型:
对于第一类产品,应该显示例如:
<h4>Details</h4>
<ul>
<li>Brand: ...</li>
<li>MPN: ...</li>
</ul>
对于第二种类型的产品,示例如下:
<h4>Details</h4>
<ul>
<li>MPN: ...</li>
</ul>
对于最后一种类型的产品,根本不应该显示任何内容。
解决方案
有多种设置方法,您可以使用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_Number
andMPN
是您的自定义字段,您可以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>';
}
}
让我知道这是否是您正在寻找的东西!
推荐阅读
- python - 在Python中获取鼠标指针在PDF上的坐标?
- http - Golang http客户端通过VPN(openVPN)/设置网络接口
- arduino - 'Serial1' 没有命名类型 - arduino 中的错误
- javascript - MutationObserver 检测元素的外观和元素值的变化
- react-native - React Native FlatList 警告
- php - Google Sheets API V4 - 在开头添加标签
- postgresql - 排名()函数。从查询中提取前 3 个计数,属于母查询?
- php - 如何使用下拉列表将值分配给使用 PHP 的特定行(以相同形式插入的行中)
- vue.js - 加载不同类型组件的多品牌Vue.js项目如何处理?
- java - 在 IntelliJ 中同时使用 Scala 和 Java 测试运行器