【问题标题】:Is it possible to filter results by a specific meta key's value?是否可以通过特定的元键值过滤结果?
【发布时间】:2019-07-18 19:32:26
【问题描述】:

我正在尝试显示处于特定状态且付款方式为“ppec-paypal”的所有订单的总价值。

我尝试使用 AND 函数按 meta.meta_value 过滤

add_shortcode( 'show_total_pp', 'show_total_pp_shortcode' );

function show_total_pp_shortcode() {


global $wpdb;

$order_totalpp = apply_filters( 'woocommerce_reports_sales_overview_order_totals', $wpdb->get_row( "

SELECT SUM(meta.meta_value) AS total_sales, COUNT(posts.ID) AS total_orders FROM {$wpdb->posts} AS posts

LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id

WHERE meta.meta_key = '_order_total'

AND posts.post_type = 'shop_order'

AND meta.meta_value = 'ppec_paypal'

  AND posts.post_status IN ( '" . implode( "','", array( 'wc-processing','wc-on-hold' ) ) . "' )

" ) );

return absint( $order_totalpp->total_sales);

  echo $order_totalpp;

}

我有这个代码字符串仅用于基于状态的订单,但是当我尝试通过添加以下行来过滤付款方式时: " AND meta.meta_value _payment_method = 'ppec_paypal' " 它不起作用,得到一个“0”值。 我猜我的代码中有语法错误。

【问题讨论】:

    标签: php sql wordpress woocommerce shortcode


    【解决方案1】:

    对于左连接,您不应在 where 子句中使用与左连接表相关的列(这种方式可用作内连接) 但是您应该将此条件添加到相关的 ON 子句中

    SELECT SUM(meta.meta_value) AS total_sales, COUNT(posts.ID) AS total_orders 
    FROM {$wpdb->posts} AS posts
    LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id 
        AND  meta.meta_key = '_order_total'
            AND meta.meta_value = 'ppec_paypal'
    WHERE  posts.post_type = 'shop_order'
    AND posts.post_status IN ( '" . implode( "','", array( 'wc-processing','wc-on-hold' ) ) . "' )
    

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多