如何优化此代码以显示自定义字段?

问题描述

我正在显示 Woocommerce 产品的几个自定义字段

function fields() {

global $product;

$value1 = get_post_meta( $product->id,'storage',true );
$value2 = get_post_meta( $product->id,'delivery_date',true );
$value3 = get_post_meta( $product->id,'mpn',true );
$value4 = get_post_meta( $product->id,'color',true );
$value5 = get_post_meta( $product->id,'sizes_available',true );
$value6 = get_post_meta( $product->id,'country_of_origin',true );

if ( ! empty( $value1 ) ) {
echo '<div>Storage: '  . $value1 . '</div>';
}

if ( ! empty( $value2 ) ) {
echo '<div>Delivery: '  . $value2 . '</div>';
}

if ( ! empty( $value3 ) ) {
echo '<div>Manufacturer's product number: '  . $value3 . '</div>';
}

if ( ! empty( $value4 ) ) {
echo '<div>Color: '  . $value4 . '</div>';
}

if ( ! empty( $value5 ) ) {
echo '<div>Sizes: '  . $value5 . '</div>';
}

if ( ! empty( $value6 ) ) {
echo '<div>Country: '  . $value6 . '</div>';
}

}

add_action( 'woocommerce_after_shop_loop_item','fields',10 );

如何优化/缩短此代码?以后可能还会有更多的自定义字段添加,所以一定有办法清理这段代码吗?

编辑以澄清。

解决方法

我建议以这种方式解决问题:

  • 创建一个字段数组
  • 创建一个循环
  • 使用特殊变量 $label$value 来减少代码行长度
  • 使用 printf 控制和格式化要显示的值
  • 使用 esc_html 转义以避免冲突的字段值和 HTML 代码。

代码片段:

global $product;

$fields = [
    [ 'label' => 'Storage','name' => 'storage' ],[ 'label' => 'Delivery','name' => 'delivery_date' ],[ 'label' => "Manufacturer's product number",'name' => 'mpn' ],[ 'label' => 'Color','name' => 'color' ],[ 'label' => 'Sizes','name' => 'sizes_available' ],[ 'label' => 'Country','name' => 'country_of_origin' ],];

foreach ( $fields as $field ) {
    $label = $field['label'];
    $value = get_post_meta( $product->get_id(),$field['name'],true );

    printf( '<div>%s: %s</div>',esc_html( $label ),esc_html( $value ) );
}