使用待售产品创建WooCommerce页面

时间:2017-06-27 07:47:40

标签: wordpress woocommerce product sales

我正在尝试制作一个页面(默认的woocommerce存档样式),它只显示Sale中的产品。这里要提一下,我只有可变产品并不简单。

我尝试制作自定义短代码

global $woocommerce_loop;
    $atts = shortcode_atts( array(
        'per_page' => '-1',
        'columns'  => '4',
        'orderby'  => 'title',
        'order'    => 'asc'
    ), $atts );

    // Get products on sale
    $product_ids_on_sale = wc_get_product_ids_on_sale();

    $meta_query = WC()->query->get_meta_query();
    $args = array(
        'posts_per_page'    => $atts['per_page'],
        'orderby'           => $atts['orderby'],
        'order'             => $atts['order'],
        'no_found_rows'     => 1,
        'post_status'       => 'publish',
        'post_type'         => 'product',
        'meta_query'        => $meta_query,
        'post__in'          => array_merge( array( 0 ), $product_ids_on_sale )
    );
    ob_start();
    $products = new WP_Query( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) );
    $columns = absint( $atts['columns'] );
    $woocommerce_loop['columns'] = $columns;
    if ( $products->have_posts() ) : 

        woocommerce_product_loop_start();

            while ( $products->have_posts() ) : $products->the_post(); 

                wc_get_template_part( 'content', 'product' ); 

            endwhile; // end of the loop. 

         woocommerce_product_loop_end(); 

     endif;
    wp_reset_postdata();
    return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';

但结果我只得到2个产品。

任何帮助或想法?

4 个答案:

答案 0 :(得分:2)

我通过创建自定义短代码找到了一个临时解决方案。我不知道为什么我没有使用默认的woocommerce短代码获得所有销售产品。

这对我有用:

function variable_sale_products($ atts){         全球$ woocommerce,$ product;

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'posts_per_page' => -1
    );

    ob_start();
    $loop = new WP_Query( $args );

    if ( $loop->have_posts() ) {
        woocommerce_product_loop_start();

        while ( $loop->have_posts() ) : $loop->the_post();
            $id = get_the_ID();
            $_product = wc_get_product( $id );

            if($_product->is_on_sale()){    
                wc_get_template_part( 'content', 'product' );
            }
        endwhile;

        woocommerce_product_loop_end(); 
    }
    wp_reset_postdata();
    return '<div class="woocommerce columns-4">' . ob_get_clean() . '</div>';
}
add_shortcode( 'variation_sale_product', 'variable_sale_products' );

如果您有任何其他建议,我希望收到您的回复

答案 1 :(得分:1)

您为什么要创建新的短代码? Woocommerce提供了自己的短代码,以自己的档案风格展示出售的产品:

[sale_products per_page="12"]

您可以看到整个列表here

答案 2 :(得分:0)

尝试扩展$ args(此代码添加了销售简单易变的产品):

$args = array(
        'posts_per_page'   => -1,
        'post_type'  => 'product',
        'meta_key' => 'total_sales',
        'orderby' => 'meta_value_num',
        'meta_query'     => array(
            'relation' => 'OR',
            array( // Simple products type
                'key'           => '_sale_price',
                'value'         => 0,
                'compare'       => '>',
                'type'          => 'numeric'
            ),
            array( // Variable products type
                'key'           => '_min_variation_sale_price',
                'value'         => 0,
                'compare'       => '>',
                'type'          => 'numeric'
            )
        )
      );

答案 3 :(得分:0)

我尝试了 [sale_products per_page="12"] ,但它只显示了一种产品。

以下是我为展示所有在售产品所做的步骤:

1- 转到 WooCommerce -> 状态 -> 工具选项卡并单击旁边的按钮以生成查找表并在再次检查之前给它一些时间来完成。如果这不起作用,请继续下一步。

2- 将短代码更新为 [sale_products per_page="32" paginate="true" columns="4" orderby="random"]。再次,如果这不起作用,请执行下一步。

3- 这不合逻辑,但我所做的是删除了出现在促销页面中的商品的“促销价”。之后所有其他项目都出现了!!

希望对大家有帮助