Я пытаюсь показать дочерние страницы в определенном порядке, в списке.
Это мой код для вывода страниц в виде списка:
$parent = $wp_query->post->ID;
wp_list_pages("title_li=&child_of=$parent&echo=1&sort_column=post_title" );
Теперь я хочу показать первые четыре страницы в определенном порядке:
- Резюме
- Информация
- Группы
- Записи
- Другая страница
- Другая страница
Другими словами, Сводка, Информация, Группы, Записи должны отображаться в указанном порядке (при условии, что они существуют) и другие страницы ниже. Как бы я этого добился? Я заметил, что есть параметры для включения и исключения страниц с использованием wp_list_pages
. Эти параметры принимают идентификационные номера страниц в качестве переменных, поэтому я, возможно, использую псевдокод:
- создайте массив идентификаторов дочерних страниц, которые включают в себя сводку, информацию, группы, записи в их заголовках, и упорядочите их правильно
- сделать массив идентификаторов дочерних страниц, которые не включают 4 страницы
- объединить эти массивы вместе
- распечатать html массива идентификаторов страниц
Основываясь на ваших комментариях, вот еще один вариант, использующий wp_list_pages и без необходимости работать с массивами и вытягивать контент вручную, я опускаю кучу вариантов, только самое необходимое.
поскольку wp_list_pages просто дает вам
<li>
элементы, вы можете использовать эту функцию пару раз, чтобы получить все нужные вам страницы. Так что теперь вы можете получить только те страницы, которые вам нужны, а затем вытащить остальные. Вы можете использовать все остальные параметры для сортировки и фильтрации дерева, как обычно (обратите внимание, мне нравится использовать массивы вместо строки, код выглядит чище IMO).Прочитайте страницу кодекса для wp_list_pages для получения дополнительных опций.
Чтобы получить список идентификаторов с тем, что вы хотите.
Теперь у нас есть массив
$children
с нужной нам информацией. В этот момент я хотел бы выполнить цикл$children
поиска поляpost_title
, равного тому, что вы хотите, и сохранить егоID
. С этим хранилищем в виде массива вы сможете использовать те, у которых есть функции включения, исключенияwp_list_pages
Так что не на 100% завершено, но это поможет вам начать
Что мы сделали, так это создали массив, который помещает идентификатор в нужный вам порядок массива. Затем вводит это в строку, разделенную запятыми, для которой вы можете использовать,
wp_list_pages
чтобы получить те, которые вам нужны/нужны.Не
get_page_children
затрагивает базу данных, но получает все страницы:/ так что это промывка.Я не тестировал этот код полностью, но он должен работать.
Также обратите внимание, что есть
get_page_by_title
, поэтому, если ваши заголовки точно «Сводка», вы можете использовать его для получения идентификатора, но в своем вопросе вы сказали, что он содержит, поэтому вместо этого я пошел по этому маршруту.Спасибо, но как составить список идентификаторов priority_pages?
Идентификаторы приоритетных страниц — это только идентификаторы четырех страниц, которые вы хотите перечислить первыми. Вы можете узнать идентификаторы, когда редактируете страницу: они указаны в URL-адресе как «?post=…».
Это просто строка, разделенная запятыми. Идентификаторы назначаются при создании страниц. И если эти страницы не будут удалены, они никогда не изменятся. Итак, поскольку вам нужны 4 или 5 страниц сверху, я предполагаю, что эти 4 или 5 никогда не изменятся. Однако вы можете создать настраиваемый атрибут на родительской странице, содержащий идентификаторы, чтобы полукомпетентный человек, работающий с серверной частью, мог добавить идентификаторы для перемещения в начало списка.
я имел в виду, что я хочу динамически генерировать список идентификаторов, так как я не хочу, чтобы пользователь, создающий контент, беспокоился о таких вещах… другими словами, мне нужно было бы получить идентификаторы для страниц, заголовки которых содержат Сводка, информация, группы и записи… которые являются дочерними страницами страницы в вопросах… а затем выполните включение и исключение с помощью wp_list_pages..
Не чистый способ сделать это, так как вы хотите сделать это, если он может содержать, но я думаю, что я что-то взломал, добавив его в ответ
Спасибо. Есть ли способ сделать это только в коде, чтобы порядок не зависел от порядка в атрибутах порядка страницы? menu_order и page_title предназначены только для алфавитного…?
Это близко к решению, но, насколько я понимаю, это по-прежнему означает, что оно не автоматизировано. Для людей, добавляющих контент на сайт: я не хочу, чтобы им приходилось создавать меню каждый раз, когда они добавляют несколько страниц.
Возможно, вы захотите добавить это требование к вопросу, если страницы будут часто обновляться. На 90% сайтов, которые я создаю, страницы не добавляются и не удаляются после того, как на них размещен контент. По крайней мере, не на регулярной основе
Функция wp_list_pages() принимает аргумент для sort_column, по умолчанию это menu_order, а затем post_title. Если вы быстро редактируете страницы, вы можете установить порядок для каждой страницы.
Если это для меню, я бы посоветовал вам взглянуть на новую систему навигационного меню в WordPress 3.0. Вы можете создать меню из любой группы страниц, постов или даже внешних ссылок.
Вы можете добраться до него в разделе администратора Внешний вид → Меню.
Вы могли бы иметь 2 отдельных меню, как вы уже упоминали сами.
Используйте list_pages дважды. После включения ваших фиксированных страниц и использования порядка меню в качестве параметра. И однажды используя exclude в качестве параметра, исключая элементы, которые вы используете в своем первом меню. Просто убедитесь, что они находятся в одном UL.
В качестве альтернативы вы можете создать list_pages для каждой отдельной страницы из первых четырех страниц. Однако не уверен, считается ли это аккуратным или чистым решением.