WordPress的自定义查询
问题描述:
我需要做从邮政表中选择,每个职位与一个类别和标签。 我需要选择特定的标签和/或类别/ s。 术语表具有自定义字段“menu_order”,它用于设置类别顺序。 我想根据该字段对帖子进行排序。 如果我这样做平原选择:WordPress的自定义查询
SELECT * from wp_posts
LEFT
JOIN wp_term_relationships
ON (wp_term_relationships.object_id = wp_posts.ID)
LEFT
JOIN wp_terms
ON (wp_terms.term_id = wp_term_relationships.term_taxonomy_id)
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (
wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private'
)
LIMIT 0, 20
我得到的结果:
+----------------+----------------+----------+---------------------+
| POST ID | Term name | order | type |
+----------------+----------------+----------+---------------------+
| 2 | Fire | 1 | category |
+----------------+----------------+----------+---------------------+
| 2 | blue | 0 | tag |
+----------------+----------------+----------+---------------------+
这仅仅是个前奏。
如果我做WHERE $ wpdb-> terms.term_id = 170什么是TAG我只有一个回报。
+----------------+----------------+----------+---------------------+
| POST ID | Term name | order | type |
+----------------+----------------+----------+---------------------+
| 2 | blue | 0 | tag |
+----------------+----------------+----------+---------------------+
,我需要选择的职位,按类别和/或标签过滤掉,然后从连接到POST类别获得TERM_ORDER。
因此,无论我有什么结果,订单总是从相关类别中提取。
因为我在MYSQL中不是很强大,这让我感到莫名其妙。任何输入将有帮助:)
UPDATE ------------------------------------ --------------
所以,疯狂的编码后,我设法得到我想要的。 不要屏住呼吸,因为这可能是丑陋和缓慢,但工程。
首先,我创建了收集所有产品的视图。
$qqquery = "
CREATE VIEW samsam AS
SELECT
ID, post_content, post_title, post_excerpt, post_status, post_name, guid, post_type, $wpdb->term_relationships.term_taxonomy_id as cat_term_taxonomy_id, tt1.term_taxonomy_id as tag_term_taxonomy_id
FROM $wpdb->posts
LEFT
JOIN $wpdb->term_relationships
ON ($wpdb->term_relationships.object_id = $wpdb->posts.ID)
LEFT
JOIN $wpdb->term_relationships AS tt1
ON (tt1.object_id = $wpdb->posts.ID)
WHERE 1=1
AND $wpdb->posts.post_type = 'post'
AND (
$wpdb->posts.post_status = 'publish'
OR $wpdb->posts.post_status = 'private'
)
AND ( wp_term_relationships.term_taxonomy_id IN ($query_cat) // ID's of categories, seperated by coma
AND tt1.term_taxonomy_id IN (' . $add_query_tag_id . ') //ID's of POSTS seperated by coma
)
ORDER BY $wpdb->term_relationships.term_taxonomy_id DESC
";
$wpdb->query($qqquery);
后,我就查询在那里我选择视图和连接关系和条件过滤掉顺序> 0,则组按ID过滤掉重复获得类别顺序。
$querystr = "
SELECT * from samsam
LEFT
JOIN $wpdb->term_relationships
ON (samsam.ID = $wpdb->term_relationships.object_id)
LEFT
JOIN $wpdb->terms
ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id)
AND ($wpdb->terms.menu_order > 0)
WHERE menu_order > 0
GROUP BY ID
ORDER BY menu_order ASC
LIMIT $item_limit_offset, $item_limit_pp"; // first is calculation of products to skip, second is how many posts per page
$pageposts = $wpdb->get_results($querystr, OBJECT);
作用:
类别1(有1阶) 后 后 后
3类(有顺序2) 后 后 后
范畴2(有订单3) 后 后 后
可以被限制,脱销,分页,标签和/或类别过滤。
我用插件“Term Menu Order”为订单类别添加了额外的字段。
祝您有愉快的一天。
答
你为什么在这里写你自己的查询? WordPress的内置函数来检索数据。
http://codex.wordpress.org/Template_Tags/get_posts http://codex.wordpress.org/Function_Reference/query_posts
感谢您提供的答复,我设法实现我想要的东西,通过使用大量的不良编码,感谢的,有一个愉快的一天,分辨率张贴在原岗位:) – LatvjuAvs 2011-12-15 14:09:47