Как отобразить количество подстраниц в 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&#91;^>]*?>'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)
  • Пенсионный фонд
  • Детские поликлиники
  • Государственные детские сады

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

  • Спасибо! Изучу этот момент. Спасибо за Вашу заметку, она мне очень помогла.

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

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

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

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

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

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

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

  • я в скрипте поменял только номер страницы
    т.е. у Вас бы выдалось
    Каталог… (22)
    *2копейки (1)
    ?

  • Проверил на этом сайте — работает. Фрагмент кода вносили без изменений?

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

  • Не очень понятен вопрос. Разве приведенный код не отображает подстраницы?

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

  • PHP cкрипт обычно вставляют в шаблон, но есть варианты. На счет «списка подстраниц» — все есть в тексте.

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