【发布时间】:2014-07-04 11:32:08
【问题描述】:
亲爱的 StackOverflow 朋友们, 我使用这个 Woocommerce 短代码
[sale_products per_page="12"]
在页面上仅显示在售的产品。此短代码完美运行,仅过滤特价商品,包括简单商品和可变商品。
现在我想获得相同的结果,但我只需要显示预定销售的产品,换句话说,只显示预定销售价格的产品
Wordpress > 产品 > 一般 > 销售价格 > 时间表
我试图找出“正常销售产品”和“预定销售产品”之间的输出差异,但不幸的是我什么也没注意到。
感谢您的帮助!
==================================
好的,这里是完整的工作代码,以供将来参考。感谢@Palmered 解决了我的问题!
我在我的functions.php中添加了这段代码
/* This creates a Woocommerce shortcode for displaying only scheduled on sale products, both simple and variable ones */
function scheduled_sale_products( $atts ) {
global $woocommerce_loop,$wpdb;
extract( shortcode_atts( array(
'per_page' => '12',
'columns' => '4',
'orderby' => 'title',
'order' => 'asc'
), $atts ) );
// Get products on sale
$product_ids_raw = $wpdb->get_results(
"SELECT posts.ID, posts.post_parent
FROM `$wpdb->posts` posts
INNER JOIN `$wpdb->postmeta` ON (posts.ID = wp_postmeta.post_id)
INNER JOIN `$wpdb->postmeta` AS mt1 ON (posts.ID = mt1.post_id)
WHERE
posts.post_status = 'publish'
AND (mt1.meta_key = '_sale_price_dates_to' AND mt1.meta_value >= ".time().")
GROUP BY posts.ID
ORDER BY posts.post_title ASC LIMIT 0,12");
$product_ids_on_sale = array();
foreach ( $product_ids_raw as $product_raw )
{
if(!empty($product_raw->post_parent))
{
$product_ids_on_sale[] = $product_raw->post_parent;
}
else
{
$product_ids_on_sale[] = $product_raw->ID;
}
}
$product_ids_on_sale = array_unique($product_ids_on_sale);
$meta_query = array();
$meta_query[] = WC()->query->visibility_meta_query();
$meta_query[] = WC()->query->stock_status_meta_query();
$meta_query = array_filter( $meta_query );
$args = array(
'posts_per_page' => $per_page,
'orderby' => $orderby,
'order' => $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 ) );
$woocommerce_loop['columns'] = $columns;
if ( $products->have_posts() ) : ?>
<?php woocommerce_product_loop_start(); ?>
<?php while ( $products->have_posts() ) : $products->the_post(); ?>
<?php wc_get_template_part( 'content', 'product' ); ?>
<?php endwhile; // end of the loop. ?>
<?php woocommerce_product_loop_end(); ?>
<?php endif;
wp_reset_postdata();
return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}
add_shortcode( 'scheduled_sale_products', 'scheduled_sale_products' );
现在新的 Woocommerce 短代码可以使用了
[scheduled_sale_products per_page="12"]
【问题讨论】:
标签: woocommerce