• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Добавить суффикс к цене товара

ymelik

Новичок
Здравствуйте, все. Стоит задача добавить суффикс к цене товара. Ранее удалось разобраться с префиксом, вот этот код:

add_action( 'woocommerce_product_options_general_product_data', function () {
global $product_object;
/** @var WC_Product $product_object */
woocommerce_wp_text_input( [
'id' => 'price_prefix',
'label' => __( 'Price Prefix', 'THEME_TEXTDOMAIN' ),
'desc_tip' => true,
'value' => $product_object->get_meta( 'price_prefix' ),
'description' => __( 'Prefix will appear before price.', 'THEME_TEXTDOMAIN' ),
] );
} );

add_action( 'woocommerce_process_product_meta', function ( $post_id ) {
$product = wc_get_product( $post_id );
$prefix = isset( $_POST['price_prefix'] ) ? $_POST['price_prefix'] : '';
$product->update_meta_data( 'price_prefix', sanitize_text_field( $prefix ) );
$product->save();
} );

add_filter( 'woocommerce_get_price_html', function ( $price, $product ) {
/** @var WC_Product $product */
if ( $prefix = $product->get_meta( 'price_prefix' ) ) {
$prefix = $prefix . ': ';
if ( '' === $product->get_price() ) {
$price = apply_filters( 'woocommerce_empty_price_html', '', $product );
} elseif ( $product->is_on_sale() ) {
$price = $prefix . wc_format_sale_price(
wc_get_price_to_display( $product, [ 'price' => $product->get_regular_price() ] ),
wc_get_price_to_display( $product )
) . $product->get_price_suffix();
} else {
$price = $prefix . wc_price( wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
}
}

return $price;
}, 10, 2 );

Он вполне устраивает в первую очередь тем, что префикс я могу назначать непосредственно в админке к каждому товару
Prefix_1.jpg
В общем все отлично работает. По аналогии ))) я попытался добавить и суффикс (т.е. в коде тупо поменял prefix на suffix), но ничего не вышло. Вернее вышло криво.
Необходимое поле в админке появилось
suffix_1.jpg
Но, в самой карточке суффикс просто заменил префикс
suffix_2-jpg.5953

Вот этот код, что у меня получился. Подскажите пожалуйста в чем ошибка, а лучше ткните пальцем. Спасибо

add_action( 'woocommerce_product_options_general_product_data', function () {
global $product_object;
/** @var WC_Product $product_object */
woocommerce_wp_text_input( [
'id' => 'price_suffix',
'label' => __( 'Price Suffix', 'THEME_TEXTDOMAIN' ),
'desc_tip' => true,
'value' => $product_object->get_meta( 'price_suffix' ),
'description' => __( 'suffix will appear after price.', 'THEME_TEXTDOMAIN' ),
] );
} );

add_action( 'woocommerce_process_product_meta', function ( $post_id ) {
$product = wc_get_product( $post_id );
$suffix = isset( $_POST['price_suffix'] ) ? $_POST['price_suffix'] : '';
$product->update_meta_data( 'price_suffix', sanitize_text_field( $suffix ) );
$product->save();
} );

add_filter( 'woocommerce_get_price_html', function ( $price, $product ) {
/** @var WC_Product $product */
if ( $suffix = $product->get_meta( 'price_suffix' ) ) {
$suffix = $suffix . ': ';
if ( '' === $product->get_price() ) {
$price = apply_filters( 'woocommerce_empty_price_html', '', $product );
} elseif ( $product->is_on_sale() ) {
$price = $suffix . wc_format_sale_price(
wc_get_price_to_display( $product, [ 'price' => $product->get_regular_price() ] ),
wc_get_price_to_display( $product )
) . $product->get_price_suffix();
} else {
$price = $suffix . wc_price( wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
}
}

return $price;
}, 10, 2 );
 

Вложения

  • suffix_2.jpg
    suffix_2.jpg
    22.4 KB · Просмотры: 23

DiZeR

Опытный
Местный
Здравствуйте, все. Стоит задача добавить суффикс к цене товара. Ранее удалось разобраться с префиксом, вот этот код:

Если по аналогии, как то так. Полностью заменить версию с префиксом на этот код:

PHP:
// Add Price Prefix field to Product data meta box
add_action( 'woocommerce_product_options_general_product_data', function () {
    global $product_object;
    /** @var WC_Product $product_object */
    woocommerce_wp_text_input( [
        'id' => 'price_prefix',
        'label' => __( 'Price Prefix', 'THEME_TEXTDOMAIN' ),
        'desc_tip' => true,
        'value' => $product_object->get_meta( 'price_prefix' ),
        'description' => __( 'Prefix will appear before price.', 'THEME_TEXTDOMAIN' ),
    ] );
} );

// Save Price Prefix field value
add_action( 'woocommerce_process_product_meta', function ( $post_id ) {
    $product = wc_get_product( $post_id );
    $prefix = isset( $_POST['price_prefix'] ) ? $_POST['price_prefix'] : '';
    $product->update_meta_data( 'price_prefix', sanitize_text_field( $prefix ) );
    $product->save();
} );

// Add Custom Price Suffix field to Product data meta box
add_action( 'woocommerce_product_options_general_product_data', function () {
    global $product_object;
    /** @var WC_Product $product_object */
    woocommerce_wp_text_input( [
        'id' => 'price_suffix',
        'label' => __( 'Price Suffix', 'THEME_TEXTDOMAIN' ),
        'desc_tip' => true,
        'value' => $product_object->get_meta( 'price_suffix' ),
        'description' => __( 'Suffix will appear after price.', 'THEME_TEXTDOMAIN' ),
    ] );
} );

// Save Custom Price Suffix field value
add_action( 'woocommerce_process_product_meta', function ( $post_id ) {
    $product = wc_get_product( $post_id );
    $suffix = isset( $_POST['price_suffix'] ) ? $_POST['price_suffix'] : '';
    $product->update_meta_data( 'price_suffix', sanitize_text_field( $suffix ) );
    $product->save();
} );

// Modify Price display with Price Prefix and Custom Price Suffix
add_filter( 'woocommerce_get_price_html', function ( $price, $product ) {
    /** @var WC_Product $product */
    $prefix = $product->get_meta( 'price_prefix' );
    $suffix = $product->get_meta( 'price_suffix' );

    if ( $prefix || $suffix ) {
        $price_parts = [];

        if ( $prefix ) {
            $price_parts[] = $prefix;
        }

        if ( '' === $product->get_price() ) {
            $price_parts[] = apply_filters( 'woocommerce_empty_price_html', '', $product );
        } elseif ( $product->is_on_sale() ) {
            $price_parts[] = wc_format_sale_price(
                wc_get_price_to_display( $product, [ 'price' => $product->get_regular_price() ] ),
                wc_get_price_to_display( $product )
            );
        } else {
            $price_parts[] = wc_price( wc_get_price_to_display( $product ) );
        }

        if ( $suffix ) {
            $price_parts[] = $suffix;
        }

        $price = implode( ' ', $price_parts );
    }

    return $price;
}, 10, 2 );
 
Сверху Снизу