使用自定义元查询显示带有短代码的WooCommerce产品

时间:2018-01-20 01:05:35

标签: php wordpress woocommerce shortcode product

我正在创建一个闪购网站,我已经根据我家和商店页面上的日期范围显示产品。但我也希望根据其他地方的日期范围显示产品,因此使用短代码。

这是我的代码:

function testt($meta_query)
{  
$today = current_time('Ymd');
$args = apply_filters('woocommerce_shortcode_products_query', array (
'post_type' => 'product',   
    'numberposts' => -1,
    'meta_query' => array(
    'relation' => 'AND',
    'start_clause' => array(
        'key'=>'flash_sale_start',
        'value' => $today,
        'compare'=> '<=',
     'type' => 'DATE'
    ),
         'end_clause' => array(
         'key' => 'flash_sale_end',
     'value' => $today,
         'compare' => '>=',
     'type' => 'DATE'
     ),
       )));
return $args;
}
add_shortcode( 'test', 'testt' );

但它没有显示任何内容,即使我的页面内容的其余部分也已消失。

我做错了什么?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这是正常的,它不会返回任何内容,因为您需要首先在WP_Query中传递此if( ! function_exists('product_test') ) { // Add Shortcode function product_test( $atts ) { global $woocommerce_loop; // Attributes $atts = shortcode_atts( array( 'columns' => '4', 'limit' => '20', 'start' => current_time('Ymd'), 'end' => current_time('Ymd'), ), $atts, 'products_test' ); $woocommerce_loop['columns'] = $atts['columns']; // The WP_Query $products = new WP_Query( array ( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => $atts['limit'], 'meta_query' => array( 'relation' => 'AND', 'start_clause' => array( 'key' =>'flash_sale_start', 'value' => $atts['today'], 'compare' => '<=', 'type' => 'DATE' ), 'end_clause' => array( 'key' => 'flash_sale_end', 'value' => $atts['today'], 'compare' => '>=', 'type' => 'DATE' ), ) )); ob_start(); 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 } else { do_action( "woocommerce_shortcode_products_loop_no_results", $atts ); echo "<p>There is no results.</p>" } woocommerce_reset_loop(); wp_reset_postdata(); return '<div class="woocommerce columns-' . $atts['columns'] . '">' . ob_get_clean() . '</div>'; } add_shortcode( 'products_test', 'product_test' ); } 并以这种方式循环调用产品模板:

columns

代码进入活动子主题(或活动主题)的function.php文件。

<强> USAGE:

您可以在此短代码中添加4个可选参数:

  • limit(列数) - 默认值为4
  • start(产品数量| -1将全部显示) - 默认值为20
  • end(开始日期|格式为'YMD') - 默认为今天
  • [products_test] (结束日期|格式为'YMD') - 默认为今天

您可以在功能中再设置......您也可以更改默认值。

示例1(使用默认值简单):

[products_test columns='3' limi='15']

示例2(一些自定义值)

strtotime($expire_date)

经过测试和工作