如何编辑 Woocommerce Recent Products Shortcode 以便它只显示最近 15 天内发布的产品?
How to edit Woocommerce Recent Products Shortcode so that it only show products published in the last 15 days?
我想编辑 WooCommerce Recent Products Shortcode,以便将查询限制为过去 15 天内发布的产品。我不知道该怎么做。这是简码的代码:
/**
* Recent Products shortcode
*
* @param array $atts
* @return string
*/
public static function recent_products( $atts ) {
global $woocommerce_loop;
$atts = shortcode_atts( array(
'per_page' => '12',
'columns' => '4',
'orderby' => 'date',
'order' => 'desc'
), $atts );
$meta_query = WC()->query->get_meta_query();
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'posts_per_page' => $atts['per_page'],
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'meta_query' => $meta_query
);
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() ) : ?>
<?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>';
}
我在想我需要以某种方式检索循环中帖子的发布日期,将其放入一个变量中,然后在 while 中添加一些内容以检查该变量是否小于 15 天?这些步骤超出了我的能力。
最好不要在核心中直接修改 WooCommerce 简码。您将需要删除他们的简码并添加您自己的简码。或者现在我仔细观察,我看到他们已经提供了 woocommerce_shortcode_products_query
过滤器来修改查询参数。
$products = new WP_Query( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) );
接下来你需要一些date parameters for WP_Query
过滤 woocommerce_shortcode_product_query
参数时,您可以为 WP_Query
设置 date_query
参数。
function so_31541643_recent_products_shortcode_args( $args, $atts ){
$args['date_query'] = array(
array(
'after' => '15 days ago',
'inclusive' => true,
),
);
return $args;
}
add_filter( 'woocommerce_shortcode_products_query', 'so_31541643_recent_products_shortcode_args', 10, 2 );
完全未经测试,在测试之前不要在生产中使用。
我想编辑 WooCommerce Recent Products Shortcode,以便将查询限制为过去 15 天内发布的产品。我不知道该怎么做。这是简码的代码:
/**
* Recent Products shortcode
*
* @param array $atts
* @return string
*/
public static function recent_products( $atts ) {
global $woocommerce_loop;
$atts = shortcode_atts( array(
'per_page' => '12',
'columns' => '4',
'orderby' => 'date',
'order' => 'desc'
), $atts );
$meta_query = WC()->query->get_meta_query();
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'posts_per_page' => $atts['per_page'],
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'meta_query' => $meta_query
);
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() ) : ?>
<?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>';
}
我在想我需要以某种方式检索循环中帖子的发布日期,将其放入一个变量中,然后在 while 中添加一些内容以检查该变量是否小于 15 天?这些步骤超出了我的能力。
最好不要在核心中直接修改 WooCommerce 简码。您将需要删除他们的简码并添加您自己的简码。或者现在我仔细观察,我看到他们已经提供了 woocommerce_shortcode_products_query
过滤器来修改查询参数。
$products = new WP_Query( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) );
接下来你需要一些date parameters for WP_Query
过滤 woocommerce_shortcode_product_query
参数时,您可以为 WP_Query
设置 date_query
参数。
function so_31541643_recent_products_shortcode_args( $args, $atts ){
$args['date_query'] = array(
array(
'after' => '15 days ago',
'inclusive' => true,
),
);
return $args;
}
add_filter( 'woocommerce_shortcode_products_query', 'so_31541643_recent_products_shortcode_args', 10, 2 );
完全未经测试,在测试之前不要在生产中使用。