#php #wordpress #woocommerce
#php #wordpress #woocommerce
Вопрос:
Я пытаюсь добавить настраиваемое поле «Цвет» в свои заказы woocommerce, но это настраиваемое поле должно быть в нескольких определенных категориях, скажем, категории «баллоны», поэтому код внутри functions.php неужели это:
add_action('woocommerce_before_add_to_cart_button','wdm_add_custom_fields');
/**
* Adds custom field for Product
* @return [type] [description]
*/
function wdm_add_custom_fields()
{
global $product;
ob_start();
$terms = get_the_terms( $product->get_id(), 'product_cat' );
// Loop through term objects
foreach( $terms as $term ) {
if ( "ballons" === $term->slug ) {
?>
<div class="wdm-custom-fields">
<label>Color </label>
<select type="text" name="wdm_name">
<option value="blue">Blue</option>
<option value="red">Rojo</option>
<option value="green">Green</option>
</select>
</div>
<div class="clear"></div>
<br>
<?php
// break; // The term match, we stop the loop.
}
}
?>
Поле выбора появляется во всех продуктах, похоже, что приведенный выше код не ограничивает поле выбора конкретной категорией, любая помощь будет признательна
Комментарии:
1. Вы пробовали просматривать термины: print_r($ terms); чтобы узнать, есть ли «ballons» в списке для каждого продукта
2. да, но ничего не печатает….
3. Вероятно, это из-за выходного буфера (ob_start()). Попробуйте добавить срок как вариант, просто чтобы проверить, » <option value=»»> <?php echo $term; ?> </option>
4. Я сделал, но ничего не печатается, просто пустое место
5. Я бы доверял @LoicTheAztec и использовал его ответ. Очень знающий джентльмен (я предполагаю, что здесь пол).
Ответ №1:
Используйте вместо этого выделенную условную функцию WordPress has_term()
следующим образом:
add_action('woocommerce_before_add_to_cart_button', 'before_add_to_cart_button_custom_fields');
function before_add_to_cart_button_custom_fields() {
global $post, $product;
// Here define your terms (can be terms Ids, slugs or names)
$terms = array('ballons');
if ( has_term( $terms, 'product_cat' ) ) {
?>
<div class="wdm-custom-fields">
<label><?php _e("Color", "woocommerce"); ?></label>
<select type="text" name="wdm_name">
<option value="blue"><?php _e("Blue", "woocommerce"); ?></option>
<option value="red"><?php _e("Rojo", "woocommerce"); ?></option>
<option value="green"><?php _e("Green", "woocommerce"); ?></option>
</select>
</div>
<div class="clear"></div>
<br>
<?php
}
}
Код вводится functions.php файл вашей активной дочерней темы (или активной темы). Протестировано и работает.
Вы должны заменить
wdm_name
простоcolor
везде в своем коде
Комментарии:
1. хороший ответ, однако пока не работает … даже с var_dump ($ terms) он ничего не напечатает
2. @ClaudioMartinez Извините, но я проверил этот код на практике, и он работает… Вы можете видеть это на этом тестовом сервере (с последними версиями WP / WC) для категории товаров «Футболки». Итак, в вашем случае где-то что-то не так, поскольку код работает просто отлично (ваша категория «ballons» должна быть установлена непосредственно для продукта, если нет, код не будет работать, и вам понадобится что-то другое).