Вы не можете сделать это в своем шорткоде напрямую ... Кроме того, ваша функция для подсчета статуса заказов немного сложна. Вместо этого вы можете использовать следующую пользовательскую функцию, которая использует очень легкий SQL-запрос для получения количества заказов.
Другой набор перехваченных функций установит все продукты (даже вариации продуктов переменных продуктов) в состояние «Нет на складе», когда количество заказов достигнет 200.
Наконец, я изменил вашу функцию шорткода, которая будет отображать количество заказов.
Вы можете установить статусы заказов по своему усмотрению, в функции, которая подсчитывает заказы, также в вашем шорткоде.
Вместо этого используйте следующее:
// Utility function to get orders count based on orders statuses
// Default statuses are processing + completed (and you can change them as you like)
function get_orders_count_from_statuses( $statuses = 'processing, completed' ){
global $wpdb;
// Filtering order statuses
$statuses = "wc-" . str_replace(array("wc-",", ",","), array("",",","','wc-"), $statuses );
// return the query
return (int) $wpdb->get_var("SELECT count(ID) FROM {$wpdb->prefix}posts
WHERE post_status IN ('$statuses') AND `post_type` LIKE 'shop_order'");
}
// Set conditionally product status based on order count limit
add_filter( 'woocommerce_product_get_stock_status', 'conditional_product_status', 10, 2 );
add_filter( 'woocommerce_product_variation_get_stock_status', 'conditional_product_status', 10, 2 );
function conditional_product_status( $stock_status, $product ){
if( get_orders_count_from_statuses() >= 200 ){
$stock_status = 'outofstock';
}
return $stock_status;
}
// Your shortcode function that will display the count (if needed)
add_shortcode( 'order_count', 'display_woocommerce_order_count' );
function display_woocommerce_order_count( $atts ) {
$atts = shortcode_atts( array(
'statuses' => 'processing,completed',
), $atts, 'order_count' );
$order_count = get_orders_count_from_statuses( $atts['statuses'] );
return number_format( $order_count ); // Always use return (not echo for a shortcode)
}
Код помещается в файл function.php вашей активной дочерней темы (active theme). Проверено и работает.