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.

[php]
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;
}
[/php]

[php]
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;
}
[/php]

Przewijanie do góry