Изменить текст оформления заказа, если в корзине есть конкретный продукт

В WooCommerce я ищу функцию для изменения текста «Разместить заказ», если в корзине есть определенный продукт (ID) на странице оформления заказа.

Это полезно для магазинов, продающих товары и в то же время предлагающих разные услуги, например членство. Это сделает текст оформления заказа более описательным для продукта в виде кнопки с призывом к действию.

Я разработал эту функцию для изменения текста кнопки «добавить в корзину» на странице одного продукта на основе идентификатора конкретного продукта

add_filter( 'woocommerce_product_single_add_to_cart_text',
'woo_custom_cart_button_text' ); 

function woo_custom_cart_button_text( $text ) {
global $product;

if ( 123 === $product->id ) {
   $text = 'Product 123 text';
}
return $text;
}

И изменение текста размещения заказа глобально;

add_filter( 'woocommerce_order_button_text', 'woo_custom_order_button_text' ); 

function woo_custom_order_button_text() {
    return __( 'Your new button text here', 'woocommerce' ); 
}

Я ищу, как адаптировать их для страницы оформления заказа.

Спасибо.


person OnurK.    schedule 26.12.2016    source источник


Ответы (1)


Если я хорошо понял ваш вопрос, ниже вы получили настраиваемую функцию, которая будет отображать настраиваемый текст на кнопке отправки Checkout, когда конкретный продукт находится в корзине:

add_filter( 'woocommerce_order_button_text', 'custom_checkout_button_text' );
function custom_checkout_button_text() {

    // Set HERE your specific product ID
    $specific_product_id = 37;
    $found = false;

    // Iterating trough each cart item
    foreach(WC()->cart->get_cart() as $cart_item)
        if($cart_item['product_id'] == $specific_product_id){
            $found = true; // product found in cart
            break; // we break the foreach loop
        }

    // If product is found in cart items we display the custom checkout button
    if($found)
        return __( 'Your new button text here', 'woocommerce' ); // custom text Here
    else
        return __( 'Place order', 'woocommerce' ); // Here the normal text
}

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

Этот код протестирован и работает.


Похожие ответы (несколько идентификаторов продуктов): WooCommerce - проверьте, если товар уже в корзине

person LoicTheAztec    schedule 27.12.2016
comment
Здравствуйте, спасибо за ответ. Функция работает нормально только для конкретного продукта. А именно, если в элементах корзины обнаружен конкретный продукт, мы можем отобразить пользовательскую кнопку оформления заказа. Но для товаров, не относящихся к конкретным товарам, мы не можем отображать текст на кнопке оформления заказа. Таким образом, у нас есть пустой текст кнопки оформления заказа для других продуктов. Как я могу это исправить? Большое вам спасибо еще раз. - person OnurK.; 27.12.2016
comment
@OnurK. Я обновил свой ответ… Теперь кнопка все равно не будет пустой :) - person LoicTheAztec; 27.12.2016
comment
@LoicTheAztec Код работал при первом запуске, но он возвращается к исходному тексту Place Order после перезагрузки Ajax в сводке заказа. Снимок экрана: ссылка - person Rosalito Udtohan; 17.05.2021