我对woocommerce订单有此特定要求。因此,我想要实现的是,woocommerce中的订单总数达到特定数量(例如200)后,我就不再接受订单,并且想要显示“缺货” ”或任何其他自定义消息(基本上我不希望客户在这种情况变为真时购买任何东西)关于我库存中的每种产品。我希望这种逻辑也适用于可变产品。
我能够获得订单数,但现在我被困住了。这是我到目前为止尝试过的。
function display_woocommerce_order_count( $atts, $content = null ) {
$args = shortcode_atts( array(
'status' => 'processing',
), $atts );
$statuses = array_map( 'trim', explode( ',', $args['status'] ) );
$order_count = 0;
foreach ( $statuses as $status ) {
if ( 0 !== strpos( $status, 'wc-' ) ) {
$status = 'wc-' . $status;
}
$order_count += wp_count_posts( 'shop_order' )->$status;
}
echo number_format( $order_count );
if($order_count == 200){
//Then make all products go out of stock automatically
//Not able to figure out this part
}
}
请指导我如何从这里继续前进。
答案 0 :(得分:2)
您不能直接在简码中进行说明...而且,获取订单状态计数的功能也比较繁琐。相反,您可以使用以下自定义函数,该函数使用非常简单的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文件中。经过测试,可以正常工作。