如何优化此代码以显示自定义字段?
How can I optimize this code to display custom fields?
我正在显示 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 );
我怎样才能optimize/shorten这个代码?以后可能会有更多的自定义字段要添加,所以一定有办法清理这段代码?
编辑 澄清。
我建议这样解决问题:
- 创建字段数组
- 创建循环
- 使用特殊变量
$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 ) );
}
我正在显示 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 );
我怎样才能optimize/shorten这个代码?以后可能会有更多的自定义字段要添加,所以一定有办法清理这段代码?
编辑 澄清。
我建议这样解决问题:
- 创建字段数组
- 创建循环
- 使用特殊变量
$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 ) );
}