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 ''; echo ''; foreach ($products as $product) { $name = $product->post_title; $name = strlen($name) > 28 ? substr($name, 0, 28) . '...' : $name; $url = get_edit_post_link($product->post_type === 'product_variation' ? $product->post_parent : $product->ID); $stock = $product->stock_quantity; echo '' . '' . '' . '' . ''; } echo '
SKUNameStock
' . esc_html($product->sku) . '' . esc_html($name) . '' . esc_html($stock) . '
'; if (count($rows) > $limit) { $url = admin_url('edit.php?post_type=product'); echo '
' . '
Showing ' . intval($limit) . ' of ' . count($rows) . '
' . '
See all
' . '
'; } } 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; } }