cannyboy
  • 0
Новичок

Список дочерних страниц в определенном порядке?

  • 0

Я пытаюсь показать дочерние страницы в определенном порядке, в списке.

Это мой код для вывода страниц в виде списка:

$parent = $wp_query->post->ID;
wp_list_pages("title_li=&child_of=$parent&echo=1&sort_column=post_title" );

Теперь я хочу показать первые четыре страницы в определенном порядке:


  1. Резюме
  2. Информация
  3. Группы
  4. Записи
  5. Другая страница
  6. Другая страница

Другими словами, Сводка, Информация, Группы, Записи должны отображаться в указанном порядке (при условии, что они существуют) и другие страницы ниже. Как бы я этого добился? Я заметил, что есть параметры для включения и исключения страниц с использованием wp_list_pages . Эти параметры принимают идентификационные номера страниц в качестве переменных, поэтому я, возможно, использую псевдокод:


  1. создайте массив идентификаторов дочерних страниц, которые включают в себя сводку, информацию, группы, записи в их заголовках, и упорядочите их правильно
  2. сделать массив идентификаторов дочерних страниц, которые не включают 4 страницы
  3. объединить эти массивы вместе
  4. распечатать html массива идентификаторов страниц

Share
  1. Основываясь на ваших комментариях, вот еще один вариант, использующий wp_list_pages и без необходимости работать с массивами и вытягивать контент вручную, я опускаю кучу вариантов, только самое необходимое.

    <ul>
    <?php
      $priority_pages = '5,1,3,7';
      wp_list_pages(array('include' => $priority_pages);
      wp_list_pages(array('exclude' => $priority_pages);
    ?>
    </ul>
    

    поскольку wp_list_pages просто дает вам <li> элементы, вы можете использовать эту функцию пару раз, чтобы получить все нужные вам страницы. Так что теперь вы можете получить только те страницы, которые вам нужны, а затем вытащить остальные. Вы можете использовать все остальные параметры для сортировки и фильтрации дерева, как обычно (обратите внимание, мне нравится использовать массивы вместо строки, код выглядит чище IMO).

    Прочитайте страницу кодекса для wp_list_pages для получения дополнительных опций.

    Чтобы получить список идентификаторов с тем, что вы хотите.

    <?php
      $my_wp_query = new WP_Query();
      $all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));
    
      $parent = $wp_query->$post-ID;
      $children = $get_page_children($parent, $all_wp_pages);
    ?>
    

    Теперь у нас есть массив $children с нужной нам информацией. В этот момент я хотел бы выполнить цикл $children поиска поля post_title, равного тому, что вы хотите, и сохранить его ID . С этим хранилищем в виде массива вы сможете использовать те, у которых есть функции включения, исключенияwp_list_pages

    Так что не на 100% завершено, но это поможет вам начать

    <?php
      $priority_pages_a = array();
      foreach($children as $child) {
        if(strpos($child->post_title,"Summary") {
          $priority_pages_a[0] = $child->ID;
        } elseif (strpos($child->post_title,"Info") {
          $priority_pages_a[1] = $child->ID;
        }
      }
    
      $priority_pages = implode(",",$priority_pages_a);
    
    ?>
    

    Что мы сделали, так это создали массив, который помещает идентификатор в нужный вам порядок массива. Затем вводит это в строку, разделенную запятыми, для которой вы можете использовать, wp_list_pages чтобы получить те, которые вам нужны/нужны.

    Не get_page_children затрагивает базу данных, но получает все страницы:/ так что это промывка.

    Я не тестировал этот код полностью, но он должен работать.

    Также обратите внимание, что есть get_page_by_title, поэтому, если ваши заголовки точно «Сводка», вы можете использовать его для получения идентификатора, но в своем вопросе вы сказали, что он содержит, поэтому вместо этого я пошел по этому маршруту.

    • 0
    • Спасибо, но как составить список идентификаторов priority_pages?

      • 0
    • Идентификаторы приоритетных страниц — это только идентификаторы четырех страниц, которые вы хотите перечислить первыми. Вы можете узнать идентификаторы, когда редактируете страницу: они указаны в URL-адресе как «?post=…».

      • 0
    • Это просто строка, разделенная запятыми. Идентификаторы назначаются при создании страниц. И если эти страницы не будут удалены, они никогда не изменятся. Итак, поскольку вам нужны 4 или 5 страниц сверху, я предполагаю, что эти 4 или 5 никогда не изменятся. Однако вы можете создать настраиваемый атрибут на родительской странице, содержащий идентификаторы, чтобы полукомпетентный человек, работающий с серверной частью, мог добавить идентификаторы для перемещения в начало списка.

      • 0
    • я имел в виду, что я хочу динамически генерировать список идентификаторов, так как я не хочу, чтобы пользователь, создающий контент, беспокоился о таких вещах… другими словами, мне нужно было бы получить идентификаторы для страниц, заголовки которых содержат Сводка, информация, группы и записи… которые являются дочерними страницами страницы в вопросах… а затем выполните включение и исключение с помощью wp_list_pages..

      • 0
    • Не чистый способ сделать это, так как вы хотите сделать это, если он может содержать, но я думаю, что я что-то взломал, добавив его в ответ

      • 0
    • Спасибо. Есть ли способ сделать это только в коде, чтобы порядок не зависел от порядка в атрибутах порядка страницы? menu_order и page_title предназначены только для алфавитного…?

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

      • 0
    • Возможно, вы захотите добавить это требование к вопросу, если страницы будут часто обновляться. На 90% сайтов, которые я создаю, страницы не добавляются и не удаляются после того, как на них размещен контент. По крайней мере, не на регулярной основе

      • 0
  2. Функция wp_list_pages() принимает аргумент для sort_column, по умолчанию это menu_order, а затем post_title. Если вы быстро редактируете страницы, вы можете установить порядок для каждой страницы.

    • 0
  3. Если это для меню, я бы посоветовал вам взглянуть на новую систему навигационного меню в WordPress 3.0. Вы можете создать меню из любой группы страниц, постов или даже внешних ссылок.

    Вы можете добраться до него в разделе администратора Внешний вид → Меню.

    • 0
  4. Вы могли бы иметь 2 отдельных меню, как вы уже упоминали сами.

    Используйте list_pages дважды. После включения ваших фиксированных страниц и использования порядка меню в качестве параметра. И однажды используя exclude в качестве параметра, исключая элементы, которые вы используете в своем первом меню. Просто убедитесь, что они находятся в одном UL.

    В качестве альтернативы вы можете создать list_pages для каждой отдельной страницы из первых четырех страниц. Однако не уверен, считается ли это аккуратным или чистым решением.

    • 0

Оставить ответ

You must login to add an answer.