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

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

Ответ написан 8 февраля 2013 в 00:35. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 11:21. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 11:56. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 12:47. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 14:29. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 17:52. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 18:05. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 18:29. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 18:31. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 18:50. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 19:02. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 19:31. · Изменить грАватар

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

Ответ написан 9 февраля 2013 в 23:08. · Изменить грАватар

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

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

Ответ написан 9 февраля 2013 в 23:14. · Изменить грАватар

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

Следить за темой по RSS

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