Intereting Posts
Ajax вызывает получение ошибки PHP – группа флажков Знание с помощью PHP, если браузер может воспроизводить аудиофайл с помощью тега html5 audio Неустранимая ошибка: вызов неопределенной функции ftp_ssl_connect () как установить pspell в php5 / ubuntu? Выбор случайного элемента по пользовательским весам Laravel 5.2 нужен пример, который реализует драйверы аутентификации по умолчанию / «Multi-Auth». который требует много работ прямо сейчас, поскольку Поведение PHP ltrim с символьным списком поздняя статическая привязка в PHP Переслать домен с подкаталогами в другие домены с подкаталогами Math / Algorithm / JS: Как определить, пересекаются ли прямоугольники 2+, учитывая TopLeft (x0, y0) и Bottom-Right (x1, y1) каждого прямоугольника где мы можем указать контроллер и действие по умолчанию в yii получение Gii для работы над Yii 2.0 Функция обратного вызова php в классе Работа с адресами IPv6 в PHP

Добавить опцию акции в woocommerce

Я хотел бы добавить новый вариант в раскрывающийся список вариантов акций для продукта. По умолчанию «Нет на складе», «На складе», и я хотел бы добавить третий вариант.

Я нашел метод, который отображает выпадающий список (в классе-wc-meta-box-product-data.php)

// Stock status woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array( 'instock' => __( 'In stock', 'woocommerce' ), 'outofstock' => __( 'Out of stock', 'woocommerce' ) ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) ); do_action( 'woocommerce_product_options_stock_status' ); 

Но я не хочу напрямую редактировать класс Woocommerce, чтобы мы могли обновлять Woocommerce, не теряя при этом никакого пользовательского кода. Есть ли способ переопределить этот метод?

для любого заинтересованного, вот полное решение, основанное на подходе Лейлы. Предупреждение! Мое решение предназначено для работы только с отключенной опцией «управлять запасами» WooCommerce! Я не работаю с точными суммами на складе. Весь код идет на functions.php , как обычно.

Внутренняя часть

Удаление поля выпадающего списка состояния. Добавление класса CSS для выделения моего нового настраиваемого поля. В раскрывающемся списке появилась новая опция «По запросу».

 function add_custom_stock_type() { ?> <script type="text/javascript"> jQuery(function(){ jQuery('._stock_status_field').not('.custom-stock-status').remove(); }); </script> <?php woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array( 'instock' => __( 'In stock', 'woocommerce' ), 'outofstock' => __( 'Out of stock', 'woocommerce' ), 'onrequest' => __( 'On Request', 'woocommerce' ), // The new option !!! ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) ); } add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type'); 

К сожалению, WooCommerce сохранит только значения «instock» или «outofstock» с помощью собственных функций. Поэтому после обработки данных продукта я снова должен повторно сохранить свой запас.

 function save_custom_stock_status( $product_id ) { update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) ); } add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1); 

Часть шаблона

И последнее: мне нужно изменить данные, возвращаемые get_availability() . Когда «управление запасами» отключено, WooCommerce снова знает значения «instock» и «outofstock». Таким образом, я проверяю состояние запасов самостоятельно.

 function woocommerce_get_custom_availability( $data, $product ) { switch( $product->stock_status ) { case 'instock': $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' ); break; case 'outofstock': $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' ); break; case 'onrequest': $data = array( 'availability' => __( 'On request', 'woocommerce' ), 'class' => 'on-request' ); break; } return $data; } add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2); 

Может быть, это не пуленепробиваемое решение … В конце концов, я его обновлю.

Ну, я закончил тем, что скрыл выпадающий вариант опциона на акции в Javascript

 add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type'); function add_custom_stock_type() { // Stock status - We remove the default one ?> <script type="text/javascript"> jQuery('_stock_status').remove(); </script> <?php } 

и создал новый, используя этот учебник: http://www.remicorson.com/mastering-woocommerce-products-custom-fields/ Не уверен, что это самое чистое решение, но оно по крайней мере не касается основных файлов! 🙂