2015-06-29 3 views
1

Я разрабатываю тему Woocommerce для одного из моих клиентов. Для этого проекта мне нужно было клонировать форму тележки (на страницах продукта), чтобы отобразить ее в другом месте на странице. мне удалось это сделать с этим фрагментом кода:Как заставить «выбранный» атрибут для вариантов вариантов в Woocommerce?

$(document).on('found_variation', 'form.cart', function(event, variation) { // found_variation // woocommerce_variation_select_change 
    $('.fixed-price-right').empty(); 
    $(this).clone().appendTo('.fixed-price-right').each(function() { 
     $('.product-fixi').scrollToFixed();    
    });  
}); 

Во-первых, на каждом изменении вариации, я опорожнить DIV, в котором будет отображаться форма клон. Затем я клонировал его и зафиксировал контейнер.

Проблема в том, что я получаю все, кроме выбранного значения вариации. Собственно, выбранное по умолчанию значение получило этот атрибут: selected = "selected". Но этот атрибут не применяется к другим параметрам. Здесь вы можете увидеть живой пример: http://www.pro4mance.com.au/product/produrance-energy-gels-2/

Если я отправляю из клонированной формы, продукт добавляется, но без опции.

Странно то, что если я добавлю вручную (с веб-консоли) этот attr в правой части клонированной формы, а затем добавлю продукт в корзину, продукт будет добавлен со всеми хорошими вариантами.

Я действительно не знаю, как принудительно добавлять выбранные = "selected" при каждом изменении. Может кто-то, пожалуйста, помогите мне справиться с этим?

Спасибо всем!

+0

1) рекомендую опубликовать это на http://wordpress.stackexchange.com/ 2) почему клон jQuery, почему бы просто не использовать цикл снова для создания данных во второй раз? – zipzit

+0

Спасибо за первую рекомендацию @zipzit. Я добавлю вопрос. Что касается второго момента, что вы подразумеваете под «повторением цикла»? Вы предлагаете добавить его напрямую через php? –

ответ

1

Для всех, кто нуждается, чтобы заставить добавление «выбран» атрибута переменных опционных WooCommerce, вот как я это сделал (используя JQuery):

$('form.cart').on('change', '.variations select', function(event) { 
    $val=$(this).val(); 
    $(this).children('option').each(function(){ 
     $childVal = $(this).val(); 
     if ($childVal == $val) { 
      $(this).attr('selected', 'selected'); 
     } else { 
      $(this).removeAttr('selected'); 
     } 
    }); 
}); 

Вы можете улучшить его (это может быть, не лучший способ сделать это).

0

Я думаю, вам нужно будет посмотреть файл cart.php в папке WooCommerce templates. Используйте это, чтобы создать свой собственный файл корзины. Просто запустите цикл во второй раз, чтобы получить ТОЧНО, что вы хотите, доставляемые непосредственно с сервера. ref: WordPress -- "the Loop" Актуальная строка кода, которую вы интересуете, есть foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { Для телефона WooCommerce это верхняя часть замыкания. Добавьте эту строку еще раз, с вашей собственной настройки, чтобы соответствовать нужной второй копии содержимого корзины ...

Я бы рекомендовал оставить JQuery из него ...

Вы, очевидно, не хотите добавить непосредственно в пакете WooCommerce (в случае будущих обновлений) ... (обновления здесь!)

Ого, кажется, очень легко ...

WooCommerce (и почти все дополнения) обеспечивает систему шаблонов. Это означает, что каждый элемент, отображаемый на странице WooCommerce, может быть переопределен .

преимуществом данной системы является то, что вы можете изменить отображение на элемента без редактирования файлов ядра WooCommerce (что абсолютно не рекомендуется, если вы сделаете это, все ваши изменения будут потеряны при следующее обновление WooCommerce, так просто не делай этого). Все шаблоны: , расположенные в папке woocommerce/templates. Как поясняется в нашей документации , все, что вам нужно сделать, это создать папку woocommerce в каталоге вашей темы, и в этой папке дублируйте файлы , которые вы хотите переопределить. Обратите внимание, что мы настоятельно рекомендуем использовать дочернюю тему , чтобы не терять никаких изменений во время вашей темы. .

+0

Спасибо за рекомендацию @zipzit. Я уже работаю с WC tpls самостоятельно. На самом деле, может быть, я не знаю, как это сделать, или у вас нет своего уровня хозяина, но я использовал jQuery, чтобы иметь тот же контент или функцию «добавить в корзину», когда я обновляю тот или иной (в случае переменные). Я пытался идти своим путем. «Добавить в корзину» хорошо отображается, но не обновляется в соответствии с выбранными мной вариантами переменных. Как вы думаете, он может работать с вашим решением? Например, я добавил действие 'global $ product; do_action ('woocommerce_'. $ Product-> product_type. '_add_to_cart');' в content-single-product.php –

Смежные вопросы