获取一组帖子的所有术语

时间:2016-10-20 作者:Ahrengot

我需要获取与一系列帖子相关的所有术语。我可以在每个帖子上循环并单独做一个get_termswp_get_post_terms 查询每个帖子,但这似乎是一种非常缓慢的方式。(就DB执行时间而言)。

是否有一些巧妙的技巧可以用来优化代码?我在调查新的WP_Term_query 在WordPress 4.6中引入,但这似乎也不是答案。

1 个回复
最合适的回答,由SO网友:Alex Protopopescu 整理而成

您可以使用$wpdb构建一个SQL查询,其中包含将列出所有术语的数组中的所有post ID。或者最好在同一个查询中获取帖子ID,而不是从您提到的数组中获取它们。

这是一个示例:

global $wpdb;    
$query = $wpdb->get_results( $wpdb->prepare( "select * from `$wpdb->term_relationships` where object_id IN (select ID from $wpdb->posts where post_type = \'%s\' AND post_author = %d)", \'some_custom_post_type\', get_current_user_id() ), ARRAY_A);
print\\u r($查询);并查看返回值。由于get\\u results与ARRAY\\u一起使用,它将返回一个包含SQL结果的关联数组。

在SQL查询示例中,我没有使用连接来使查询更容易理解,但在DB端使用连接将更加有效。

稍后编辑:与上述答案相同的SQL联接查询示例如下:SELECT wp_posts.ID, wp_term_relationships.term_taxonomy_id, wp_term_relationships.term_order FROM wp_posts INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id AND wp_posts.post_type = \'some_custom_post_type\' AND wp_posts.post_author = 1

为了通过$wpdb执行SQL查询,您需要更改“wp”表前缀,以便使用$wpdb->table\\u name对表进行寻址,此后Wordpress将负责前缀的更改。然后查询变成:SELECT $wpdb->posts.ID, $wpdb->term_relationships.term_taxonomy_id, $wpdb->term_relationships.term_order FROM $wpdb->posts INNER JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id AND $wpdb->posts.post_type = \'some_custom_post_type\' AND $wpdb->posts.post_author = 1

然后,您还可以使用“prepare”方法将SQL查询包括在$wpdb->get\\u results方法中,最终得到:global $wpdb;
$query = $wpdb->get_results( $wpdb->prepare( "SELECT $wpdb->posts.ID, $wpdb->term_relationships.term_taxonomy_id, $wpdb->term_relationships.term_order FROM $wpdb->posts INNER JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id AND $wpdb->posts.post_type = %s AND $wpdb->posts.post_author = %d", \'some_custom_post_type\', get_current_user_id() ), ARRAY_A);

尝试一下我在答案中提出的建议,然后继续尝试join方式。如果这对你有帮助,请不要忘记接受答案!有关SQL联接的更多信息,请访问此处http://www.w3schools.com/sql/sql_join.asp有关使用wpdb类实例和方法的更多信息,请转到此处:https://codex.wordpress.org/Class_Reference/wpdb

相关推荐