我试图从所有类别中反映本月的帖子数量,但它不起作用。
<?php
$month = date(\'m\');
$year = date(\'Y\');
$countposts = get_posts(\'post_type=post&year=\' . $year . \'&monthnum=\' . $month . \'&cat=3\');
echo \'New posts \' . count($countposts);
?>
类别3是父类别,有许多子类别。无论我做什么,它都返回值5。我本月发布了30篇帖子来测试它,但不包括在内(
我做错了什么?
Update 我尝试了以下查询并返回了相同的输出
<?php
wp_reset_postdata();
$current_year = date(\'Y\');
$current_month = date(\'m\');
$args = array(
\'cat\' => 3,
\'year\' => $current_year,
\'monthnum\' => $current_month,
\'post_status\' => \'publish\',
\'post_type\' => \'post\'
);
$number_posts = get_posts( $args );
echo \'New posts \' . count($number_posts);
?>
SO网友:Krzysiek Dróżdż
我不会用get_posts
用于统计帖子的函数。
它会选择这些帖子,可能会有大量数据,您将从数据库中传输/读取,而不会使用这些数据。
另一个问题是get_posts
是一个非常复杂的函数。看看吧get_posts
中的实现wp-includes/query.php
文件并检查它执行了多少操作。因此,这并不是统计职位的非常有效的解决方案。
因此,我将使用自定义SQL查询。这样会更有效率。您可以使用此功能:
function my_count_posts_from_month($year, $month) {
global $wpdb;
$query = "SELECT count(ID) FROM {$wpdb->posts} WHERE post_type=\'post\' AND post_status=\'publish\' AND YEAR(post_date)=%d AND MONTH(post_date)=%d";
return $wpdb->get_var( $wpdb->prepare( $query, $year, $month ));
}