在WooCommerce中用短代码显示日期之间售出的商品数量

时间:2020-10-26 18:12:10

标签: php sql wordpress date woocommerce

我们是一家二手公司,我们努力证明所售产品对环境的影响。

为此,我们要在首页上显示特定日期之间售出的产品数量,然后将其乘以一个常数因子以显示影响(例如说节省的水量)。

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

如何打印某些日期之间的已售物品数量?

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下简短代码对wp_wc_order_stats数据库表进行非常轻巧的SQL查询,以获取日期之间的已售商品数量:

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 very light SQL query
        $num_items_sold = $wpdb->get_var( $wpdb->prepare("
            SELECT  SUM(num_items_sold)
            FROM    {$wpdb->prefix}wc_order_stats
            WHERE   date_created >= '%s'
                AND date_created <= '%s'
        ", $date_from, $date_to ) );

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

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试并可以在WooCommerce 4+上使用。


对于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>';
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。

用法示例:

  • 具有唯一的日期“开始于” (直到“现在”)[num_items_sold from="2019-05-02"]
  • 带有日期“ from”和日期“ to”:[num_items_sold from="2020-05-02" to="2020-08-17"]