如何统计有多少档案?

时间:2016-05-02 作者:Ayanize

有没有办法统计每月档案的数量?例如,我的网站有3个月的档案(2016年1月、2016年2月)。所以数字应该是2。如何显示计数。

PS:我想在我的网站地图中的存档标签旁边显示计数

我尝试了以下方法,但没有成功。

<?php 
$args = array(
  \'parent\' => 0,
  \'hide_empty\' => 0
  );
$arch_count  = wp_get_archives($args); 

echo count ($arch_count);
?>
提前感谢

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

Notes:

<当前,您正在回送wp_get_archives(). 为了返回,我们必须设置echo 将参数输入到false.

您假设wp_get_archives() 是一个数组,但它是一个字符串。

Workaround:

这里有一种方法,通过计算<li> 实例,具有html 格式:

$args = [
  \'parent\'     => 0,
  \'hide_empty\' => 0,
  \'echo\'       => 0,
  \'format\'     => \'html\',
];

$archive_count = substr_count( wp_get_archives( $args ), \'<li>\' );
这里我们假设<li> 未被修改get_archives_link 滤器

Update:

下面是使用get_archives_link 过滤以勾选计数器。这应该能够处理所有类型的wp_get_archvies().

让我们创建一个wp_get_archives(), 同时获取输出和计数。

首先,我们创建MyArchive:

$myarchive = new MyArchive;
然后我们用相关参数生成它:

$myarchive->generate( $args );
要获取我们使用的计数:

$archive_count = $myarchive->getCount();
我们通过以下方式获得输出:

$archive_html = $myarchive->getHtml();
这里我们定义MyArchive 包装器组件(演示):

class MyArchive
{
    private $count;
    private $html;

    public function getCount()
    {
        return (int) $this->count;
    }
    public function getHtml()
    {
        return $this->html;
    }
    public function generate( array $args )
    {
        $this->count = 0;

        // Make sure we return the output
        $args[\'echo\'] = false;  

        // Do the counting via filter
        add_filter( \'get_archives_link\',    [ $this, \'getArchivesLink\' ] );

        // Generate the archives and store it
        $this->html = wp_get_archives( $args );

        // Remove filter
        remove_filter( \'get_archives_link\', [ $this, \'getArchivesLink\' ] );

        return $this;
    }       
    public function getArchivesLink( $link )
    {
        $this->count++;
        return $link;
    }
}