如何修改Woocommerce Recent Products Shortcode以便它只显示在过去15天内发布的产品?

时间:2015-07-21 14:15:55

标签: wordpress woocommerce shortcode

我想编辑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>';
}

我在想,我需要以某种方式检索循环中帖子的发布日期,将其放入变量中,并添加一些内容,以检查该变量是否少于15天?这些步骤超出了我的能力范围。

1 个答案:

答案 0 :(得分:5)

最好不要直接在核心中修改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参数时,您可以为date_query设置WP_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 );

完全未经测试,在测试前不要在生产中使用。