Как подсчитать количество архивов

Есть ли способ подсчитать количество ежемесячных архивов? Например, у моего сайта есть 3 ежемесячных архива (jan 2016, фев 2016). Поэтому число должно быть равно 2. Как я могу отобразить счет.

PS: Я хочу отобразить счетчик рядом с ярлыком архива в моей карте сайта

Я пробовал со следующими успехами.

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

заранее спасибо

Заметки:

  • В настоящее время вы эхо- результат вывода wp_get_archives() . Чтобы вернуть его, мы должны установить для параметра echo input значение false .

  • Вы принимаете вывод wp_get_archives() – это массив , но это строка .

Временное решение:

Вот один из способов, посчитав экземпляры <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 .

Обновить:

Вот еще один подход, используя фильтр get_archives_link для 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 как (demo):

 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; } }