[英]WordPress. How to get multiple custom post_type total posts count in taxonomy.php?
[英]WordPress. SQL Query to get custom post_type posts counts in taxonomy.php template
在我的 WordPress v5.7 中,我的taxonomy.php
模板中有以下代码,以获取该分类术语中的自定义 post_type 帖子计数。
// CURRENT TERM
$term = get_queried_object();
$bookArgs = array(
'post_type' => 'book',
'post_status' => 'publish', // get only publish posts
'posts_per_page' => -1, // get all posts
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => $term->taxonomy,
'field' => 'term_id',
'terms' => $term->term_id
)
)
);
$total_book_arg = new WP_Query($bookArgs);
$total_book_count = $total_book_arg->post_count;
上面的查询完成了这项工作,并让我获得了当前学期发布的自定义 post_type 总数。
但是,此查询似乎获取了所有帖子数据,只是为了计算数字,并且我在同一个taxonomy.php
中有多个查询。php 页面还有 4 个其他自定义 post_type。
正如在某处所读到的,SQL 查询可以节省大量时间和更好的性能,所以我尝试使用下面的 SQL 查询相同的自定义 post_type 对taxonomy.php
中的术语计数。ZE1BFD762361E409CEEZ841CEE4AC0 (我的 SQL 技能非常少)。
下面的 SQL 在给我计数方面似乎不起作用:
$SQLquery = "SELECT COUNT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id IN ($term->term_id)
AND $wpdb->term_taxonomy.taxonomy = $term->taxonomy
AND $wpdb->posts.post_type = 'book'
AND $wpdb->posts.post_status = 'publish'";
echo $wpdb->get_var($SQLquery);
在获取自定义 post_type 计数时,如何使上述 SQL 查询为我工作?
试试下面的查询。
global $wpdb;
$SQLquery = "
SELECT $wpdb->posts.ID FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships
ON ( $wpdb->posts.ID = $wpdb->term_relationships.object_id )
WHERE 1=1
AND ( $wpdb->term_relationships.term_taxonomy_id IN ( $term->term_id ) )
AND $wpdb->posts.post_type = 'product'
AND ( ( $wpdb->posts.post_status = 'publish' ) )
GROUP BY $wpdb->posts.ID ORDER BY $wpdb->posts.post_date DESC
";
$SQLqueryCount = $wpdb->get_results($SQLquery,ARRAY_A);
echo count($SQLqueryCount);
说 SQL 查询更好更快是一个神话,完全是胡说八道。 WP_query
只是一个参数包装器,它对用户友好,但它与常规的 SQL 查询一样有效(甚至更好) 。
您需要以正确的方式使用参数。 post_count
和found_post
之间存在差异。
post_count
只会返回每页的帖子,它效率低下,并且会迫使您首先加载每篇文章才能对它们进行计数。 一个实际的用例场景是search.php
页面上的每页结果。found_posts
是您要查找的内容; 无论加载的帖子数量如何,它都会从您的关联查询中获取帖子计数。 直接从桌子上。纠正查询的一种有效方法如下:
<?php
if ( get_queried_object() instanceof \WP_Term ) {
$args = array(
'post_type' => 'book',
get_queried_object()->taxonomy => get_queried_object()->slug,
);
$query = new WP_Query( $args );
echo $query->found_posts;
wp_reset_postdata();
};
?>
get_queried_object() instanceof \WP_Term
因为您在taxonomy.php
.php 页面上,您应该检查它是否确实是WP_Term
object。'post_status' => 'publish'
不是必需的,默认情况下它设置为'publish'
。$taxonomy => $term
简化术语查询。wp_reset_postdata()
是强制性的。 它可以防止您的查询与主要查询混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.