我希望限制每个用户每天只能注册一个订单。
为此,我需要在注册该用户是否具有任何“ wp-processing”订单之前检查每个用户的订单?
我在PHP下方编写了MySQL查询,但这是行不通的。
我打印了'$ sql_count_from_status'的值,并在phpmyadmin的“ SQL”选项卡中尝试查找错误。 变量的值为:
SELECT count(ID) FROM wp_posts p LEFT JOIN wp_postmeta m ON p.ID=m.post_id WHERE p.post_status LIKE 'wc-processing' AND p.post_type LIKE 'shop_order' AND m.meta_key LIKE '_customer_user' AND m.meta_value LIKE '100577';
,结果显示我在phpmyadmin中为零。现在我知道查询有问题,因为我有用户100577的“处理订单”。
function get_orders_count_from_status( $status , $this_user_id){
global $wpdb;
// We add 'wc-' prefix when is missing from order staus
$status = 'wc-' . str_replace('wc-', '', $status);
$sql_count_from_status = "
SELECT count(ID) FROM {$wpdb->prefix}posts p
LEFT JOIN {$wpdb->prefix}postmeta m
ON p.ID=m.post_id
WHERE p.post_status LIKE '$status' AND p.post_type LIKE 'shop_order'
AND m.meta_key LIKE '_customer_user'
AND m.meta_value LIKE '".$this_user_id."';";
return $wpdb->get_var($sql_count_from_status);
}
答案 0 :(得分:1)
这是一个合理查询的示例(尽管依靠LEFT JOIN有点奇怪):
SELECT count(*)
FROM {$wpdb->prefix}posts p
LEFT
JOIN {$wpdb->prefix}postmeta m
ON m.post_id = p.ID
AND m.meta_key = '_customer_user'
AND m.meta_value = :this_user_id
WHERE p.post_status LIKE :status
AND p.post_type = 'shop_order'