axe*_*a82 6 php mysql woocommerce
问题:
我需要一种方法来首先使用特定的优惠券代码进行所有销售.然后从所有销售中获得总收入(最好减去这些销售的任何回报.获得实际收入值).
执行的想法
我正在使用woocommerce 2.6.8和MySql数据库.我的猜测是,我不得不首先计算使用PHP和MySql的特定优惠券的销售数量.然后,对于具有特定优惠券的每个唯一订单ID,对总和进行新查询.
关于如何看待PHP和查询的任何建议都非常感谢:)
我应该指出,我不打算从优惠券中获得折扣的总和.我需要计算与特定优惠券(而不是折扣)一起销售的总价值.
好的,到目前为止仍然没有可行的解决方案.但这就是我认为它的基本结构.获得总数并不容易,因为优惠券与订单没有直接关联.我相信查询必须是这样的:
{} TBLPRFX _woocommerce_order_items
步骤1.获取order_id FOR order_item_name = {COUPON_NAME}
步骤2.获取order_item_id FOR order_item_type = line_item WHERE order_id EQUAL {来自第1步的结果}
| order_item_id | order_item_name | order_item_type | order_id |
| 40971 | {COUPON_NAME} | 优惠券| 001
| 40970 | 增值税| 税| 001
| 40969 | {PRODUCT_NAME} | line_item | 001
-
{} TBLPRFX _woocommerce_order_itemmeta
步骤3. SUM meta_value FROM meta_key = _line_tax AND meta_key = _line_total WHERE order_item_id = {RESULT FROM STEP 2}
| order_item_id | meta_key | meta_value |
| 40969 | _line_tax | {} VALUE_TAX
| 40969 | _line_total | {} VALUE_TOTAL
| 40969 | _product_id | {} PRODUCT_ID
-
这是我需要帮助搞清楚的查询:)不确定如何在MySql和PHP中要求这个.我的想法是将其作为"order_item_name = {COUPON_NAME_VARIABLE}"的foreach,因此我可以总结使用该优惠券的所有销售的总额(即不是优惠券折扣值).
因此,经过大量测试后,我想出了一个可行的解决方案。它不是最时尚的,但可以完成工作。
如果任何 SQL 忍者看到这一点,如果您能建议任何更简化的查询,那就太好了:)
在制定第一个可行的解决方案后,我意识到需要检查更多步骤才能获得更准确的总数。处理退款、税费、折扣等,并确保我只从已完成的订单中获取数据(因为取消、暂停、待处理等在完成之前不是销售)。
所以,这就是我最终的结果。就像我说的,我知道它需要一些工作并且可能可以做得更好。但就目前而言,它有效。
FUNCTIONS.PHP 的修订代码 -
// COUPON CHECK
function couponcheck() {
global $wpdb;
$gtl = 0; // Grand Total
$total_sales = 0;
$cpn = $_GET['cpn']; // Get coupon name from URL string
$tblprfx = '[YOUR_TABLE_PREFIX]'; // Table prefix
$wpps = 'posts'; // Look for post_status
$wppm = 'postmeta';
$wcoi = 'woocommerce_order_items';
$conversion_value = 1;
$base_currency = '[YOUR_BASE_CURRENCY]';
$currency;
$orders_made;
// Check to make sure there is a couon name in string
if(isset($cpn) && !empty($cpn)){
// Query chain
$init_result = $wpdb->get_results("SELECT order_id FROM {$tblprfx}{$wcoi} WHERE order_item_name='$cpn'");
$orders_made = count($init_result);
foreach($init_result as $ir){
$r1 = $ir->order_id;
$completed_result = $wpdb->get_results( "SELECT ID FROM {$tblprfx}{$wpps} WHERE post_status='wc-completed' AND ID=$r1" );
foreach($completed_result as $post_rows) {
$pr = $post_rows->ID;
$completed_sales += 1;
$currency_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_currency'" );
foreach($currency_result as $cr) {
$currency = $cr->meta_value;
if($currency === 'EUR'){
$currency = 'EUR';
$currency_rate = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_woocs_order_rate'" ); foreach($currency_rate as $rv) {
$rate_value = $rv->meta_value;
$conversion_value = $rate_value;
}
}
}
$data_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_total'" );
foreach($data_result as $dr) {
$d = $dr->meta_value;
if($currency === 'EUR'){
$eur += $d;
$d = $d/$conversion_value;
}else{
$[YOUR_BASE_CURRENCY] += $d;
}
$gtl += $d;
}
}
}
// Total number of sales
$refunded_orders = $orders_made-$completed_sales;
$order_avg = $gtl/$completed_sales;
echo '<p>Total <strong>completed, non-refunded, sales made (after discounts)</strong> with coupon <strong>' . strtoupper($cpn) . '</strong>: <br />(Number of refunded orders: <strong>' . $refunded_orders . ')</strong></p><h2>' . $completed_sales . '</h2><p>At a total <strong>sales value</strong> of:</p><h2>' . number_format($[YOUR_BASE_CURRENCY],2) . ' [YOUR_BASE_CURRENCY]</h2><h2>€' . number_format($eur,2) . '</h2><p>Adding up to a <strong>sum total</strong> of:</p><h2>' . number_format($gtl,2) . ' [YOUR_BASE_CURRENCY]</h2><p>Creating an average order value of:<br /><strong>' . number_format($order_avg,2) . ' [YOUR_BASE_CURRENCY]</strong>';
}
} add_shortcode('coupons', 'couponcheck');
Run Code Online (Sandbox Code Playgroud)需要注意的是,我将实际基础货币更改为 [YOUR_BASE_CURRENCY]。欢迎评论(建设性的):)
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |