לפעמים אנחנו לא רוצים למחוק מחנות הווקומרס את המוצרים שלא במלאי, אם בגלל שמדובר במוצרים שמושכים לקוחות אורגנית ואם בגלל שמדובר במוצרים שיחזרו וכדו',
אבל עדיין כשמשתמש נכנס לארכיון מוצרים אנחנו מעוניינים שדבר ראשון יופיעו המוצרים שבמלאי והמוצרים שלא במלאי יהיו רק בעמודים הבאים או בסוף העמוד.
יש ברשת הרבה קודים שעושים את העבודה ודוחפים את המוצרים שלא במלאי לסוף הארכיון, אבל מה קורה אם אנחנו רוצים לסדר את המוצרים שבמלאי לפי סדר ידני?
מה שנקרא סדר תפריט (עם תוסף כמו Intuitive Custom Post Order) כאן זה מתנגש.
הקוד שלפנינו מאפשר לסדר מוצרים שבמלאי לפי סדר ידני ומוצרים שלא במלאי ידחפו אוטומטית לסוף הארכיון.
PHP
add_filter( 'posts_clauses', 'custom_order_by_stock_status', 9999, 1 );
function custom_order_by_stock_status( $args ) {
global $wpdb;
// Only modify the query on WooCommerce product pages
if ( is_woocommerce() && ( is_shop() || is_product_category() || is_product_tag() ) ) {
// Join wp_postmeta to get the stock status
$args['join'] .= " LEFT JOIN {$wpdb->postmeta} AS pm ON {$wpdb->posts}.ID = pm.post_id AND pm.meta_key = '_stock_status'";
// Order by stock status first ('instock' comes before 'outofstock'), then by menu_order and then by post title
$args['orderby'] = "pm.meta_value='instock' DESC, {$wpdb->posts}.menu_order ASC, {$wpdb->posts}.post_title ASC";
}
return $args;
}