我正在设置基于分类法的帖子评分,比方说,现在我想根据评级和分类来查询它们。
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%' );
FRONT-END
print_r(query_posts('post_type=reviews&platformlist=pc&minscore=9'));
答案 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);