wp_page_list не добавляет класс current_page_item на page_for_posts

Вордпресс 2.3.1 англ. (да собственно любой, кроме версии 2.1). Сайт локальный.

При использовании функции wp_list_pages страницам присваиваются классы page_item и current_page_item (для текущей страницы – очень удобно для организации подсветки текущей страницы в меню).

Проблема заключается в следующем: при использовании статической главной страницы класс current_page_item не присваивается странице, назначенной для вывода блога. Поясню. Скажем у вас есть страницы: Портфолио, О нас, Контакты. Вы добавляете пустую страницу Блог. В меню Настройки – Чтение назначаете главной страницей Портфолио, а страницей для вывода вашего блога – Блог. Так вот функция wp_list_pages не будет присваивать класс current_page_item для страницы Блог.

Данный глюк был исправлен в версии 2.1, но уже с версии 2.1.1 вернулся вновь. Судя по всему единственный имеющийся патч уже присутствует в коде, но не работает (точно могу сказать за версию 2.3 и 2.3.1). Отказаться от использовании встроенного вывода списка страниц мне кажется как-то неправильно. Но похоже что другого решения нет… 🙁

Вот неработающий патч: http://trac.wordpress.org/ticket/2959

Вы имели ввиду wp_list_pages ? или действительно существует некая функция wp_page_list ?

Пардон. Ошибся: я имею в виду wp_list_pages…

Ну тогда не знаю даже, current_page_item всегда вызывается, ну во всяком случае тут, пункты меню сделаны как раз wp_list_pages, а главной страницей назначена по сути страница page_id=3.
Либо я не слишком понял вашу проблему.

В вашем случае:

<li class="page_item page-item-3 current_page_item ">
<li class="page_item page-item-4">
<li class="page_item page-item-8">

current_page_item указывает на текущую страницу. Функция wp_list_pages отлично работает. Но где на вашем сайте блог?

Глюк вывода списка страниц происходит только когда:

1. включена опция статического вывода страниц
2. определена отдельная страница для вывода блога.

Функция wp_list_pages в этом случае выводит список указанных страниц и использует классы: page_item, page-item-PAGE_ID и current_page_item. НО, если текущая страница это блог (указана для вывода блога в настройках Вордпресса), то класс current_page_item НЕ добавляется к странице блога в выводе списка страниц.

В указанном выше примере кода предположим, что страница Блог имеет ID=8. Если мы находимся на главной странице (ID=3), то код будет такой же. Если мы перейдем на страницу Блог (ID=8), то код будет такой:

<li class="page_item page-item-3">
<li class="page_item page-item-4">
<li class="page_item page-item-8">

Т.е. без класса current_page_item. В итоге для блога нельзя использовать подсветку текущей страницы.

Есть решение. Надо изменить файл /wp-inclides/classes.php.

Вместо

if ( $page->ID == $current_page )

Написать

if ($page->ID == $current_page || ($current_page == 0 && $page->ID == get_settings('page_for_posts')))

Детально все расписано по ссылке http://networkforpeople.blogspot.com/2007/12/wplistpages-wordpress.html

Anonymous
Отправить
Ответ на: