更改WPBakery Woocommerce产品循环短代码,最后订购缺货产品或隐藏

时间:2018-04-16 21:25:08

标签: php wordpress woocommerce visual-composer

我在我的网站中使用自定义商店页面。在那里,我使用"产品循环" WPBakery的组件(以前的Visual Composer)。

我想改变" Recent"为了使"缺货"在这种情况下产品不显示,我试图把  在下面的代码中'stock_status' => 'instock',,但它没有用。

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
switch ($display) {
    case 'recent':
       $args = array(
            'post_type'             => 'product',
            'post_status'           => 'publish',
            'stock_status'          => 'instock',
            'ignore_sticky_posts'   => 1,
            'posts_per_page'        => $count,
            'orderby'               => 'date',
            'order'                 => 'desc',
            'paged'                 => $paged,
            'meta_query'            => WC()->query->get_meta_query(),
        );
        break;

无论是否有线,结果都是一样的。

另一种情况:

我想改变最高等级"选择使"缺货"产品出现在产品循环的末尾。 我有以下代码:

case 'top_rated':
       $args = array(
            'post_type'             => 'product',
            'post_status'           => 'publish',
            'ignore_sticky_posts'   => 1,
            'posts_per_page'        => $count,
            'order'                 => $order,
            'paged'                 => $paged,
            'meta_key'              => '_wc_average_rating',
            'orderby'               => 'meta_value_num',
            'meta_query'            => WC()->query->get_meta_query(),
            'tax_query'             => WC()->query->get_tax_query(),
        );
        break;

我需要使用带有2个参数的查询,最高评级和stock_status。如何在上面的代码中创建查询?

我的环境:
主题木星版本6.1.1
WPBakery 5.4.5.1
WooCommerce版本3.3.4
WordPress 4.9.4

抱歉,我在PHP方面的知识是新手......

2 个答案:

答案 0 :(得分:1)

对于'最近'的案例:

//RAS
//creates a variable with the standard meta query of woocommerce
$meta_query  = WC()->query->get_meta_query();
/*adds custom metakey to variable above with argument to display all that have the field
'_stock_status' with value other than outofstock
*/
$meta_query[] =  array(
    'relation' => 'AND',
    array(
        'key'     => '_stock_status',
        'value'   => 'outofstock',
        'compare'   => '!='
    ),

);

   $args = array(
        'post_type'             => 'product',
        'post_status'           => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page'        => $count,
        'orderby'               => 'date',
        'order'                 => 'desc',
        'paged'                 => $paged,
        'meta_query'            =>  $meta_query,//use variable created as an argument

    );
    break;

答案 1 :(得分:1)

Para o segundo caso。     案例'top_rated':

    //RAS
    //cria uma variável com a meta query padrao do woocommerce
    $meta_query  = WC()->query->get_meta_query();  
    /*cria instancias para as 2 metakeys(array) para utilizar como argumento no orderby, e adiciona a variável acima.*/         

    $meta_query = array(
    'relation' => 'AND',
    'rating' => array('key' => '_wc_average_rating','compare' => 'EXISTS',),
    'stockstatus' => array('key' => '_stock_status','compare' => 'EXISTS',), 
    );     

   $args = array(
        'post_type'             => 'product',
        'post_status'           => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page'        => $count,
        //'order'                 => $order,
        'paged'                 => $paged,
        //'meta_key'            => '_wc_average_rating',
        //'orderby'             => 'meta_value_num',
        'meta_query'            => $meta_query,//usa a variavel criada como argumento
        'tax_query'             => WC()->query->get_tax_query(),
         'orderby' => array('rating'=>'DESC','stockstatus'=>'ASC',),//usa as instancias criadas como argumento para orderby.
    );

    break;
相关问题