Как изменить текст добавления в корзину для определенных вариантов в WooCommerce?

В моем магазине WooCommerce у меня есть простые продукты и переменные продукты, и простые продукты, и вариации имеют мета-значение pre_order, то есть да / нет.

Если этот параметр установлен на бэкэнде, я хочу, чтобы кнопка добавления в корзину говорила «Предварительный заказ», а не «Добавить в корзину».

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

Когда выбраны варианты вариантов, обновляются цена и номер SKU, во время этого процесса я также хочу проверить мета-значение, упомянутое выше, и если этот вариант имеет предварительный заказ мета-значения «да», то я также хотел бы изменить текст кнопки, но Я не могу найти способ сделать это!


person Gary Stewart    schedule 18.10.2017    source источник


Ответы (2)


WooCommerce предоставляет скрытое поле ввода с именем вариация_ид. Как только вариант изменяется, обновленный идентификатор варианта сохраняется в этом скрытом поле ввода. Итак, сначала вы должны обнаружить с помощью jQuery, когда значение этого поля ввода обновляется, при обнаружении запускайте свой собственный запрос ajax и проверяйте, был ли этот вариант назначен для предварительного заказа или нет, если да, теперь вы можете изменить текст добавления в корзину после ответ ajax - успех.

person Logan Young    schedule 18.10.2017

WooCommerce хранит детали вариаций (например, цену, размеры, вес и т. Д.) В атрибуте данных с именем data-product_variations в элементе .variations_form. Эти данные используются для отображения цены и других деталей, когда пользователь выбирает конкретный вариант. Вы можете добавить свое мета-значение в этот атрибут данных, используя фильтр woocommerce_available_variation, например:

add_filter('woocommerce_available_variation', 'vna_add_variation_meta');
function vna_add_variation_meta($dataattr, $product, $variation) {
    $dataattr['pre_order'] = get_post_meta($variation->get_id(), 'pre_order', true);
    return $dataattr;
}

Вы можете найти более подробную информацию о woocommerce_available_variation в class-wc-product-variable.php файле.

Получив мета-значение в элементе DOM, вы можете использовать следующее событие, чтобы узнать, когда пользователь выбрал вариант.

$( ".single_variation_wrap" ).on( "show_variation", function ( event, variation ) {
    // Fired when the user selects all the required dropdowns / attributes
    // and a final variation is selected / shown
    // Here you will need to get the value of 'pre_order' from the variation object
    // something like: variation.pre_order
    // and take appropriate action
} );

Обратите внимание: код не тестировался, поэтому возможны опечатки;)

person Vivek Athalye    schedule 14.01.2018