#php #wordpress #woocommerce #product #taxonomy-terms
#php #wordpress #woocommerce #продукт #таксономия-термины
Вопрос:
В WooCommerce
, если товар распродан, я хотел бы добавить к нему категорию «распродано», чтобы я мог показывать эти товары в отдельном разделе.
Я создал категорию «распродано» в WooCommerce
/ WordPress
панели администратора.
Это то, что у меня есть в моем functions.php
:
add_action( 'woocommerce_before_shop_loop_item_title', 'mytheme_display_sold_out_loop_woocommerce' );
function mytheme_display_sold_out_loop_woocommerce() {
global $product;
if ( !$product->is_in_stock() ) {
// add category "sold out"
}
}
Теперь, как я могу автоматически добавить категорию «распродано» к любому распроданному WooCommcerce
продукту?
Ответ №1:
Предполагая, что термин категории продукта «распродано» существует, попробуйте следующее:
add_action( 'woocommerce_before_shop_loop_item_title', 'mytheme_display_sold_out_loop_woocommerce' );
function mytheme_display_sold_out_loop_woocommerce() {
global $product;
$term_name = 'Sold out';
// Get the product category term Id for "Sold out" term name
$term_id = get_term_by( 'name', $term_name, 'product_cat' )->term_id;
// 1. Add product category "Sold out"
if ( ! $product->is_in_stock() amp;amp; ! has_term( $term_id, 'product_cat', $product->get_id() ) ) {
// Get product categories (if there is any)
$term_ids = (array) $product->get_category_ids();
// Add the product category term Id for "Sold out" term name to $term_ids array
$term_ids[] = $term_id;
$product->set_category_ids( $term_ids ); // Update product categories
$product->save(); // Save to database
}
// 2. Remove product category "Sold out"
elseif ( $product->is_in_stock() amp;amp; has_term( $term_id, 'product_cat', $product->get_id() ) ) {
// Get product categories (if there is any)
$term_ids = (array) $product->get_category_ids();
// Remove the product category term Id for "Sold out" term name in $term_ids array
if ( ( $key = array_search( $term_id, $term_ids ) ) !== false ) {
unset($term_ids[$key]);
}
$product->set_category_ids( $term_ids ); // Update product categories
$product->save(); // Save to database
}
}
Код отправляется в functions.php файл вашей активной дочерней темы (или active theme). Это должно сработать.
Теперь должно быть проще использовать термин Id для категории продукта «распродано», чтобы таким образом вы могли заменить (в коде):
$term_name = 'Sold out';
// Get the product category term Id for "Sold out" term name
$term_id = get_term_by( 'name', $term_name, 'product_cat' )->term_id;
используя только идентификатор термина для термина категории продукта ‘Sold out’, например, (замените 19
на реальный идентификатор термина):
$term_id = 19;
Комментарии:
1. Большое вам спасибо! Это выглядит именно так, как мне нужно. Я попробую ваше решение. 🙂