2012-10-31 54 views
0

我试图显示一个自定义的帖子类型列表排序由位于其自己的表中的值。我正在使用一个名为wti_like_posts的插件,它允许用户通过大拇指向上/向下的方式评价帖子。wordpress自定义orderby语句

该表包含附加到它的分数和post_id。我希望能够在查询中添加'orderby'已有的选项'rating'选项,因此当我查询帖子时可能会考虑到该分数。

你知道有什么好办法吗?我想我必须使用add_filter,但我已经尝试过,并且无法弄清楚。任何帮助将不胜感激 !

在此先感谢

回答

0

您将不得不建立一个自定义sql查询来加入这两个表以获得您的结果。

global $wpdb; 
$sql = "SELECT * FROM ".$wpdb->prefix."wp_posts, ".$wpdb->prefix."ratings_table WHERE wp_post.id = ratings_table.post_id"; 
$posts = $wpdb->get_results($sql); 
echo "<ul>"; 
foreach ($posts as $post){ 
    echo '<li>'.$post->title.'|'.$post->score.'<br/>'; 
    echo '</li>'; 
} 
echo "</ul>"; 

未经测试!

您将不得不调整表格&列名称。

[更新] 确定使用get_posts(),你必须改变你的OrderBy =等级& meta_key = foo的 到的OrderBy = meta_value & meta_key =等级

见下图:

$args = array(
'numberposts'  => 10, 
'offset'   => 0, 
'orderby'   => 'meta_value', 
'order'   => 'ASC', 
'meta_key'  => 'rating', 
'post_type'  => 'post', 
'post_status'  => 'publish' 
); 
$results = get_posts($args); 
+0

感谢你的答案 !我已经设法使用这种方法来运行一个列表。但是,我想将这个orderby选项添加到wordpress的选项中,所以我可以将它与'get_posts('post_type = type&num_posts = 10&orderby = rating&meta_key = foo [...]')'一起使用。因为我想用它来动态地过滤不同参数(分类法,搜索,作者等等)的结果... – Charleshaa

+0

更新了我的答案 – Marty

+0

事情是,我想要的值不在wp_postmeta表中,它在它自己的表格中......这就是为什么我不能使用这种方法......'meta_key = foo'只是一个例子,因为我想告诉你我的请求中已经有很多参数,只是忽略它... – Charleshaa