Woocommerce自定义属性作为价格范围的值



尝试修改现有的 woocommerce 价格滑块,以便不按价格对自定义属性值进行排序,而是停留在修改 sql 查询。

以下是对sql的标准woocommerce价格查询的一部分,但进行了修改以获取一个自定义属性范围:

    $sql  = "SELECT min( FLOOR( post_meta.meta_value ) ) as min_maxcarry, max( CEILING( post_meta.meta_value ) ) as max_maxcarry FROM {$wpdb->posts} ";
    $sql .= " LEFT JOIN {$wpdb->postmeta} as post_meta ON {$wpdb->posts}.ID = post_meta.post_id " . $meta_query_sql['join'];
    $sql .= "   WHERE {$wpdb->posts}.post_type IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( 'product' ) ) ) ) . "')
                AND {$wpdb->posts}.post_status = 'publish'
                AND post_meta.meta_key IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( '_maxcarry' ) ) ) ) . "')
                AND post_meta.meta_value > '' ";
    $sql .= $meta_query_sql['where'];
    var_dump( $sql );
    return $wpdb->get_row( $sql );

任何人都可以提供帮助或建议另一种显示此滑块的方法? 提前致谢

找到了一个解决方案:

    $meta_query = new WP_Meta_Query( $meta_query );
    $tax_query  = new WP_Tax_Query( $tax_query );
    $meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
    $tax_query_sql  = $tax_query->get_sql( $wpdb->posts, 'ID' );
    $sql  = "SELECT min( FLOOR( post_meta.meta_value ) ) as min_attr, max( CEILING( post_meta.meta_value ) ) as max_attr FROM {$wpdb->posts} ";
    $sql .= " LEFT JOIN {$wpdb->postmeta} as post_meta ON {$wpdb->posts}.ID = post_meta.post_id " . $tax_query_sql['join'] . $meta_query_sql['join'];
    $sql .= "   WHERE {$wpdb->posts}.post_type IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( 'product' ) ) ) ) . "')
                AND {$wpdb->posts}.post_status = 'publish'
                AND post_meta.meta_key IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_meta_keys', array( '_prod_sort_wcpaaf_sort' ) ) ) ) . "')
                AND post_meta.meta_value > '' ";
    $sql .= $tax_query_sql['where'] . $meta_query_sql['where'];
    return $wpdb->get_row( $sql );

将把它留给任何发现它有用的人。旁注 - 不要忘记分类查询和更改上面的代码中的字符串,_prod_sort_wcpaaf_sort另一个元键,您在项目中使用的元键。

最新更新