Wordpress 创建销售产品的WooCommerce页面

Wordpress 创建销售产品的WooCommerce页面,wordpress,woocommerce,Wordpress,Woocommerce,我正在尝试制作一个页面(默认woocommerce归档样式),它将只显示正在销售的产品。这里要提的是,我只有,可变的产品和不简单的 我试着制作我的自定义短代码 global $woocommerce_loop; $atts = shortcode_atts( array( 'per_page' => '-1', 'columns' => '4', 'orderby' => 'title', 'order

我正在尝试制作一个页面(默认woocommerce归档样式),它将只显示正在销售的产品。这里要提的是,我只有,可变的产品和不简单的

我试着制作我的自定义短代码

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>';
global$woocmerce\u循环;
$atts=短码_atts(数组)(
'每页'=>'-1',
'列'=>'4',
'orderby'=>'title',
“订单”=>“asc”
)(港币),;
//销售产品
$product_ids_on_sale=wc_get_product_id_on_sale();
$meta_query=WC()->query->get_meta_query();
$args=数组(
“每页帖子”=>$atts[“每页”],
'orderby'=>$atts['orderby'],
“订单”=>$atts[“订单”],
“未找到行”=>1,
“发布状态”=>“发布”,
“post_类型”=>“产品”,
“meta\u query”=>$meta\u query,
'post___in'=>array_merge(array(0),$product_id_on_sale)
);
ob_start();
$products=新的WP_查询(应用_过滤器('woocommerce_shortcode_products_Query',$args,$atts));
$columns=absint($atts['columns']);
$woocommerce\u loop['columns']=$columns;
如果($products->have_posts()):
woocommerce_product_loop_start();
而($products->have_posts()):$products->the_post();
wc_获取_模板_零件(‘内容’、‘产品’);
endwhile;//循环结束。
woocommerce_product_loop_end();
endif;
wp_reset_postdata();
返回“”。把你弄干净;
但结果我只得到了两种产品


有什么帮助或想法吗?

为什么要创建新的快捷码?Woocommerce提供了自己的快捷码,以自己的档案风格展示销售中的产品:

[每_page=“12”销售产品]


您可以看到整个列表

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

[每_page=“12”销售产品]


您可以看到整个列表

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

这对我很有用:

函数变量\销售\产品($atts){ 全球$商业$产品

    $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' );
$args=array(
“post_类型”=>“产品”,
“发布状态”=>“发布”,
“每页帖子”=>-1
);
ob_start();
$loop=新的WP_查询($args);
如果($loop->have_posts()){
woocommerce_product_loop_start();
而($loop->have_posts()):$loop->the_post();
$id=get_the_id();
$\u product=wc\u get\u product($id);
如果($\产品->正在销售()){
wc_获取_模板_零件(‘内容’、‘产品’);
}
结束时;
woocommerce_product_loop_end();
}
wp_reset_postdata();
返回“”ob_get_clean()。';
}
添加快捷码(“变量销售产品”、“变量销售产品”);

如果您有任何其他建议,我想听听您的意见

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

这对我很有用:

函数变量\销售\产品($atts){ 全球$商业$产品

    $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' );
$args=array(
“post_类型”=>“产品”,
“发布状态”=>“发布”,
“每页帖子”=>-1
);
ob_start();
$loop=新的WP_查询($args);
如果($loop->have_posts()){
woocommerce_product_loop_start();
而($loop->have_posts()):$loop->the_post();
$id=get_the_id();
$\u product=wc\u get\u product($id);
如果($\产品->正在销售()){
wc_获取_模板_零件(‘内容’、‘产品’);
}
结束时;
woocommerce_product_loop_end();
}
wp_reset_postdata();
返回“”ob_get_clean()。';
}
添加快捷码(“变量销售产品”、“变量销售产品”);
如果您有任何其他建议,我想听听您的意见

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

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


我尝试了
[sale\u products per_page=“12”]
,但它只显示了一种产品

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

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

2-将短代码更新为
[sale\u products per_page=“32”paginate=“true”columns=“4”orderby=“random”]
。同样,如果这不起作用,请执行下一步

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


希望这对任何人都有帮助

我尝试了
[sale\u products per_page=“12”]
,但它只显示了一种产品

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

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

2-将短代码更新为
[sale\u products per_page=“32”paginate=“true”columns=“4”orderby=“random”]
。同样,如果这不起作用,请执行下一步

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

希望这对任何人都有帮助

嗯,我已经试过了