array(
array(
'title' => __('Overview', 'woocommerce'),
'description' => '',
'hide_title' => true,
'function' => 'woocommerce_sales_overview'
),
array(
'title' => __('Sales by day', 'woocommerce'),
'description' => '',
'function' => 'woocommerce_daily_sales'
),
array(
'title' => __('Sales by month', 'woocommerce'),
'description' => '',
'function' => 'woocommerce_monthly_sales'
),
array(
'title' => __('Product Sales', 'woocommerce'),
'description' => '',
'function' => 'woocommerce_product_sales'
),
array(
'title' => __('Top sellers', 'woocommerce'),
'description' => '',
'function' => 'woocommerce_top_sellers'
),
array(
'title' => __('Top earners', 'woocommerce'),
'description' => '',
'function' => 'woocommerce_top_earners'
)
),
'customers' => array(
array(
'title' => __('Overview', 'woocommerce'),
'description' => '',
'hide_title' => true,
'function' => 'woocommerce_customer_overview'
),
),
'stock' => array(
array(
'title' => __('Overview', 'woocommerce'),
'description' => '',
'hide_title' => true,
'function' => 'woocommerce_stock_overview'
),
)
));
?>
1) : ?>
- $chart) :
$link = ''.$chart['title'].'';
$links[] = $link;
endforeach;
echo implode(' |
- ', $links);
?>
function weekendAreas(axes) {
var markings = [];
var d = new Date(axes.xaxis.min);
// go to the first Saturday
d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7))
d.setUTCSeconds(0);
d.setUTCMinutes(0);
d.setUTCHours(0);
var i = d.getTime();
do {
markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } });
i += 7 * 24 * 60 * 60 * 1000;
} while (i < axes.xaxis.max);
return markings;
}
function showTooltip(x, y, contents) {
jQuery('' + contents + '
').css( {
position: 'absolute',
display: 'none',
top: y + 5,
left: x + 5,
padding: '5px 10px',
border: '3px solid #3da5d5',
background: '#288ab7'
}).appendTo("body").fadeIn(200);
}
var previousPoint = null;
jQuery("#placeholder").bind("plothover", function (event, pos, item) {
if (item) {
if (previousPoint != item.dataIndex) {
previousPoint = item.dataIndex;
jQuery("#tooltip").remove();
if (item.series.label=="Sales amount") {
var y = item.datapoint[1].toFixed(2);
showTooltip(item.pageX, item.pageY, item.series.label + " - " + "" + y);
} else if (item.series.label=="Number of sales") {
var y = item.datapoint[1];
showTooltip(item.pageX, item.pageY, item.series.label + " - " + y);
} else {
var y = item.datapoint[1];
showTooltip(item.pageX, item.pageY, y);
}
}
}
else {
jQuery("#tooltip").remove();
previousPoint = null;
}
});
var dates = jQuery( "#from, #to" ).datepicker({
defaultDate: "",
dateFormat: "yy-mm-dd",
//changeMonth: true,
//changeYear: true,
numberOfMonths: 1,
minDate: "-12M",
maxDate: "+0D",
showButtonPanel: true,
showOn: "button",
buttonImage: "plugin_url(); ?>/assets/images/calendar.png",
buttonImageOnly: true,
onSelect: function( selectedDate ) {
var option = this.id == "from" ? "minDate" : "maxDate",
instance = jQuery( this ).data( "datepicker" ),
date = jQuery.datepicker.parseDate(
instance.settings.dateFormat ||
jQuery.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
});
'$after'";
$where .= " AND post_date < '$before'";
return $where;
}
/**
* Sales overview
*/
function woocommerce_sales_overview() {
global $start_date, $end_date, $woocommerce, $wpdb;
$total_sales = 0;
$total_orders = 0;
$order_items = 0;
$discount_total = 0;
$shipping_total = 0;
$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
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_total'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
");
$total_sales = $order_totals->total_sales;
$total_orders = $order_totals->total_orders;
$discount_total = $wpdb->get_var("
SELECT SUM(meta.meta_value) AS total_sales FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key IN ('_order_discount', '_cart_discount')
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
");
$shipping_total = $wpdb->get_var("
SELECT SUM(meta.meta_value) AS total_sales FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_shipping'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
");
$order_items_serialized = $wpdb->get_col("
SELECT meta.meta_value AS items FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_items'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
");
if ($order_items_serialized) foreach ($order_items_serialized as $order_items_array) {
$order_items_array = maybe_unserialize($order_items_array);
if (is_array($order_items_array)) foreach ($order_items_array as $item) $order_items += (int) $item['qty'];
}
?>
-1,
'orderby' => 'post_date',
'order' => 'ASC',
'post_type' => 'shop_order',
'post_status' => 'publish' ,
'suppress_filters'=> 0,
'tax_query' => array(
array(
'taxonomy' => 'shop_order_status',
'terms' => array('completed', 'processing', 'on-hold'),
'field' => 'slug',
'operator' => 'IN'
)
)
);
$orders = get_posts( $args );
$order_counts = array();
$order_amounts = array();
// Blank date ranges to begin
$count = 0;
$days = ($end_date - $start_date) / (60 * 60 * 24);
if ($days==0) $days = 1;
while ($count < $days) :
$time = strtotime(date('Ymd', strtotime('+ '.$count.' DAY', $start_date))).'000';
$order_counts[$time] = 0;
$order_amounts[$time] = 0;
$count++;
endwhile;
if ($orders) :
foreach ($orders as $order) :
$order_total = get_post_meta($order->ID, '_order_total', true);
$time = strtotime(date('Ymd', strtotime($order->post_date))).'000';
if (isset($order_counts[$time])) :
$order_counts[$time]++;
else :
$order_counts[$time] = 1;
endif;
if (isset($order_amounts[$time])) :
$order_amounts[$time] = $order_amounts[$time] + $order_total;
else :
$order_amounts[$time] = (float) $order_total;
endif;
endforeach;
endif;
remove_filter( 'posts_where', 'orders_within_range' );
$order_counts_array = array();
foreach ($order_counts as $key => $count) :
$order_counts_array[] = array($key, $count);
endforeach;
$order_amounts_array = array();
foreach ($order_amounts as $key => $amount) :
$order_amounts_array[] = array($key, $amount);
endforeach;
$order_data = array( 'order_counts' => $order_counts_array, 'order_amounts' => $order_amounts_array );
$chart_data = json_encode($order_data);
?>
-1,
'orderby' => 'post_date',
'order' => 'ASC',
'post_type' => 'shop_order',
'post_status' => 'publish' ,
'suppress_filters'=> 0,
'tax_query' => array(
array(
'taxonomy' => 'shop_order_status',
'terms' => array('completed', 'processing', 'on-hold'),
'field' => 'slug',
'operator' => 'IN'
)
)
);
$orders = get_posts( $args );
$order_counts = array();
$order_amounts = array();
// Blank date ranges to begin
$count = 0;
$days = ($end_date - $start_date) / (60 * 60 * 24);
if ($days==0) $days = 1;
while ($count < $days) :
$time = strtotime(date('Ymd', strtotime('+ '.$count.' DAY', $start_date))).'000';
$order_counts[$time] = 0;
$order_amounts[$time] = 0;
$count++;
endwhile;
if ($orders) :
foreach ($orders as $order) :
$order_total = get_post_meta($order->ID, '_order_total', true);
$time = strtotime(date('Ymd', strtotime($order->post_date))).'000';
$order_items_array = (array) get_post_meta($order->ID, '_order_items', true);
foreach ($order_items_array as $item) $order_items += (int) $item['qty'];
$total_sales += $order_total;
$total_orders++;
if (isset($order_counts[$time])) :
$order_counts[$time]++;
else :
$order_counts[$time] = 1;
endif;
if (isset($order_amounts[$time])) :
$order_amounts[$time] = $order_amounts[$time] + $order_total;
else :
$order_amounts[$time] = (float) $order_total;
endif;
endforeach;
endif;
remove_filter( 'posts_where', 'orders_within_range' );
?>
$count) :
$order_counts_array[] = array($key, $count);
endforeach;
$order_amounts_array = array();
foreach ($order_amounts as $key => $amount) :
$order_amounts_array[] = array($key, $amount);
endforeach;
$order_data = array( 'order_counts' => $order_counts_array, 'order_amounts' => $order_amounts_array );
$chart_data = json_encode($order_data);
?>
get_var("SELECT post_date FROM $wpdb->posts ORDER BY post_date ASC LIMIT 1;");
if ($first_year) $first_year = date('Y', strtotime($first_year)); else $first_year = date('Y');
$current_year = (isset($_POST['show_year'])) ? $_POST['show_year'] : date('Y', current_time('timestamp'));
$start_date = (isset($_POST['start_date'])) ? $_POST['start_date'] : '';
$end_date = (isset($_POST['end_date'])) ? $_POST['end_date'] : '';
if (!$start_date) $start_date = $current_year.'0101';
if (!$end_date) $end_date = date('Ym', current_time('timestamp')).'31';
$start_date = strtotime($start_date);
$end_date = strtotime($end_date);
$total_sales = $total_orders = $order_items = 0;
$order_counts = $order_amounts = array();
// Blank date ranges to begin
$count = 0;
$months = ($end_date - $start_date) / (60 * 60 * 24 * 7 * 4);
while ( $count < $months ) :
$time = strtotime(date('Ym', strtotime('+ '.$count.' MONTH', $start_date)).'01').'000';
$month = date( 'Ym', strtotime(date('Ym', strtotime('+ '.$count.' MONTH', $start_date)).'01') );
$months_orders = $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
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_total'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
AND '{$month}' = date_format(posts.post_date,'%Y%m')
");
$order_counts[$time] = (int) $months_orders->total_orders;
$order_amounts[$time] = (float) $months_orders->total_sales;
$total_orders += (int) $months_orders->total_orders;
$total_sales += (float) $months_orders->total_sales;
// Count order items
$order_items_serialized = $wpdb->get_col("
SELECT meta.meta_value AS items FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_items'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
AND '{$month}' = date_format(posts.post_date,'%Y%m')
");
if ($order_items_serialized) foreach ($order_items_serialized as $order_items_array) {
$order_items_array = maybe_unserialize($order_items_array);
if (is_array($order_items_array)) foreach ($order_items_array as $item) $order_items += (int) $item['qty'];
}
$count++;
endwhile;
?>
$count) :
$order_counts_array[] = array($key, $count);
endforeach;
$order_amounts_array = array();
foreach ($order_amounts as $key => $amount) :
$order_amounts_array[] = array($key, $amount);
endforeach;
$order_data = array( 'order_counts' => $order_counts_array, 'order_amounts' => $order_amounts_array );
$chart_data = json_encode($order_data);
?>
-1,
'orderby' => 'post_date',
'order' => 'ASC',
'post_type' => 'shop_order',
'post_status' => 'publish' ,
'suppress_filters'=> 0,
'tax_query' => array(
array(
'taxonomy' => 'shop_order_status',
'terms' => array('completed', 'processing', 'on-hold'),
'field' => 'slug',
'operator' => 'IN'
)
)
);
$orders = get_posts( $args );
$found_products = array();
if ($orders) :
foreach ($orders as $order) :
$order_items = (array) get_post_meta( $order->ID, '_order_items', true );
foreach ($order_items as $item) :
$found_products[$item['id']] = isset($found_products[$item['id']]) ? $found_products[$item['id']] + $item['qty'] : $item['qty'];
endforeach;
endforeach;
endif;
asort($found_products);
$found_products = array_reverse($found_products, true);
$found_products = array_slice($found_products, 0, 25, true);
reset($found_products);
remove_filter( 'posts_where', 'orders_within_range' );
?>
|
|
$sales) :
$width = ($sales>0) ? ($sales / $max_sales) * 100 : 0;
$product = get_post($product_id);
if ($product) :
$product_name = ''.$product->post_title.'';
$orders_link = admin_url('edit.php?s&post_status=all&post_type=shop_order&action=-1&s=' . urlencode($product->post_title) . '&shop_order_status=completed,processing,on-hold');
else :
$product_name = __('Product does not exist', 'woocommerce');
$orders_link = admin_url('edit.php?s&post_status=all&post_type=shop_order&action=-1&s=&shop_order_status=completed,processing,on-hold');
endif;
echo ''.$product_name.' | '.$sales.' | |
';
endforeach;
?>
-1,
'orderby' => 'post_date',
'order' => 'ASC',
'post_type' => 'shop_order',
'post_status' => 'publish' ,
'suppress_filters'=> 0,
'tax_query' => array(
array(
'taxonomy' => 'shop_order_status',
'terms' => array('completed', 'processing', 'on-hold'),
'field' => 'slug',
'operator' => 'IN'
)
)
);
$orders = get_posts( $args );
$found_products = array();
if ($orders) :
foreach ($orders as $order) :
$order_items = (array) get_post_meta( $order->ID, '_order_items', true );
foreach ($order_items as $item) :
if (isset($item['line_total'])) $row_cost = $item['line_total'];
else $row_cost = $item['cost'] * $item['qty'];
$found_products[$item['id']] = isset($found_products[$item['id']]) ? $found_products[$item['id']] + $row_cost : $row_cost;
endforeach;
endforeach;
endif;
asort($found_products);
$found_products = array_reverse($found_products, true);
$found_products = array_slice($found_products, 0, 25, true);
reset($found_products);
remove_filter( 'posts_where', 'orders_within_range' );
?>
|
|
$sales) :
$width = ($sales>0) ? (round($sales) / round($max_sales)) * 100 : 0;
$product = get_post($product_id);
if ($product) :
$product_name = ''.$product->post_title.'';
$orders_link = admin_url('edit.php?s&post_status=all&post_type=shop_order&action=-1&s=' . urlencode($product->post_title) . '&shop_order_status=completed,processing,on-hold');
else :
$product_name = __('Product no longer exists', 'woocommerce');
$orders_link = admin_url('edit.php?s&post_status=all&post_type=shop_order&action=-1&s=&shop_order_status=completed,processing,on-hold');
endif;
echo ''.$product_name.' | '.woocommerce_price($sales).' | |
';
endforeach;
?>
get_results("
SELECT meta.meta_value AS items, posts.post_date FROM {$wpdb->posts} AS posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_items'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
AND posts.post_date > date_sub( NOW(), INTERVAL 1 YEAR )
ORDER BY posts.post_date ASC
");
if ( $order_items ) {
foreach ( $order_items as $order_item ) {
$date = date( 'Ym', strtotime( $order_item->post_date ) );
$items = maybe_unserialize( $order_item->items );
foreach ( $items as $item ) {
if ( ! in_array( $item['id'], $chosen_product_ids ) && ! in_array( $item['id'], $children_ids ) )
continue;
if ( isset( $item['line_total'] ) ) $row_cost = $item['line_total'];
else $row_cost = $item['cost'] * $item['qty'];
if ( ! $row_cost ) continue;
$product_sales[ $date ] = isset( $product_sales[ $date ] ) ? $product_sales[$date] + $item['qty'] : $item['qty'];
$product_totals[ $date ] = isset( $product_totals[ $date ] ) ? $product_totals[ $date ] + $row_cost : $row_cost;
if ( $product_sales[ $date ] > $max_sales ) $max_sales = $product_sales[ $date ];
if ( $product_totals[ $date ] > $max_totals ) $max_totals = $product_totals[ $date ];
}
}
}
?>
|
|
0) foreach ($product_sales as $date => $sales) :
$width = ($sales>0) ? (round($sales) / round($max_sales)) * 100 : 0;
$width2 = ($product_totals[$date]>0) ? (round($product_totals[$date]) / round($max_totals)) * 100 : 0;
$orders_link = admin_url('edit.php?s&post_status=all&post_type=shop_order&action=-1&s=' . urlencode(get_the_title($chosen_product_id)) . '&m=' . date('Ym', strtotime($date.'01')) . '&shop_order_status=completed,processing,on-hold');
echo ''.date_i18n('F', strtotime($date.'01')).' |
'.$sales.''.woocommerce_price($product_totals[$date]).' |
|
';
endforeach; else echo ''.__('No sales :(', 'woocommerce').' |
';
?>
array('user_registered'),
'role' => 'customer'
) );
$customers = $users_query->get_results();
$total_customers = (int) sizeof($customers);
$customer_orders = $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
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_total'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
AND posts.ID IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key = '_customer_user'
AND meta_value > 0
)
");
$total_customer_sales = $customer_orders->total_sales;
$total_customer_orders = $customer_orders->total_orders;
$guest_orders = $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
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
WHERE meta.meta_key = '_order_total'
AND posts.post_type = 'shop_order'
AND posts.post_status = 'publish'
AND tax.taxonomy = 'shop_order_status'
AND term.slug IN ('completed', 'processing', 'on-hold')
AND posts.ID IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key = '_customer_user'
AND meta_value = 0
)
");
$total_guest_sales = $guest_orders->total_sales;
$total_guest_orders = $guest_orders->total_orders;
?>
user_registered) > $start_date) :
$time = strtotime(date('Ymd', strtotime($customer->user_registered))).'000';
if (isset($signups[$time])) :
$signups[$time]++;
else :
$signups[$time] = 1;
endif;
endif;
endforeach;
$signups_array = array();
foreach ($signups as $key => $count) :
$signups_array[] = array($key, $count);
endforeach;
$chart_data = json_encode($signups_array);
?>
'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_manage_stock',
'value' => 'yes'
),
array(
'key' => '_stock',
'value' => $lowstockamount,
'compare' => '<=',
'type' => 'NUMERIC'
)
),
'tax_query' => array(
array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => array('simple'),
'operator' => 'IN'
)
)
);
$low_stock_products = (array) get_posts($args);
// Get low stock product variations
$args = array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_stock',
'value' => $lowstockamount,
'compare' => '<=',
'type' => 'NUMERIC'
),
array(
'key' => '_stock',
'value' => array('', false, null),
'compare' => 'NOT IN'
)
)
);
$low_stock_variations = (array) get_posts($args);
// Finally, get low stock variable products (where stock is set for the parent)
$args = array(
'post_type' => array('product'),
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => '_manage_stock',
'value' => 'yes'
),
array(
'key' => '_stock',
'value' => $lowstockamount,
'compare' => '<=',
'type' => 'NUMERIC'
)
),
'tax_query' => array(
array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => array('variable'),
'operator' => 'IN'
)
)
);
$low_stock_variable_products = (array) get_posts($args);
// Merge results
$low_in_stock = array_merge($low_stock_products, $low_stock_variations, $low_stock_variable_products);
?>
';
foreach ( $low_in_stock as $product ) {
$stock = (int) get_post_meta( $product->ID, '_stock', true );
$sku = get_post_meta( $product->ID, '_sku', true );
if ( $stock <= $nostockamount ) continue;
$title = $product->post_title;
if ( $sku )
$title .= ' (' . __('SKU', 'woocommerce') . ': ' . $sku . ')';
if ( $product->post_type=='product' )
$product_url = admin_url( 'post.php?post=' . $product->ID . '&action=edit' );
else
$product_url = admin_url( 'post.php?post=' . $product->post_parent . '&action=edit' );
printf( '
' . _n('%d in stock', '%d in stock', $stock, 'woocommerce') . ' %s', $product_url, $stock, $title );
}
echo '';
} else {
echo '
'.__('No products are low in stock.', 'woocommerce').'
';
}
?>
';
foreach ( $low_in_stock as $product ) {
$stock = (int) get_post_meta( $product->ID, '_stock', true );
$sku = get_post_meta( $product->ID, '_sku', true );
if ( $stock > $nostockamount ) continue;
$title = $product->post_title;
if ( $sku )
$title .= ' (' . __('SKU', 'woocommerce') . ': ' . $sku . ')';
if ( $product->post_type=='product' )
$product_url = admin_url( 'post.php?post=' . $product->ID . '&action=edit' );
else
$product_url = admin_url( 'post.php?post=' . $product->post_parent . '&action=edit' );
printf( '
' . _n('%d in stock', '%d in stock', $stock, 'woocommerce') . ' %s', $product_url, $stock, $title );
}
echo '';
} else {
echo '
'.__('No products are out in stock.', 'woocommerce').'
';
}
?>