No permission to manage products.';
return;
}
if (!class_exists('WooCommerce')) {
echo '
WooCommerce plugin not active.
';
return;
}
$limit = 5;
$rows = self::queryProductsOOS();
$products = array_slice($rows, 0, $limit);
if (!$products) {
echo 'No products low in stock.
';
return;
}
echo '';
if (count($rows) > $limit) {
$url = admin_url('edit.php?post_type=product');
echo '';
}
}
protected static function queryProductsOOS(): array
{
$generalLowStock = get_option('woocommerce_notify_low_stock_amount', 2);
global $wpdb;
$rows = $wpdb->get_results($wpdb->prepare("
SELECT
p.ID,
p.post_type,
p.post_title,
p.post_parent,
lookup.sku,
lookup.stock_quantity
FROM {$wpdb->prefix}wc_product_meta_lookup AS lookup
JOIN wp_posts AS p
ON p.ID = lookup.product_id
LEFT JOIN {$wpdb->prefix}postmeta AS manage
ON manage.post_id = p.ID
AND manage.meta_key = '_manage_stock'
LEFT JOIN {$wpdb->prefix}postmeta AS low
ON low.post_id = p.ID
AND low.meta_key = '_low_stock_amount'
WHERE p.post_status = 'publish'
AND p.post_type IN ('product','product_variation')
AND manage.meta_value = 'yes'
AND lookup.stock_quantity IS NOT NULL
AND lookup.stock_quantity <= COALESCE(low.meta_value, %d)
ORDER BY lookup.stock_quantity DESC;
", $generalLowStock));
return $rows;
}
}