WordPress不使用get_posts()获得帖子数?

时间:2010-01-25 17:06:38

标签: wordpress

需要一个专门用于获取符合条件的帖子数量的函数调用。我相信get_posts()函数对于此操作来说太昂贵了。我只是想确定是否在显示预定数量的帖子时显示“查看更多帖子”链接...

例如,要显示的默认帖子链接数为3.如果帖子总数超过3,我只想显示“查看更多帖子”链接。

这是我的代码......

$cat1=get_cat_ID('test');
$cat2=get_cat_ID('test2');
$myposts = get_posts(array('cat' => "$cat1,-$cat2",'showposts' => 3));
$myposts2 = get_posts(array('cat' => "$cat1,-$cat2"));
    $mypostcount = count($myposts2);
foreach($myposts as $idx=>$post)
?>
<li><a>Post Info Goes here</a></li>
<?php 
if ($mypostscount > 3){ ?>Show View All Link<?php ?>

3 个答案:

答案 0 :(得分:9)

你的问题并不完全清楚,所以这里有两种方法。

首先,如果用户正在查看类别页面并且您想要显示此信息,则只需使用以下内容:

$myCount = $wp_query->found_posts;

这将返回上次查询找到的帖子数。

如果你想计算每个类别的帖子数量,比如像一个主页,我会简单地通过PHP / MySQL来实现它。这是一个例子:

SELECT COUNT( DISTINCT cat_posts.ID ) AS post_count 
FROM wp_term_taxonomy AS cat_term_taxonomy 
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id = cat_terms.term_id 
INNER JOIN wp_term_relationships AS cat_term_relationships ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id 
INNER JOIN wp_posts AS cat_posts ON cat_term_relationships.object_id = cat_posts.ID 
WHERE cat_posts.post_status = 'publish' AND cat_posts.post_type = 'post' AND cat_term_taxonomy.taxonomy = 'category' AND cat_terms.term_id = '13'

我刚刚测试过,它运行正常。从查询中获得返回后,只需抓住该行,然后执行以下操作:

echo $row['post_count'];

或者您喜欢的任何数据。更改类别所需要做的只是更改最后一个WHERE子句的term_id

cat_terms.term_id = '13'

将13更改为您想要计算的猫。

如果您希望按类别名称进行操作,则可以从

更改最后一部分
cat_terms.term_id = '13'

cat_terms.slug IN ('cookies', 'uncategorized') or cat_terms.slug IN ('cookies')

第一个将从多个类别中进行选择,第二个仅从一个类别中进行选择。 希望这会有所帮助,

答案 1 :(得分:1)

您可以执行自定义WP_Query,在其中使用posts_fields上的过滤器来更改查询返回的内容。因此,您通常会使用WP_Query来获取您所关注的特定帖子列表,并更改为获取COUNT(wp_posts.ID)而提取的字段。

另外,请务必将posts_per_page更改为-1,以便获得所有帖子。

但是,正如上面David所述,查询对象将拥有found_posts成员,该成员将告诉您符合条件的总帖子数。因此,您的解决方案可能是使用完整的WP_Query对象,而不是使用get_posts来获取列表。

答案 2 :(得分:0)

自wordpress 2.5起,存在一个函数: http://codex.wordpress.org/Function_Reference/wp_count_posts

如果您不信任它,请使用$ wpdb查询或PHP / MySQL而不使用wordpress包装器