WP_GET_OBJECT_TERMS():是否相对于传递的ID进行计数?

时间:2013-12-26 作者:LOLapalooza

我知道当你wp_get_object_terms() 对于返回的每个term对象,您都会得到一个“count”成员变量,但该“count”是$wpdb->term_taxonomy 表中,它与作为第一个参数传入的ID无关。但是我怎么才能得到那个号码呢?

例如,类似于:

$query = new WP_Query(array(\'post_type\' => \'foo\', \'numberposts\' => 20));
$ids = wp_list_pluck($query->posts, \'ID\');
$terms = wp_get_object_terms($ids, \'multi_post_type_tax\');
因此,我希望返回的计数与查询相关,这意味着我得到的计数仅用于传入的post ID。从tax“multi\\u post\\u type\\u tax”返回的每个术语对象的计数可能为400,因为它适用于不在我的查询中的其他帖子类型,但由于我传入了特定ID,我希望该计数适用于该查询,这意味着计数大于20根本没有任何意义(很可能对于某个特定的术语,它会小于20,我无法看到一个帖子类型中的每个帖子通常都有相同的术语)。看起来这是可行的,但是wp_get_object_terms 具有唯一的对象。

1 个回复
SO网友:Krzysiek Dróżdż

恐怕没有什么好办法。。。

One way will be to:

<获取所有找到的帖子,每个帖子都有自己的条款,计算条款但这不是很有效,我不推荐这种方式。

另一方面there is an efficient, 但这不是很好的方法-使用SQL查询:

$query = new WP_Query(array(\'post_type\' => \'foo\', \'numberposts\' => 20));
$ids = wp_list_pluck($query->posts, \'ID\');

$placeholders = array_fill(0, count($ids), \'%d\');
$format = implode(\', \', $placeholders);

$results = $wpdb->get_results( $wpdb->prepare(
    " SELECT terms.name, COUNT(tr.object_id) as count FROM {$wpdb->terms} terms " .
    " INNER JOIN {$wpdb->term_taxonomy} tt ON (tt.term_id = terms.term_id) " .
    " INNER JOIN {$wpdb->term_relationships} tr ON (tr.term_taxonomy_id = tt.term_taxonomy_id) " .
    " WHERE tr.object_id IN ({$format}) GROUP BY terms.term_id ",
    $ids
) );

结束

相关推荐

Taxonomize taxonomy terms?

我想register taxonomies 适用于taxonomy 条款(除职位外)。I believe this is possible 因为帖子和术语都是WP对象。需要采取哪些步骤来实现这一目标?由于TAXO主要面向岗位,因此需要采取哪些不同的措施来实现这一目标?在“编辑术语”页面上,如何使编辑框像在帖子中一样出现?相关核心文件:wp-includes/taxonomy.php wp-admin/edit-tag-form.php