基于分类的多重评级获取帖子

时间:2015-05-04 11:43:47

标签: php mysql sql wordpress wpdb

我正在设置基于分类法的帖子评分,比方说,现在我想根据评级和分类来查询它们。
PC上的应用程序评级为10.(meta_key = rating_pc)
Android上的应用评级为5.(meta_key = rating_android)

add_action( 'posts_where', 'minscoreaction' );
function minscoreaction( $sql ){

    global $wpdb;
    $minscore = 9;//get_query_var( 'minscore' );
    $platformslug = 'pc';//get_query_var( 'platformlist' );

    if( $minscore ){
        $sql .= $wpdb->prepare( " AND ( $wpdb->postmeta.meta_key LIKE %s AND $wpdb->postmeta.meta_value LIKE %s )", "rating_".$platformslug.'%',$minscore.'%');

问题:我什么也没得到......意味着没有帖子。实际上有一个帖子,其中PC为9级。


注意:由于多种原因,我只能将此方法用于Query Post。

另一个注意:

$where .= $wpdb->prepare( " AND $wpdb->posts.post_type LIKE %s ", 'reviews%' );

这将返回所有评论的帖子类型

但这没有任何回报

$where .= $wpdb->prepare( " AND $wpdb->postmeta.meta_value LIKE %s ", '9%' );

Meta Value with 9

FRONT-END

print_r(query_posts('post_type=reviews&platformlist=pc&minscore=9'));

1 个答案:

答案 0 :(得分:1)

functions.php或您要使用的template page中使用此功能。

    function filter_where( $where = '' ) {
       global $wpdb;
        $minscore = 9;
        $platformslug = 'pc';    
        $posttype =     "reviews";

$where .= " AND ($wpdb->posts.post_type = '".$posttype."')";
$where .= " AND (($wpdb->postmeta.meta_key LIKE '_overall_rating_".$platformslug."%' AND $wpdb->postmeta.meta_value = '".$minscore."')) ";

       return $where;
    }
    add_filter('posts_where', 'filter_where');

WP_QUERY

前端上使用此代码。

$the_query = new WP_Query(array(
    'post_type' => $posttype ,
    'meta_query' => array(
        array('key' => '_overall_rating_' . $platformslug,
            'value' => $minscore)
    )
));
print_r($the_query);