Php 在WooCommerce中使用快捷码显示日期之间售出的商品数量

Php 在WooCommerce中使用快捷码显示日期之间售出的商品数量,php,sql,wordpress,date,woocommerce,Php,Sql,Wordpress,Date,Woocommerce,我们是一家二手公司,我们努力展示销售的产品对环境的影响 为此,我们希望在主页上显示特定日期之间销售的产品数量,并将其乘以常数因子以显示影响(例如,节约的水升) 我们将举办一个大型销售活动,我们计划在主页上实时显示,但到目前为止,我还无法找到在主页上显示两个日期之间销售的产品数量的方法 如何打印特定日期之间售出的商品数量? 我知道后端有一个报告,但我想通过自定义短代码在前端显示该报告。您可以使用以下短代码,在wp\u wc\u order\u stats数据库表上进行非常轻松的SQL查询,以获取日

我们是一家二手公司,我们努力展示销售的产品对环境的影响

为此,我们希望在主页上显示特定日期之间销售的产品数量,并将其乘以常数因子以显示影响(例如,节约的水升)

我们将举办一个大型销售活动,我们计划在主页上实时显示,但到目前为止,我还无法找到在主页上显示两个日期之间销售的产品数量的方法

如何打印特定日期之间售出的商品数量?


我知道后端有一个报告,但我想通过自定义短代码在前端显示该报告。

您可以使用以下短代码,在
wp\u wc\u order\u stats
数据库表上进行非常轻松的SQL查询,以获取日期之间售出的商品数量:

//至少需要WooCommerce版本4
添加快捷码('num\u items\u selled'、'display\num\u items\u selled');
功能显示\u数量\u商品\u售出($atts){
//设置defaullt时区(请参阅:https://www.php.net/manual/en/timezones.php)
日期默认时区设置(“欧洲/巴黎”);
$now=date('Y-m-dh:i:s',strotime(“now”);//立即格式化日期时间
//短代码属性(或参数)
提取(短码)附件(数组)(
'从'=>'',//日期从(必填)
'到'=>$now,//日期到(可选:默认值为“now”值)
),$atts,'num_items_salled');
//形成日期
$date_from=date('Y-m-d H:i:s',strottime($from));
$date_to=date('Y-m-d H:i:s',strottime($to));
如果(!空($date_from)){
全球$wpdb;
//自定义非常轻的SQL查询
$num\u items\u salled=$wpdb->get\u var($wpdb->prepare(“
选择总和(已售出的项目数量)
从{$wpdb->prefix}wc\u order\u stats
其中创建日期>='%s'
和日期\u创建前缀}woocommerce\u order\u itemmeta作为oim
内部联接{$wpdb->prefix}woocommerce\u order\u项目作为oi
关于oim.order\u item\u id=oi.order\u item\u id
内部联接{$wpdb->prefix}以o形式发布
在oi.order_id=o.id上
其中oim.meta_key='\u数量'
和o.post_状态('wc-processing'、'wc-completed')
和o.post_日期>='%s'

还有o.post_date哇,真的很感谢你的帮助!!amazing@LoicTheAztel事实上,它不起作用。快捷码有效,但售出的商品数量为空。我尝试更改日期(和格式),更改时区或任何可能影响的内容,但到目前为止什么都没有。我无法识别代码中的问题。如果您能看一看,我很高兴。谢谢!@SantiagoValdés我一直在测试我的代码,它工作得很好(在店面主题下的最后一个WooCommerce版本上进行了测试)..我想你会的,我在WC 3.9.1上,不确定这是否有什么关系。没有错误报告,它只是变为空白。变量$num_items_selled返回空白。编辑:显然该表在3.9.1中不存在。如果是这样的话,有什么解决方法吗?或者在以前的版本上有任何类似的表吗?我知道我们需要升级,但需要这样做我的时间:)再次感谢!@SantiagoValdés我为WooCommerce 3+添加了一个代码版本。
add_shortcode( 'num_items_sold', 'display_num_items_sold' );
function display_num_items_sold( $atts ) {
    // Set the defaullt timezone (see: https://www.php.net/manual/en/timezones.php)
    date_default_timezone_set( 'Europe/Paris' );

    $now = date( 'Y-m-d H:i:s', strtotime("now") ); // get now formated datetime

    // Shortcode attribute (or argument)
    extract( shortcode_atts( array(
        'from'   => '', // Date from (is required)
        'to'     => $now, // Date to (optional: default is "now" value)
    ), $atts, 'num_items_sold' ) );

    // Formating dates
    $date_from = date('Y-m-d H:i:s', strtotime($from) );
    $date_to   = date('Y-m-d H:i:s', strtotime($to) );

    if ( ! empty($date_from) ) {
        global $wpdb;

        // Custom SQL query
        $num_items_sold = $wpdb->get_var( $wpdb->prepare("
            SELECT     SUM(oim.meta_value)
            FROM       {$wpdb->prefix}woocommerce_order_itemmeta as oim
            INNER JOIN {$wpdb->prefix}woocommerce_order_items as oi
                ON     oim.order_item_id = oi.order_item_id
            INNER JOIN {$wpdb->prefix}posts as o
                ON     oi.order_id = o.ID
            WHERE      oim.meta_key = '_qty'
                AND    o.post_status IN ('wc-processing','wc-completed')
                AND    o.post_date >= '%s'
                AND    o.post_date <= '%s'
        ", $date_from, $date_to ) );

        return '<span class="num_items_sold">' . __("Items sold", "woocommerce") . ': ' . $num_items_sold . '</span>';
    }
}