Изменение цен на товары через крючок в WooCommerce 3

В WooCommerce мне нужно умножить цены всех продуктов на число. Поэтому я использовал следующее (через плагин) :

add_filter('woocommerce_get_regular_price', array( $this, 'my_custom_price'), 99); add_filter('woocommerce_get_price', array( $this, 'my_custom_price'), 99); function my_custom_price( $original_price ) { global $post, $woocommerce; //Logic for calculating the new price here $new_price = $original_price * 2; //Return the new price (this is the price that will be used everywhere in the store) return $new_price; } 

Но это не работает для продуктов вариации. Я пробовал следующие крючки без везения:

 add_filter('woocommerce_get_variation_regular_price', array( $this, 'my_custom_price'), 99); add_filter('woocommerce_get_variation_price', array( $this, 'my_custom_price'), 99); 

Единственный, который работает на полпути, – это один:

 add_filter('woocommerce_variation_prices_price', array( $this, 'my_custom_price'), 99); 

Но это просто изменило общую цену, а не выбранную вариационную цену. См. Изображение ниже, цена BsF. 200, а общая цена права, 200 х 2 = 400, но вариационная цена при выборе еще показывает 200:

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

Вариационная цена

Есть ли что-то, что мне не хватает, или что-то не так?

Обновлено (2018) с 2 версиями (проверено и работает в Woocommerce 3.3.x) :

1) Версия плагина с функцией конструктора:

Используемые вами крючки устаревают в WooCommerce 3+

Чтобы он работал для всех цен на продукты, включая цены на вариации , вы должны использовать это:

 ## The following goes inside the constructor ## // Simple, grouped and external products add_filter('woocommerce_product_get_price', array( $this, 'custom_price' ), 99, 2 ); add_filter('woocommerce_product_get_regular_price', array( $this, 'custom_price' ), 99, 2 ); // Variations add_filter('woocommerce_product_variation_get_regular_price', array( $this, 'custom_price' ), 99, 2 ); add_filter('woocommerce_product_variation_get_price', array( $this, 'custom_price' ), 99, 2 ); // Variable (price range) add_filter('woocommerce_variation_prices_price', array( $this, 'custom_variable_price' ), 99, 3 ); add_filter('woocommerce_variation_prices_regular_price', array( $this, 'custom_variable_price' ), 99, 3 ); ## This goes outside the constructor ## public function custom_price( $price, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($product->get_id()); return $price * 2; // X2 for testing } public function custom_variable_price( $price, $variation, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($variation->get_id()); return $price * 2; // X2 for testing } 

Код протестирован и отлично работает (только) в WooCommerce 3+.


2) Для версии темы: файл functions.php для активной дочерней темы (или активной темы):

 // Simple, grouped and external products add_filter('woocommerce_product_get_price', 'custom_price', 99, 2 ); add_filter('woocommerce_product_get_regular_price', 'custom_price', 99, 2 ); // Variations add_filter('woocommerce_product_variation_get_regular_price', 'custom_price', 99, 2 ); add_filter('woocommerce_product_variation_get_price', 'custom_price', 99, 2 ); function custom_price( $price, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($product->get_id()); return $price * 2; // X2 for testing } // Variable (price range) add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 99, 3 ); add_filter('woocommerce_variation_prices_regular_price', 'custom_variable_price', 99, 3 ); function custom_variable_price( $price, $variation, $product ) { // Delete product cached price (if needed) // wc_delete_product_transients($variation->get_id()); return $price * 2; // X2 for testing } 

Протестировано и работает над woocommerce 3+


Для продуктов в продаже у вас есть такие крючки:

  • woocommerce_product_get_sale_price (простые, сгруппированные и внешние продукты)
  • woocommerce_variation_prices_sale_price (переменные продукты (min-max))
  • woocommerce_variation_prices_sale_price (варианты продуктов)
Interesting Posts

Реализовать графическую структуру данных в Rust

Скрытые черты Eclipse

Подтвердить подпись Authenticode на EXE-C ++ без CAPICOM

Ошибка создания bean-компонента с именем «entityManagerFactory», определенным в ресурсе пути classа: вызов метода init

JavaScript console.log вызывает ошибку: «Синхронный XMLHttpRequest в основном streamе устарел …»

Ошибка ссылки на службу: не удалось сгенерировать код для ссылки на службу

Как вертикально центрировать div для всех браузеров?

Как я могу запустить команду AppleScript или оболочки в Mac OS X при разблокировке экрана?

Рельсы, где условие, использующее NOT NULL

В чем разница между отсоединением fragmentа и его удалением?

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

Как передать несколько параметров в Objective-C?

Подключение к компьютерам в другой сети маршрутизатора

Почему блок Try / Catch создает новую область переменных?

Вставить презентацию PowerPoint в HTML

Давайте будем гением компьютера.