0
102
2017-02-10

WordPress - Полезные рецепты вывода страниц

Пройдемся по вкусным рецептам, советам и рекомендациям для создания идеального вывода страниц в WordPress.
Понравилась страница? Поставь свою оценку!
PLUGIN_STAR_RATINGS.SCORE_TEXTPLUGIN_STAR_RATINGS.VOTES_TEXT

В WordPress существует много удивительных способов отображения страниц. WP предоставляет два разных тега шаблона для отображения списков страниц вашего сайта. Первый, наиболее часто используемый тег wp_list_pages(), и второй, менее известный тег wp_page_menu(). Сначала мы рассмотрим очень гибкий wp_list_pages() тег шаблона, а затем перейдем к новому wp_page_menu() тегу.

Тег wp_list_pages ()

Почти все знакомы с wp_list_pages() тегом шаблона, и он хорошо зарекомендовал себя начиная с WordPress версии 1.5. Использование этого тега просто, просто добавьте следующий код в нужное место шаблона:

<?php wp_list_pages(); ?>

А затем вы можете настроить отображения по-разному, используя тонкое меню аргументов, приведенное на его справочной странице Codex . Давайте рассмотрим некоторые интересные вещи, которые вы можете сделать wp_list_pages().

Экстремальная мощность сортировки

Вы можете сортировать свои страницы по дескриптору любого поля в wp_post таблице базы данных WordPress. По умолчанию вы получаете по алфавиту в названии страницы, но есть и другие отличные варианты. Вот некоторые рецепты из них:

<?php wp_list_pages('sort_column=menu_order'); // sort by admin-specified order ?>
<?php wp_list_pages('sort_column=post_date'); // sort by time of page creation ?>
<?php wp_list_pages('sort_column=post_name'); // sort by name of the page slug ?>
<?php wp_list_pages('sort_column=id&sort_order=asc'); // page id in ascending order ?>
<?php wp_list_pages('sort_column=id&sort_order=desc'); // page id in descending order ?>

Это первое, что немного малоприятно, но может оказаться очень полезным для отображения ваших страниц в любом порядке. Чтобы настроить порядок страниц для отображения через menu_order параметр, назначаете каждой странице числовое значение на экране «Write / Edit Admin». Вы можете увидеть полный список доступных дескрипторов здесь .

Включить и исключить все

WordPress позволяет легко включать и исключать любые страницы для создания идеального меню страниц. По умолчанию при использовании wp_list_pages отображаются все страницы, но это легко настраивается с помощью трех полезных аргументов:

<?php wp_list_pages('exclude=1,2,3'); // exclude only these three page ids ?>
<?php wp_list_pages('include=1,2,3'); // include only these three page ids ?>
<?php wp_list_pages('exclude_tree=1,2,3'); // exclude these parent pages and all children ?>

Этот exclude_tree параметр является новым начиная с WordPress версии 2.7. Это делает очень простой ветвь страниц (родительскую страницу и все последующие страницы) из ваших списков страниц.

Управление глубиной страниц

Существует два параметра, предназначенных для контроля глубины страниц, отображаемых wp_list_pages() тегом. Первый - это depth параметр, который по умолчанию отображает все подстраницы независимо от глубины. Существует также child_of параметр, который по умолчанию имеет значение 0 для отображения всех страниц и подстраниц. Вот несколько рецептов для настройки этих значений по умолчанию:

<?php wp_list_pages('depth=0'); // display all pages and subpages via indented lists ?>
<?php wp_list_pages('depth=-1'); // display all pages and subpages without indentation ?>
<?php wp_list_pages('depth=1'); // display only top-level pages ?>
<?php wp_list_pages('depth=2'); // display all pages and first level subpages ?>
<?php wp_list_pages('depth=n'); // display all pages and subpages to the nth level ?>

<?php wp_list_pages('child_of=0'); // displays all pages and subpages ?>
<?php wp_list_pages('child_of=3'); // displays all subpages of page with id 3 ?>

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

Использовать с пользовательскими полями

Вот очень мощный способ настройки меню страниц с использованием значений настраиваемого поля. Используя meta_keyи meta_value параметры, вы можете сообщить WordPress, чтобы отображать только те страницы, которые содержат определенные пары ключ / значение для настраиваемого поля. Вот некоторые примеры:

