Poniższy kod umożliwia dodawanie kategorii do produktu i usuwanie kategorii z produktu w zależności o ilości produktu w magazynie. Skopiuj poniższy kod do pliku functions.php
motywu.
Ustaw wymagane dla siebie parametry. W przykładnie została użyta kategoria o identyfikatorze 38 i graniczna ilość produktu w magazynie: 10 (linia 116).
category_id = $category_id; $this->stock_level = $stock_level; add_action( 'woocommerce_product_set_stock', array( $this, 'woocommerce_product_set_stock' ) ); add_action( 'woocommerce_variation_set_stock', array( $this, 'woocommerce_variation_set_stock' ) ); add_action( 'woocommerce_process_product_meta_variable', array( $this, 'woocommerce_process_product_meta_variable' ) ); } public function woocommerce_process_product_meta_variable( $product_id ) { /** @var WC_Product_Variable $product */ $product = wc_get_product( $product_id ); if ( 'yes' === get_option( 'woocommerce_manage_stock' ) ) { $managing_stock = true; $stock_quantity = 0; if ( !$product->managing_stock() ) { $available_variations = $product->get_available_variations(); foreach ( $available_variations as $available_variation ) { $variation = wc_get_product( $available_variation['variation_id'] ); if ( $variation->managing_stock() ) { $stock_quantity += $variation->get_stock_quantity(); } else { $managing_stock = false; } } } if ( $managing_stock ) { $category_ids = $product->get_category_ids(); if ( $stock_quantity <= $this->stock_level ) { if ( !in_array( $this->category_id, $category_ids ) ) { $category_ids[] = $this->category_id; $product->set_category_ids( $category_ids ); $product->save(); } } else { if ( in_array( $this->category_id, $category_ids ) ) { unset( $category_ids[array_search($this->category_id, $category_ids)] ); $product->set_category_ids( $category_ids ); $product->save(); } } } } } /** * @param WC_Product_Variation $variation */ public function woocommerce_variation_set_stock( $variation ) { /** @var WC_Product_Variable $product */ $product = wc_get_product( $variation->get_parent_id() ); $stock_quantity = 0; $available_variations = $product->get_available_variations(); foreach ( $available_variations as $available_variation ) { $variation = wc_get_product( $available_variation['variation_id'] ); if ( $variation->managing_stock() ) { $stock_quantity += $variation->get_stock_quantity(); } } $category_ids = $product->get_category_ids(); if ( $stock_quantity <= $this->stock_level ) { if ( !in_array( $this->category_id, $category_ids ) ) { $category_ids[] = $this->category_id; $product->set_category_ids( $category_ids ); $product->save(); } } else { if ( in_array( $this->category_id, $category_ids ) ) { unset( $category_ids[array_search($this->category_id, $category_ids)] ); $product->set_category_ids( $category_ids ); $product->save(); } } } /** * @param WC_Product $product */ public function woocommerce_product_set_stock( $product ) { $stock_quantity = $product->get_stock_quantity(); $category_ids = $product->get_category_ids(); if ( $stock_quantity <= $this->stock_level ) { if ( !in_array( $this->category_id, $category_ids ) ) { $category_ids[] = $this->category_id; $product->set_category_ids( $category_ids ); $product->save(); } } else { if ( in_array( $this->category_id, $category_ids ) ) { unset( $category_ids[array_search($this->category_id, $category_ids)] ); $product->set_category_ids( $category_ids ); $product->save(); } } } } /** * Example * when stock quantity equals or is less than 10 add product to category with id 38 * when stock is grater than 10 remove product from category with id 38 */ new studiowp_product_category_on_stock_change( 38, 10 );
View the code on Gist.
<?php
- w większości przypadków nie ma potrzeby dodawania go do pliku functions.php
.
Jeżeli nie używasz motywu potomnego pamiętaj o tym, że zmiany wprowadzone do pliku functions.php
zostaną nadpisane podczas aktualizacji motywu.