Add_Filter>Posts_Where部分工作

时间:2015-10-07 作者:Mr.Smith

我开始使用以下代码:Used with meta_query in query_posts works slowly

我更改了代码并开始使用add_filter

function filter_where($where = \'\'){
    global $wpdb;

    if($_GET[\'fromNumberOfRooms\'] > 0) {
        $where .= " AND ($wpdb->postmeta.meta_key = \'number-of-rooms\' AND $wpdb->postmeta.meta_value >= {$_GET[\'fromNumberOfRooms\']})";
    }
    if($_GET[\'upToNumberOfRooms\'] > 0) {
    $where .= " AND ($wpdb->postmeta.meta_key = \'number-of-rooms\' AND $wpdb->postmeta.meta_value <= {$_GET[\'upToNumberOfRooms\']})";
    }
    if($_GET[\'fromSize\'] > 0) {
        $where .= " AND ($wpdb->postmeta.meta_key = \'size\' AND $wpdb->postmeta.meta_value >= {$_GET[\'fromSize\']})";
    }
    if($_GET[\'upToSize\'] > 0) {
    $where .= " AND ($wpdb->postmeta.meta_key = \'size\' AND $wpdb->postmeta.meta_value <= {$_GET[\'upToSize\']})";
    }
    if($_GET[\'fromPrice\'] > 0) {
        $where .= " AND ($wpdb->postmeta.meta_key = \'price\' AND $wpdb->postmeta.meta_value >= {$_GET[\'fromPrice\']})";
    }
    if($_GET[\'upToPrice\'] > 0) {
        $where .= " AND ($wpdb->postmeta.meta_key = \'price\' AND $wpdb->postmeta.meta_value <= {$_GET[\'upToPrice\']})";
    }

    return $where;

}

add_filter(\'posts_where\', \'filter_where\');
但现在只有过滤pricesizenumber-of-rooms 如果我尝试过滤所有变量,则不会显示任何内容

1 个回复
SO网友:Rarst

这看起来不会产生有意义的SQL,键不能同时保存不同的值(这就是为什么在复杂查询中通常需要连接)。

还使用$_GET 查询中的全局是horribly insecure, 如果您在live site附近的任何地方有此文件,应立即将其删除。

您之前使用的问题WP_Query, 如果它真的起作用了(即使很慢),您应该从研究它生成的SQL开始,并从这一点开始进行优化。