如何限制价格过滤器中的查询

时间:2016-02-09 11:12:01

标签: wordpress woocommerce limit

如何在woocommerce产品价格过滤器短代码中将查询限制为6 [products_by_price min =“100”max =“300”]?以下代码基于woocommerce产品短代码,遗憾的是不支持 per_page 。在这种情况下,我需要将查询限制为6以避免显示所有产品。

add_shortcode( 'wc_products_price_range', 'wc_products_price_range' );
function wc_products_price_range( $atts, $content, $shortcode ) {
    if ( class_exists( 'WooCommerce' ) ) {
        $shortcodes = new WC_Shortcodes();
        if ( is_array( $atts ) ) {
            $min = (int) $atts['min'];
            $max = (int) $atts['max'];
            if ( $min && $max ) {
                $and = "meta_value BETWEEN $min AND $max";
            } else {
                if ( $min ) {
                    $and = "meta_value >= $min";
                } elseif ( $max ) {
                    $and = "meta_value <= $max";
                }
            }
            if ( $and ) {
                global $wpdb;
                $query = "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_price' AND $and";
                $ids = $wpdb->get_col( $query );
                if ( ! empty( $ids ) ) {
                    $atts['ids'] = implode( ",", $ids );
                }
            }
        }
        return $shortcodes->products( $atts );
    }
}

1 个答案:

答案 0 :(得分:0)

快速扫描WC短代码后,我遇到了这个问题:

public static function products( $atts ) {
    $atts = shortcode_atts( array(
        'columns' => '4',
        'orderby' => 'title',
        'order'   => 'asc',
        'ids'     => '',
        'skus'    => ''
    ), $atts );

这意味着你可以传递'column'属性和id,你可以限制每页的帖子。

并在此查询中:

   $query = "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_price' AND $and";

你可以使用order by子句限制0,6。 希望这可以帮助。 或者

随机行:

SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;

或者您可以将'rand'传递给短代码中的属性。