如何在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 );
}
}
答案 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'传递给短代码中的属性。