2012-03-21 100 views
1

我试图编写一个查询来查找并显示与我的输入具有相同自定义字段值的所有帖子。基于wordpress中的自定义字段查询帖子

在WordPress我有以下...

enter image description here

我查询...

$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = 'petrol' OR wpostmeta.meta_value = 'local' ORDER BY wpostmeta.meta_value DESC", OBJECT); 

如果我删除“OR wpostmeta.meta_value = '本地' 这个工作正常并将自定义字段的值作为“汽油”拉动正确的帖子。

有人可以给我一个关于我会出错的想法吗?目前,它的显示我所有的帖子甚至那些草稿并已删除,其还循环并展示他们无数次......

回答

1

尝试:


SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
WHERE wposts.ID = wpostmeta.post_id 
AND (wpostmeta.meta_value = 'petrol' OR wpostmeta.meta_value = 'local') 
ORDER BY wpostmeta.meta_value DESC" 
+0

哇,这实际上是工作!唯一的问题是它通过多次拉动结果,好像它循环一些... – Liam 2012-03-21 10:06:02

+0

你可以添加GROUP BY post_id并查看结果,你的意思是这样的事情... – 2012-03-21 10:08:20

+0

它仍然拉动删除的帖子... – Liam 2012-03-21 10:08:28

0

想通了......

<?php 
$customkey = 'Network'; // set to your custom key 
$customvalue = 'Local'; // set to custom value 

global $wpdb; 
$my_posts = $wpdb->get_results("SELECT * FROM $wpdb->posts, $wpdb->postmeta WHERE ID = $wpdb->postmeta.post_id AND meta_key = '$customkey' AND meta_value = '$customvalue' ORDER BY post_date DESC"); 

foreach ($my_posts as $post) : 
setup_postdata($post); 

echo '<div><a href="'; 
the_permalink(); 
echo '"></div>'; 
the_title(); 

endforeach; 
?> 
相关问题