WooCommerce - Как установить стандартную регулярную цену товара
Вы можете выполнить проверку на хуке save_post
, но WooCommerce уже имеет хук для обработки метаданных, где проверки типа записи и безопасности уже выполнены. Таким образом, используя их хук, вам просто нужно проверить пустую строку для обычной цены и установить её в 0.
function wpa104760_default_price( $post_id, $post ) {
if ( isset( $_POST['_regular_price'] ) && trim( $_POST['_regular_price'] ) == '' ) {
update_post_meta( $post_id, '_regular_price', '0' );
}
}
add_action( 'woocommerce_process_product_meta', 'wpa104760_default_price' );
Не уверен, что именно вы пытаетесь сделать с WooCommerce, но у меня был клиент, который использовал http://a3rev.com/shop/woocommerce-quotes-and-orders/ для перехода от обычного магазина с ценами и корзиной к каталогу с "запросом на предложение".
Редактирование: Хотя приведённый выше код сохранит 0 в качестве цены каждый раз при создании/обновлении товара, следующий код всегда позволит товару быть доступным для покупки, независимо от цены:
add_filter('woocommerce_is_purchasable', '__return_TRUE');
Чтобы полностью удалить "распродажу" (всплывающий значок), просто отключите его от соответствующего хука:
function woocommerce_remove_stuff(){
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
}
add_action('woocommerce_before_single_product', 'woocommerce_remove_stuff');

Спасибо за ваш ответ. Я попробовал использовать указанную функцию, но она, кажется, не позволяет добавить товар в корзину. Я пытаюсь создать систему запроса оборудования, где авторизованные пользователи могут добавлять оборудование (без указания цены) в корзину и оформлять "заказ" на эти товары. Пользователи являются сотрудниками моей компании, а оборудование уже принадлежит компании.

Я думал, что бесплатный товар можно добавить в корзину. Вы также можете попробовать переопределить фильтр woocommerce_is_purchasable
, чтобы он всегда возвращал true.

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

Мой код был для случая, когда вы создаёте или редактируете товар и не заполняете цену... то есть для цены по умолчанию. Он автоматически устанавливает цену в 0, но только при сохранении товара. Это не влияет на фронтенд, за исключением эффектов от нулевой цены. Ещё раз, думаю, что woocommerce_is_purchasable
может быть решением.

add_filter('woocommerce_is_purchasable', 'woocommerce_is_always_purchasable');
function woocommerce_is_always_purchasable(){ return true; }

Спасибо, вышеуказанное помогло, но по какой-то причине отображается значок распродажи. Можно ли полностью отключить функцию распродажи, так как я не буду её использовать.

Я нашел решение этой проблемы. Эта функция устанавливает обычную цену товара и цену со скидкой в 0 после обновления товара:
function set_default_price( $post_id, $post ) {
if ( isset( $_POST['_regular_price'] ) && trim( $_POST['_regular_price'] ) == '' ) {
update_post_meta( $post_id, '_regular_price', '0' );
}
if ( isset( $_POST['_sale_price'] ) && trim( $_POST['_sale_price'] ) == '' ) {
update_post_meta( $post_id, '_sale_price', '0' );
}
}
add_action( 'woocommerce_process_product_meta', 'set_default_price' );
Строка кода ниже делает новый товар доступным для покупки, вы можете использовать этот код для новых товаров:
add_filter('woocommerce_is_purchasable', '__return_TRUE');
