Мне нужно скрыть поле «количество» (где вводится количество перед добавлением в корзину) в Woocommerce на странице сведений о продукте и показывать только кнопку «добавить в корзину», которая затем помещает количество 1 в тележке. Причина в том, что я собираю количество на основе Gravity Forms.
Как отключить поле количества на странице сведений о продукте в woocommerce?
Ответы (11)
- Отредактируйте свой продукт.
- Щелкните «Инвентарь».
- Установите флажок "Продается индивидуально".
woocommerce_is_sold_individually
лучше всего подходит для общего применения ко всем продуктам.
- person helgatheviking; 07.12.2015
Самый безопасный способ - использовать встроенный хук или фильтр WordPress.
/**
* @desc Remove in all product type
*/
function wc_remove_all_quantity_fields( $return, $product ) {
return true;
}
add_filter( 'woocommerce_is_sold_individually', 'wc_remove_all_quantity_fields', 10, 2 );
Вы также можете удалить селектор количества в продуктах другого типа. Подробнее см. Здесь http://www.sutanaryan.com/how-to-remove-product-quantity-selectors-woocommerce/
Обратите внимание: использование этой опции фактически делает невозможным добавление товара в корзину более одного раза. После нажатия кнопки «Добавить в корзину» появится предупреждение о том, что этот товар может быть в вашей корзине только один раз. Это может быть желательно не для всех.
wc_remove_all_quantity_fields
похоже, что она может удалить ЛЮБОЕ поле количества ..
- person jave.web; 12.03.2015
add_filter( 'woocommerce_is_sold_individually', '__return_true' );
- person Dylan; 23.09.2016
Нет необходимости использовать плагин или редактировать function.php, просто отметьте опцию, показанную на изображении выше.
Существует бесплатный плагин для удаления селекторов количества, которые могут вам подойти. http://wordpress.org/extend/plugins/woocommerce-remove-quantity-fields/
Я нашел простой способ сделать это на одной странице продукта и сохранить счетчик количества в корзине. Просто поместите следующий код в functions.php
add_action( 'wp_head', 'quantity_wp_head' );
function quantity_wp_head() {
if ( is_product() ) {
?>
<style type="text/css">.quantity, .buttons_added { width:0; height:0; display: none; visibility: hidden; }</style>
<?php }
}
Вы можете проверить документацию woocommerce здесь: http://docs.woothemes.com/document/remov-product-content-based-on-category/
Плагин не нужен, например, вы можете скрыть его с помощью css. Но woocommerce позволяет вам продавать только 1 товар, без возможности добавить больше того же товара в корзину. Взгляните на woocommerce-> настройки. Это все есть.
Вам нужно отредактировать шаблон single-product/add-to-cart/variation-add-to-cart-button.php
.
Таким образом, вы можете просто скопировать этот шаблон в свою тему и отредактировать его, чтобы удалить поле количества. Это было бы примерно так:
<?php
/**
* Single variation cart button
*
* @see http://docs.woothemes.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates
* @version 2.5.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
global $product;
?>
<div class="woocommerce-variation-add-to-cart variations_button">
<button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
<input type="hidden" name="add-to-cart" value="<?php echo absint( $product->id ); ?>" />
<input type="hidden" name="product_id" value="<?php echo absint( $product->id ); ?>" />
<input type="hidden" name="variation_id" class="variation_id" value="0" />
</div>
Существует крайний случай, который не обрабатывается другими ответами на этот вопрос, опция woocommerce `` продается индивидуально '' эффективно удаляет ввод количества, но предотвращает добавление одного и того же продукта в корзину несколько раз.
В случае использования, когда у вас есть продукт с настраиваемыми атрибутами, где вы не хотите, чтобы количество было редактируемым, но вы все же хотите разрешить пользователю добавлять тот же продукт в корзину с разными атрибутами, тогда `` продается индивидуально '' вариант не сработает
В этом случае вам понадобится этот фильтр.
add_filter( 'woocommerce_cart_item_quantity', function ( $qty, $item_key, $item ) {
if ( ! empty( $item['custom_data'] ) ) { //Here check for your custom attribute
return sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $item_key );
}
return $qty;
}, 10, 3 );
Настройка продукта (или магазина в целом) на «продается индивидуально», как объясняется другими ответами здесь, теперь работает для меня, но я также нашел другое решение: скрытие поля количества на определенном идентификаторе страницы. Если кто-то хочет, чтобы поле отображалось на определенных страницах, а не на других по какой-либо причине, рассмотрите эту альтернативу:
.page-id-11111 .woocommerce .quantity .qty {
Display:None!important;
}
Это позволит людям добавлять несколько раз в корзину и редактировать количество при оформлении заказа, если они это делают, при этом скрывая поле количества на шорткоде / странице продукта. Дополнительная информация здесь: Удалить поле количества из Woocommerce, не предотвращая добавление нескольких тележек? (Я переработал сайт, поэтому в этом решении мне больше нет необходимости, но это может кому-то помочь.)
Вы также можете использовать woocommerce_quantity_input_min
и woocommerce_quantity_input_max
перехватывает, установив для обоих значений 1.
Фактически, в шаблоне /woocommerce/global/quantity-input.php
поле количества будет автоматически скрыто, если min и max имеют одинаковое значение.
// hides the quantity field on the product page
add_filter( 'woocommerce_quantity_input_min', 'hide_woocommerce_quantity_input', 10, 2 );
add_filter( 'woocommerce_quantity_input_max', 'hide_woocommerce_quantity_input', 10, 2 );
function hide_woocommerce_quantity_input( $quantity, $product ) {
// only on the product page
if ( ! is_product() ) {
return $quantity;
}
return 1;
}
Код протестирован и работает. Добавьте его в файл functions.php вашей активной темы.
Это очень просто, в woocommerce\includes\abstracts\abstract-wc-product.php
найдите abstract-wc-product.php
файл в woocommerce
Найдите код ниже на странице
$availability = sprintf( __( '%s in stock', 'woocommerce' ), $this->get_total_stock() );
замените этот код на
$availability = sprintf( __( '%s in stock', 'woocommerce' ),'');