<?php wp_list_pages('meta_key=menu&meta_value=page'); // display pages with menu/page custom field ?>
<?php wp_list_pages('meta_key=icon&meta_value=true'); // display pages with icon/true custom field ?>

Этот параметр также дает вам гибкость в изменении списков страниц без необходимости касаться какого-либо исходного кода.

Еще больше функциональности

WordPress недавно выпустил несколько новых трюков для wp_list_pages() тега. А именно, теперь у нас есть возможность обернуть якорный текст наших списков страниц любым HTML или текстом. Другие новые функции включают количество отображаемых страниц, а также количество страниц для передачи при отображении списков страниц. Давайте посмотрим:

<?php wp_list_pages('link_before=<span>&link_after=</span>'); // wrap anchor text with a span tag ?>
<?php wp_list_pages('number=7'); // display only the first seven pages ?>
<?php wp_list_pages('offset=7'); // skip the first seven pages ?>

Полный рецепт копирования / вставки для wp_list_pages ()

Есть еще несколько полезных параметров для wp_list_pages() тега, но вместо объяснения каждого из них я буду ссылаться на Codex для всех скучных деталей. Итак, прежде чем копаться в сочных материалах, вот рецепт «супер-вкусный», снабженный всеми возможными параметрами, специально разработанными для легкой настройки:

<?php wp_list_pages('sort_column=post_title&sort_order=asc&exclude=0&exclude_tree=0&include=0&depth=0&child_of=0&show_date=&date_format=&title_li=&echo=1&meta_key=menu&meta_value=page&link_before=<span>&link_after=</span>&authors=0&number=0&offset=0'); // contains all parameters as of version 2.8 ?>

Хорошо, достаточно оснований, давайте рассмотрим некоторые действительно вкусные рецепты для списка страниц.

Список всех подстраниц текущей страницы

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

<?php 
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php } ?>

Этот код, помещенный в файл шаблона темы, будет генерировать список всех подстраниц для текущей родительской страницы. Если подпапок нет, ничего не будет отображаться.

Точно так же этот метод будет отображать только подстраницы при посещении родительской страницы, но мы можем изменить код, чтобы все подстраницы отображались при посещении родительской или любой из подстраниц:

<?php
if($post->post_parent)
    $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
else
    $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
if ($children) { ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php } ?>

И вы можете сделать еще лучше. С помощью следующего метода ваши списки страниц будут отображаться следующим образом:

  • При посещении главной страницы все страницы верхнего уровня перечислены на боковой панели.
  • При посещении страницы верхнего уровня без детей перечислены все страницы верхнего уровня.
  • При посещении страницы верхнего уровня с детьми перечислены только страницы с детьми и страницы с потомками.
  • При посещении дочерней страницы перечислены только дети и потоковые страницы этого родителя.

    <?php
        $output = wp_list_pages('echo=0&depth=1&title_li=<h2>Top Level Pages</h2>' );
        if (is_page( )) {
        $page = $post->ID;
        if ($post->post_parent) {
            $page = $post->post_parent;
        }
        $children=wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );
        if ($children) {
            $output = wp_list_pages ('echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>');
        }
        }
        echo $output;
    ?>

Все это замечательно, но также полезно знать, как создать разметку, сгенерированную wp_list_pages() тегом шаблона. Давайте посмотрим на следующее.

Укладка wp_list_pages() разметки

Вот разметка по умолчанию, сгенерированная wp_list_pages() тегом шаблона (предполагая в общей сложности пять страниц с текущей страницей с идентификатором «1»):

<li class="pagenav">Pages
    <ul>
        <li class="page-item-1 page_item current_page_item">Page ID 1</li>
        <li class="page-item-2 page_item">Page ID 2</li>
        <li class="page-item-3 page_item">Page ID 3</li>
        <li class="page-item-4 page_item">Page ID 4</li>
        <li class="page-item-5 page_item">Page ID 5</li>
    </ul>
</li>

