Сортировать по Варианты продуктов Woocommerce индивидуальный вывод по общему количеству доступных - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь отсортировать страницу продукта и шорткод продукта по вариации общего доступного запаса.

В настоящее время я использую это в моем файле function.php, но он работает только с простыми продуктами, а не с переменным продуктом, которыеуправляется на уровне вариации.

/ * Порядок по умолчанию по запасу от минимума к максимуму * /

add_filter('woocommerce_get_catalog_ordering_args', 'am_woocommerce_catalog_orderby');
function am_woocommerce_catalog_orderby( $args ) {
                $args['orderby']  = 'meta_value_num';
                $args['order']    = 'asc';
                $args['meta_key'] = '_stock';
  //  error_log("query of the catalog!",0);
    return $args;
}

Есть ли возможность группировать или суммировать общее количество для каждого варианта продукта, а затем сортировать на основена это значение?

Я искал пару дней и не смог найти никакого решения, самым близким был этот пост , но это не помогло моей ситуации.

Кроме того, я использую следующий код, чтобы показать, что на складе для каждого продукта, найденного в этом сообщении :

add_action('woocommerce_after_shop_loop_item','replace_add_to_cart');
function replace_add_to_cart() {
global $wpdb, $product;
$link = $product->get_permalink();
echo do_shortcode('[button link="' . esc_attr($link) . '"]View Details[/button]');
$product_id = $product->get_id();
$count_in_stock = 0;

/* Slower   
    if ( $product->is_type( 'variable' ) ) {
    $variation_ids = $product->get_children(); // Get product variation IDs

    foreach( $variation_ids as $variation_id ){
        $variation = wc_get_product($variation_id);
        if( $variation->is_in_stock() )
            $count_in_stock++;
    }
}
*/
// Quicker faster   
if ( $product->is_type( 'variable' ) ) {
    $count = $wpdb->get_col("
        SELECT count(p.ID) as in_stock_count FROM {$wpdb->prefix}postmeta as pm
        INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
        WHERE p.post_type LIKE 'product_variation' AND p.post_parent = $product_id
        AND pm.meta_key LIKE '_stock_status' AND pm.meta_value LIKE 'instock'
    ");

    $count_in_stock = reset($count);
}else{
    $count_in_stock = $product->get_stock_quantity();
}
// Your condition
if( $count_in_stock > 0 ){
 echo "<center>Spots : <span class='instock' id='" . $count_in_stock."'>".$count_in_stock."</span></center>";
}       


}

см. Скриншот , это довольно очевидно.желаемый результат будет иметь 2, 9, а затем 21, а не 9,21,2, как на скриншоте.

Спасибо за помощь!

...