我们是一家二手公司,我们努力证明所售产品对环境的影响。
为此,我们要在首页上显示特定日期之间售出的产品数量,然后将其乘以一个常数因子以显示影响(例如说节省的水量)。
我们将举办一个大型的销售活动,我们计划在首页上实时显示该活动,但是到目前为止,我一直无法找到一种方法来显示首页上两个日期之间的已售产品数量。
如何打印某些日期之间的已售物品数量?
我知道后端有一个报告,但是我想通过自定义简码在前端显示它。
答案 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"]
[num_items_sold from="2020-05-02" to="2020-08-17"]