Переименуйте длину в диаметр в выходных форматах продукта WooCommerce

Я использую это woocommerce_format_dimensions фильтр-заменитель для замены формата отображаемых размеров из 1 х 1 х 1 дюйм в 1 л дюйма x 1 Вт дюйма x 1 H дюйма

add_filter( 'woocommerce_format_dimensions', 'custom_formated_product_dimentions', 10, 2 );
function custom_formated_product_dimentions( $dimension_string, $dimensions ){
if ( empty( $dimension_string ) )
return __( 'N/A', 'woocommerce' );

$dimensions = array_filter( array_map( 'wc_format_localized_decimal', $dimensions ) );
foreach( $dimensions as $key => $dimention )
$label_with_dimensions[$key] = $dimention . ' ' . strtoupper( substr($key, 0, 1) ) . ' ' . get_option( 'woocommerce_dimension_unit' ) . '.';

return implode( ' x ',  $label_with_dimensions);
}

var_dump из $ размеры массив выглядит так:

array(3) { ["length"]=> string(3) "104" ["width"]=> string(3) "136" ["height"]=> string(2) "53" }

Как я мог переименовать «Длина» ключ к «диаметр» и измените порядок измерений на обратный, чтобы конечный результат был:

1 H in. X 1 W in. X 1 D in.

Я пытался переименовать ключи в $ размеры использование массива array_map, но не смог заставить его работать.

1

Решение

Вам просто нужно установить array keys/values как вы хотите, чтобы они были в вашей функции (переименование одного ключа и переупорядочение массива), таким образом:

add_filter( 'woocommerce_format_dimensions', 'custom_formated_product_dimentions', 10, 2 );
function custom_formated_product_dimentions( $dimension_string, $dimensions ){
if ( empty( $dimension_string ) )
return __( 'N/A', 'woocommerce' );

// Set here your new array of dimensions based on existing keys/values
$new_dimentions = array(
'height' => $dimensions['height'],
'width'  => $dimensions['width'],
'diameter' => $dimensions['length']
);

$dimensions = array_filter( array_map( 'wc_format_localized_decimal', $new_dimentions ) );
foreach( $dimensions as $key => $dimention ){
$label_with_dimensions[$key] = $dimention . ' ' . strtoupper( substr($key, 0, 1) ) . ' ' . get_option( 'woocommerce_dimension_unit' ) . '.';
}

return implode( ' x ',  $label_with_dimensions);
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код протестирован на версиях WooCommerce 3+ и работает

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]