Перейти к содержанию

Как отобразить количество подстраниц в WordPress

В последнее время заметил, что 90% сайтов делаю на системе управления WordPress.

Есть у нее свои плюсы, которые существенно перевешивают минусы.

Минусы устраняются ручками. Так что если надо сделать нечто выходящее за функционал, просите спеца.

Недавно на одном из сайтов понадобилось оглавление с подсчетом количества подстраниц.

Стандартными средствами WordPress этого сделать не удалось, а подходящего плагина не нашел.

Написал скрипт:

<?php if (is_page('8')){ ?>

<p>
<ul class="catogl">
<?php 

  $page = $post->ID;
  $children=wp_list_pages('echo=0&child_of='.$page);
  if ($children) {
    $vsevstroke = wp_list_pages('echo=0&depth=2&child_of='.$page.'&title_li=');
  }

  $patterns[0] = "'<li[^>]*?>'si"; //Что заменить

  $replacements[0] = '<li class="catli">'; //На что заменить

  $vsevstroke = preg_replace($patterns, $replacements, $vsevstroke);  //Модифицировал строку

  $mass = explode("\n", $vsevstroke);//Создаю массив с разделителем конец строки

  $flagvivoda = true; //Флаг вывода строки
  $schet = 0; //Начальный счетчик подстраниц


 foreach($mass as $key => $val){

  if(strpos($mass[$key], 'ul class')){$flagvivoda = false;} //Если вижу начало подстраниц - деактивирую флаг вывода строк

  if($flagvivoda){echo $mass[$key];} //Если флаг вывода строк активен - вывожу строку
  if(!$flagvivoda){$schet++;} //Если флаг вывода не активен, увеличиваю счетчик подстраниц на 1
 
   if(strpos($mass[$key], '/ul>')){ //Если подстраницы закончились...
	$schet= $schet - 2; //Отступ на строку начала списка подстраниц и строку конца
	$flagvivoda = true; //Флаг вывода строк снова активен
	   echo ' ('.$schet.')';$schet = 0; //Обнуляю счетчик
   }
	
  }

?>
</ul>
</p>

<?php } ?>

Все просто.

Если вызвана нужная нам страница (ID=8), то проверяем ее ID и смотрим есть ли у нее подстраницы с подподстраницами.

Если есть, выводим список подстраниц и их подподстраниц в переменную.

Разбиваем переменную в массив по концам строк.

Листаем массив, выводя названия подстраниц, а натыкаясь на список подподстраниц начинаем их пересчитывать до конца этого списка, после чего в скобках доприсываем к названию подстраницы количество ее подподстраниц.

Выводим название следующей подстраницы и так до конца массива

Результат получился такой:

  • Медицинские центры (10)
  • Детские театры (1)
  • Стоматология (14)
  • Курсы иностранных языков (1)
  • Детские развивающие центры (19)
  • Развлекательные центры (1)
  • Телефоны и адреса ЖЭК
  • Собес
  • Отдел ЗАГС Приморского р-на (4)
  • Пенсионный фонд
  • Детские поликлиники
  • Государственные детские сады

А с вами был Лексиум…
Нда…

14 комментариев

  1. Думаю самым простым будет использовать str_replace () или preg_replace ().

    Или поискать в «кодексе» вордпресса (возможно есть аналог параметра ‘&title_li=’).

  2. Спасибо! Теперь все отлично. Еще бы научиться выводить список страниц функцией wp_list_pages в строку. Не знаете есть такая возможность?
    Программированием не занимался уже лет 12 ;( а до этого всего лишь Паскаль.

  3. Да.
    Можно убрать условие и он будет отображаться на всех страницах.
    Можно сделать, чтобы работал только на подстраницах какой-нибудь конкретной (но это сложнее).
    Можно засунуть в функции шаблона и вставлять вызов этого оглавления в каждую нужную страницу шоткодом.
    Это же программирование в конце-концов.))

  4. А можно, чтобы он сам определял как-то ID страницы, чтобы этот шаблон можно было использовать для разных случаев?

  5. Я так понял он выводит и считает число подстраниц только первой вложенности, тогда это все объясняет.

  6. Да. Скрипт показывает количество, если есть подстраницы.
    Попробуйте отключить плагины и сменить тему (шаблон), а затем по очереди включать обратно. Возможно конфликтует.
    Только советую вначале сделать полный бэкап сайта (в т.ч. базы). На всякий случай.

  7. Не смотря на то, что там есть степень вложенность depth=2,выдает только количество для главной родительской страницы. а подстраницу почему-то не показывает.
    вот пробная страница:
    http://sovmint.ru/?page_id=2454
    слева — Ваш скрипт, справа — вывод всех подстраниц каталога обычной функцией wp_list_pages
    2 копейки является подстраницей каталога, но она не была показана.

  8. Добрый день.
    Спасибо. Все получилось. Что-то я вначале протупил и использовал шаблон для страницы не с тем номером, что в скрипте. А как сделать, чтобы отображалась на экране не только родительская страница, а еще и первый уровень вложенности с количеством страниц в них?

  9. Доброй ночи! Подскажите, а куда этот скрипт в вордпрессе вставить надо, чтобы он работала? Я так понимаю если я буду заходить на страницу с ID=8 мне на ней выдаст список подстраниц 1го уровня с количеством подстраниц в них?
    Павел

Написать комментарий

Адрес почты не публикуется. Обязательные поля отмечены звёздочкой.