Sortowanie produktów na zapleczu po stanie magazynowym
Pojawiło się ostatnio pytanie jak posortować produkty w widoku admina po ich dostępności. Czyli inaczej rzecz ujmując po stanie magazynowym. No to zobaczmy ten niewielki kod.
Na początek dodamy kolumnę Magazyn w widoku produktów na zapleczu do listy kolumn sortowalnych.
add_filter( 'manage_edit-product_sortable_columns', 'wphp_magazyn_sort' ); function wphp_magazyn_sort($sortable_columns) { $sortable_columns[ 'is_in_stock' ] = '_stock'; return $sortable_columns; }
add_filter( 'posts_clauses', 'wphp_sortuj_produkty', 1, 2 ); function wphp_sortuj_produkty( $pieces, $query ) { global $wpdb; $orderby = $query->get( 'orderby' ); if ( $query->is_main_query() && ( $query->get( 'orderby' ) == '_stock' ) ) { $order = strtoupper( $query->get( 'order' ) ); if ( ! in_array( $order, array( 'ASC', 'DESC' ) ) ) $order = 'ASC'; $pieces[ 'join' ] .= " LEFT JOIN $wpdb->postmeta {$wpdb->prefix}stock_status ON {$wpdb->prefix}stock_status.post_id = {$wpdb->posts}.ID AND {$wpdb->prefix}stock_status.meta_key = '_stock_status' LEFT JOIN $wpdb->postmeta {$wpdb->prefix}stock ON {$wpdb->prefix}stock.post_id = {$wpdb->posts}.ID AND {$wpdb->prefix}stock.meta_key = '_stock'"; if($order == 'ASC') { $in_stock_order = 'DESC'; } else { $in_stock_order = 'ASC'; } $pieces[ 'orderby' ] = "wp_stock_status.meta_value $in_stock_order, wp_stock.meta_value $order, " . $pieces[ 'orderby' ]; } return $pieces; }