Вы можете разделить внешний <li class="pagenav"> и охватывающий <ul></ul> теги, включив title_li=в wp_list_pages() шаблон параметр " " (пустая строка) в качестве параметра в теге шаблона. Вы также можете хранить эти внешние теги и настраивать текст «Страницы» с любой разметкой и / или текстом, который вам нужен. Вместо пустой строки используйте title_li=<h2>Pages</h2>вместо этого что-то вроде « ". Также обратите внимание, что определенные атрибуты класса будут применяться как к родителям, так и к предкам текущей страницы (см. Следующий раздел).

Меню страниц стилизации, созданное wp_list_pages ()

Вот список селекторов, доступных для стилизации меню вашей страницы:

.pagenav {}               /* li tag containing page menu */
.page_item {}             /* inlcuded on every page item */
.page-item-n {}           /* specifies page with id of n */
.current_page_item {}     /* specifies the current page */
.current_page_parent {}   /* any parent of current page */
.current_page_ancestor {} /* any child of current page */

Теперь, готовы к новым вещам? Приготовьте себя ..

Тег в wp_page_menu ()

Итак, как насчет этого нового wp_page_menu() тега шаблона? При всей гибкости wp_list_pages(), зачем это необходимо? В двух словах, wp_page_menu() это упрощенная версия wp_list_pages(). В дополнение к принятию нескольких одинаковых параметров этот новый тег приносит один новый трюк в таблицу: он обеспечивает возможность добавления домашней страницы вашего сайта в список отображаемых страниц. Этот тег был введен в WordPress версии 2.7 и, на мой взгляд, должен был быть интегрирован в существующий тег шаблона страницы. В любом случае, для тех, кто ищет простой способ включить вашу домашнюю страницу в список страниц:

<?php wp_page_menu(); ?>

Как уже упоминалось, большинство параметров такие же, как и раньше. Вот список общих параметров:

  • sort_column
  • include
  • echo
  • link_before
  • link_after

И - барабаная дробь - вот новые параметры: menu_classи show_home! Давайте проверим их.

menu_class

Это без проблем. Он просто указывает class атрибут для окружающего

. Да, список завернут в раздел. Любая строка может быть использована, вот пример:
<?php wp_page_menu('menu_class=pages'); // wrap list in div with class="pages" ?>

show_home

Ahh, долгожданная функциональность «включить домашнюю страницу». Теперь вместо того, чтобы взламывать functions.php файл вашего клиента, чтобы включить главную страницу в главное меню, вы можете просто сделать это:

<?php wp_page_menu('show_home=1'); // include the home page in the list ?>
<?php wp_page_menu('show_home=0'); // exclude the home page in the list ?>

По умолчанию этот параметр возвращает false, и не отображается домашняя страница. Когда установлено значение true, в качестве первого элемента в списке страниц будет отображаться Главная страница. URL для домашней страницы берется из значения для вашего сайта «Адрес блога», как указано в Settings -> General.

Когда отображается домашняя страница, текст якоря по умолчанию - это просто «Главная», но вы можете настроить его так, как хотите, указав для значения параметра:

<?php wp_page_menu('show_home=Digging%20into%20WordPress'); // include the home page ?>
<?php wp_page_menu(array('show_home'=>'Digging into WordPress', 'sort_column'=>'menu_order')); // include the home page ?>

Для получения дополнительной информации об этом новом теге, гляньте здесь WordPress Codex

Итоги

WordPress предоставляет два разных способа перечислить ваши страницы: wp_page_menu() и wp_list_pages(). wp_list_pages() тег является мощным, гибким и полностью работоспособеным. Итак, если вам не нужно включать вашу домашнюю страницу, ваш лучший выбор всегда wp_list_pages().

Для меню страниц, которые включают домашнюю страницу, вам нужно будет использовать wp_page_menu(). Помимо перечисления своей домашней страницы, с wp_page_menu() можно сделать несколько вещей, но ничего такого с чем wp_list_pages() не может справиться.

Мой вопрос на этот день: почему функциональность домашней страницы не интегрировалась в существующий тег? Зачем усложнять вещи с помощью лишнего тега? Поделитесь своими мыслями!




Статья была переведена для блога TechBlog.SDStudio.top
Источник: https://digwp.com