Создаем произвольную страницу архивов в WordPress. Пользовательская настройка архивов таксономии

Буквально вчера выполнял очередное задание с GoGetLinks и на одной из страниц превысил допустимое число внутренних ссылок. Глянул так на блог что можно было убрать и понял — архив. Хотя, в принципе, конечно, все это затевалось не ради GGL, сам архив я уже давно хочу как-то модернизировать для всех своих блогов, но никак не нахожу времени чтобы покопаться с паре тройке плагинов и найти оптимальный для себя. Если так призадуматься, то пользы от 10-20 ссылок в сайдбаре на архивы блога не особо много, вряд ли кто-то будет изучать информацию, которая вполне вероятно уже не актуальна. К тому же куда более удобно искать посты по wordpress категориям, тегам или поиску. Лично у меня нет желания убирать архив на совсем, пусть себе статьи линкуются, но хотелось бы разместить его на отдельной странице — что-то вроде карты сайта, но по месяцам. Но сегодня не об этом, расскажу о функции wp_get_archives и ее возможностях.

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

По умолчанию аргумент имеется значения:

"monthly" , "limit" => , "format" => "html" , "before" => , "after" => , "show_post_count" => false , "echo" => 1 ) ; ?>

"monthly", "limit" => , "format" => "html", "before" => , "after" => , "show_post_count" => false, "echo" => 1); ?>

То есть без каких-либо настроек функция wp_get_archives выводит:

  • архив по месяцам
  • отображает все доступные ссылки без ограничения в количестве
  • выводит архив в формате списка LI
  • перед каждой ссылкой ничего не добавляется
  • и количество постов за период тоже не показывается

Параметры wordpress функции wp_get_archives могут принимать следующий значения.

type (string) — тип архивных ссылок (дат), которые выводятся:

  • yearly — года
  • monthly — месяцы (по умолчанию)
  • daily — дни
  • weekly — недели
  • postbypost — посты, отображаемые по дате (используется часто в шаблонах wordpress для вывода списка последних постов блога. Про это я уже как-то рассказывал в статье как отображать последние посты и комментарии блога, популярные статьи. http://tods-blog.com.ua/wordpress/lastpost-comments/
  • alpha — в алфавитном порядке, то же самое, что и postbypost, но вместо даты статьи отображаются по алфавиту.

limit — количество записей архива для отображения, по умолчанию выводит все.

format (string) — формат ссылок для списка архива, есть такие варианты:

  • html — в виде обычного списка LI (по умолчанию)
  • option — в виде выпадающего списка (

    Выводим все статьи блога в алфавитном порядке (можно использовать в какой-то степени в качестве карты сайта):

    Хук widget_archives_args

    Если вам нужно изменить параметры базового виджета Архива в WordPress, то можно использовать хук widget_archives_args. Следующий пример позволяет выводить в сайдбаре архив по годам с ограничением числа записей = 7. Добавить код нужно в functions.php.

    function filter_widget_archives_args( $args ) { $args [ "type" ] = "yearly" ; $args [ "limit" ] = "7" ; return $args ; } ; add_filter( "widget_archives_args" , "filter_widget_archives_args" , 10 , 1 ) ;

    function filter_widget_archives_args($args) { $args["type"] = "yearly"; $args["limit"] = "7"; return $args; }; add_filter("widget_archives_args", "filter_widget_archives_args", 10, 1);

    Вот, в принципе, и все:) Если есть какие-то вопросы, задавайте в комментариях. Лучший способ разобраться в работе функции wp_get_archives попробовать ее на практике.

    P.S. Постовой. Для любителей почитать предлагаем интересный проект, где можно скачать электронные книги олнайн. На сайте есть разбиение по жанрам и авторам — искать достаточно легко.
    Качественная декоративная косметика, женская и мужская парфюмерия в интернет магазине Makeup, бесплатная доставка по Украине.

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

    Категории и метки — это примеры таксономий, и WordPress на самом деле позволяет создавать столько индивидуальных таксономий, сколько вы захотите. Эти пользовательские таксономии работают как категории или метки, но отдельно от них.

    В этой статье мы будем говорить о пользовательских таксономиях и том, как их создавать. Мы также рассмотрим, какие файлы шаблонов темы WordPress связаны с встроенными архивами и пользовательскими таксономиями, а также некоторые передовые методы настройки архивов таксономии.

    Терминология

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

    С двумя встроенными типами таксономий знакомы все — это категории и метки (теги ). Мы называем их «теги «, но, если быть точным, то мы должны использовать определение «термин «, а не «тег » таксономии. Однако в пользовательских таксономиях мы, как правило, называем элементы «терминами » таксономии.

    Категории и теги представляют два типа таксономии: иерархический и не иерархический. Иерархические таксономии, такие как категории, могут иметь подчиненные связи между терминами таксономии. Например, в вашем блоге может быть категория «фильмы «, которая имеет несколько дочерних категорий, с названиями вроде «иностранные » и «отечественные «.

    Пользовательские таксономии могут также быть иерархическими, как категории, или не иерархическими, как теги:

    «Иерархия шаблонов WordPress «

    Архив таксономии — это список записей таксономии, который автоматически генерируется WordPress . Например, это может быть список страниц, который вы видите, когда нажимаете на ссылку категории, в нем вы можете видеть все записи этой категории. Мы займемся изменением поведения этих страниц и узнаем, какие файлы шаблонов генерируют их.

    Как работают архивы меток, категорий и таксономий

    Для каждой категории, метки и пользовательской таксономии WordPress автоматически генерирует архив, в котором в обратном хронологическом порядке перечислены все записи, связанные с этой таксономией.

    Хорошо, если в своем блоге вы организуете записи по категориям и меткам. Если же у вас есть сложная система организации записей пользовательских типов по пользовательским таксономиям, то ее трудно настроить идеально. Мы рассмотрим некоторые способы изменения этих архивов.

    Для этого в первую очередь нам нужно знать, какие файлы нашей темы используются для вывода архива. Различные темы имеют различные файлы шаблонов, но все темы содержат шаблон index.php . Шаблон index.php используется для отображения всего содержимого сайта, за исключение тех случаев, когда в иерархии шаблонов существует шаблон высшего порядка.

    Иерархия шаблонов WordPress — это система, которая определяет, какой файл шаблона используется для отображения определенного контента. Мы вкратце рассмотрим иерархию шаблонов категорий, тегов и пользовательских таксономий.

    Большинство тем содержат шаблон archive.php , который используется для архивов меток (тегов ) и категорий, а также архивов по дате и по автору. Вы можете добавить отдельный файл шаблона для обработки архивов категорий и меток. Эти шаблоны будут называться category.php или tag.php , соответственно.

    Кроме того, вы можете создавать шаблоны для отдельных тегов или категорий, с помощью ID или slug категории или тега. Например, тег с идентификатором 7 будет использовать шаблон tag-7.php , если он существует, а не tag.php или archive.php . Тег со slug “avocado ” будет отображаться с помощью шаблона tag-avocado.php .

    Тут следует учитывать один нюанс — slug шаблона переопределяет порядок по идентификатору шаблона. Так, если тег со slug “avocado ” имел идентификатор 7, то предпочтительно будет использоваться шаблон tag-avocado.php , если он существует, а не tag-7.php .

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

    Итак, представьте себе, что у вас есть две таксономии, «фрукты » и «овощи «, и в таксономии «фрукты » существуют два термина, «яблоки » и «апельсины «.

    В таксономии «овощи » в свою очередь также существуют два термина: «морковь » и «сельдерей «. Давайте добавим в тему нашего сайта три шаблона: taxonomy.php , taxonomy-fruits.php и .

    Для терминов таксономии «фрукты » все архивы будут выводиться с помощью шаблона taxonomy-fruits.php , потому что отдельных шаблонов для конкретных терминов не предусмотрено.

    В то же время, термин «морковь » в архиве таксономии «овощи » будет выводиться с помощью шаблона taxonomy-vegetables-carrots.php . Так как отдельного шаблона taxonomy-vegetables.php не существует, все остальные термины таксономии «овощи » будут выводиться через шаблон taxonomy.php .

    Использование тегов условий

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

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

    Если мне нужен шаблон, который радикально отличается от шаблона темы archive.php , я, как правило, использую добавление условий в archive.php .

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

    Чтобы определить, применяется ли в настоящее время архив категории для вывода контента, вы можете использовать функцию is_category() для категорий, is_tag() для тегов и is_tax() для пользовательских таксономий. is_tag() и is_category() могут проверять конкретные категории или метки по slug или ID .

    Например:

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

    Создание пользовательской таксономии

    Добавление пользовательской таксономии можно осуществить одним из трех способов: составление кода вручную в соответствии с инструкциями Кодекса, что я не рекомендую делать; генерация кода, с использованием GenerateWP ; или с помощью плагинов для создания пользовательских типов контента, таких как Pods или Types .

    Плагины для пользовательских типов контента позволяют создавать пользовательские таксономии и пользовательские типы записей, используя механику WordPress без необходимости писать код самому.

    Их использование — это один из самых простых способов добавить пользовательскую таксономию и применить принцип фреймворка для работы с пользовательскими типами контента.

    Если вы выберете один из первых двух вариантов, а не плагин, то вам нужно будет добавить код либо в файл functions.php темы, либо в собственный плагин. Я настоятельно рекомендую создать собственный плагин, а не добавлять код в functions.php . Даже если вы никогда прежде не создавали плагин, я рекомендую вам сделать это.

    Потому что при добавлении кода в functions.php таксономия будет работать, однако при переключении темы (скажем, потому что вы захотите использовать новую тему или для устранения неполадок ), таксономии будут отключены.

    Если вы захотите написать собственный код таксономии, следуя указаниям Кодекса, или создать его с помощью GenerateWP , просто вставьте его в текстовый файл и добавьте в самом верху одну строку, и вы получите собственный плагин. Загружается и устанавливается он, как и любой другой плагин.

    Единственной строкой, которую вы должны добавить, чтобы создать пользовательский плагин, является: /* Plugin name: Custom Taxonomy */.

    Ниже приводится код плагина, который регистрирует пользовательскую таксономию “vegetables ”. Я создал ее с помощью GenerateWP , потому что это значительно проще и гораздо меньше вероятность ошибок, чем, если бы я делал это вручную:

    _x("Vegetables", "Taxonomy General Name", "text_domain"), "singular_name" => _x("Vegetable", "Taxonomy Singular Name", "text_domain"), "menu_name" => __("Taxonomy", "text_domain"), "all_Veggies" => __("All Veggies", "text_domain"), "parent_Veggie" => __("Parent Veggie", "text_domain"), "parent_Veggie_colon" => __("Parent Veggie:", "text_domain"), "new_Veggie_name" => __("New Veggie name", "text_domain"), "add_new_Veggie" => __("Add new Veggie", "text_domain"), "edit_Veggie" => __("Edit Veggie", "text_domain"), "update_Veggie" => __("Update Veggie", "text_domain"), "separate_Veggies_with_commas" => __("Separate Veggies with commas", "text_domain"), "search_Veggies" => __("Search Veggies", "text_domain"), "add_or_remove_Veggies" => __("Add or remove Veggies", "text_domain"), "choose_from_most_used" => __("Choose from the most used Veggies", "text_domain"), "not_found" => __("Not Found", "text_domain"),); $args = array("labels" => $labels, "hierarchical" => false, "public" => true, "show_ui" => true, "show_admin_column" => true, "show_in_nav_menus" => true, "show_tagcloud" => false,); register_taxonomy("vegetable", array("post"), $args); } // Подключение к действию "init" add_action("init", "slug_veggies_tax", 0); } ?>

    Между прочим, в GenerateWP я создал этот код менее чем за две минуты! Отличный сервис, поэтому писать код вручную не имеет смысла, этот сайт может автоматически сгенерировать код для вас.

    Чтобы сделать процесс еще проще, можно использовать плагин Pluginception , который создаст пустой плагин, а затем вставить в него код из GenerateWP с помощью редактора плагинов WordPress .

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

    Запросы таксономии могут быть и очень простыми, и довольно сложными. Примером простейшего запроса является запрос всех записей с определенным термином. Например, если у вас есть тип записей под названием “jedi ” и связанная с ним пользовательская таксономия под названием “level ”, вы можете получить список всех рыцарей-магистров джедаев следующим образом:

    "jedi", "level" => "master"); $query = new WP_Query($args); ?>

    "jedi", "level" => "master", "era" => "old-republic",); $query = new WP_Query($args); ?>

    Мы также можем сделать более сложные сравнения с использованием полного tax_query . Аргументы tax_query позволяют осуществлять поиск по ID вместо slug (как мы делали раньше ) и искать более чем по одному термину.

    Они также позволяют объединить несколько запросов таксономии и установить взаимосвязь между ними. Кроме того, мы можем даже использовать операторы SQL , такие как NOT IN , чтобы исключить условия.

    Возможности бесконечны. Для получения дополнительной информации по “Class Reference/WP_Query ” ознакомьтесь с разделом “Параметры таксономии ” страницы Кодекса.

    С помощью приведенного ниже фрагмента кода осуществляется поиск записей типа “jedi ”, чтобы определить рыцарей-джедаев и магистров, которые не относятся к эпохе Старой Республики:

    "jedi", "tax_query" => array("relation" => "AND", array("taxonomy" => "level", "field" => "slug", "terms" => array("master", "knight")), array("taxonomy" => "era", "field" => "slug", "terms" => array("old-republic"), "operator" => "NOT IN"))); $query = new WP_Query($args); ?>

    Пользовательская настройка архивов таксономии

    До сих пор мы рассматривали, как работают таксономии, теги и категории по умолчанию, а также как создавать собственные таксономии. Если поведение по умолчанию не соответствует вашим задачам, вы всегда можете его изменить.

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

    Знакомство с pre_get_posts

    Перед выводом любых записей через цикл WordPress , система автоматически извлекает пользователю записи в соответствии со страницей, на которой они находятся. Делается это с помощью класса WP_QUERY . Например, на главной странице блога выводятся последние записи. В архиве таксономии, пользователю извлекаются последние записи таксономии.

    Чтобы изменить этот запрос, вы можете перед извлечением записей использовать фильтр pre_get_posts . Этот фильтр уточняет объект запроса после того, как он установлен, но перед тем, как он непосредственно использован для получения записей.

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

    Добавление пользовательских типов записей в категории или архивы меток

    Огромное преимущество изменения объекта WP_QUERY с помощью pre_get_posts заключается в том, что мы можем добавить записи пользовательского типа в архив категории.

    По умолчанию, пользовательские типы записей не включены в этот запрос. Если мы задаем аргументы, которые передаются в WP_QUERY и хотим включить в него как стандартные записи, так и записи пользовательского типа “jedi ”, наш аргумент должен выглядеть следующим образом:

    array("post", "jedi")); ?>

    В функцию обратного вызова для фильтра pre_get_posts мы должны передать аналогичный аргумент. Проблема заключается в том, что объект WP_QUERY уже существует, поэтому мы не можем передать в него аргумент так, как мы делаем, когда создается экземпляр класса. Вместо этого мы используем метод класса set() , что позволяет нам изменять любой из аргументов после того, как класс был создан.

    В приведенном ниже фрагменте кода мы используем set() , чтобы изменить аргумент post_type со значения по умолчанию, которое использует записи, на массив типов записей, в том числе записи и наш пользовательский тип записей “jedi ”.

    Обратите внимание, что мы используем тег условия is_category() таким образом, чтобы изменения происходили только тогда, когда выводятся архивы категорий:

    is_category() && $query->is_main_query()) { $query->set("post_type", array("post", "jedi")); } return $query; } ?>

    Параметр этой функции $query является объект WP_QUERY до того, как он задействуется для заполнения основного цикла.

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

    Создание категории или иерархической таксономии

    Иерархии архивов

    По умолчанию архивы категорий и других иерархических таксономий работают, как и любой другой архив таксономии: они выводят все записи в этой категории или с этим термином таксономии. Чтобы вывести только родительские термины и исключить дочерние, вы должны снова использовать фильтр pre_get_posts .

    Так же, как при создании собственного WP_QUERY для записей таксономии, WP_QUERY основного цикла использует для получения записей таксономии аргументы tax_query .

    tax_query имеет аргумент include_children , для которого по умолчанию установлено значение 1 или true . Изменив его на 0 или false , мы можем исключить из архива записи с дочерними терминами:

    tax_query->queries; $tax_query["include_children"] = 0; $query->set("tax_query", $tax_query); } } ?>

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

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

    Можно решить это, совместив приводимый ранее фильтр pre_get_post с модифицированным шаблоном архива категории или таксономии. Мы рассматривали ранее, как определить, какой шаблон используется для вывода архива категории или пользовательских таксономий.

    Кроме того, имейте в виду, что вы всегда можете обернуть вносимые изменения в теги условий, такие как is_category() или is_tax() , но очень скоро это может привести к захламлению кода; поэтому более логично будет сделать копию файла archive.php и удалить весь ненужный код.

    На первом этапе мы укладываем все элементы внутрь элемента, который будет проверять, существуют ли у текущего термина таксономии дочерние термины. Если это не так, то мы не хотим выводить совсем ничего. Мы используем get_term_children() , который возвращает пустой массив, если текущий термин не имеет подчиненных элементов, что мы можем проверить с помощью !empty() .

    Чтобы проделать все это для любой таксономии, которая может выводиться, мы должны получить текущую таксономию и термин таксономии из массива query_vars глобального объекта $wp_query . slug таксономии содержится в ключе таксономии, а slug термина — в ключе tax .

    Для использования get_term_children() , нам нужен ID термина. ID не содержится в query_vars , но чтобы получить его, мы можем передать slug в get_term_by() .

    Вот как мы получаем в переменные всю нужную нам информацию:

    query_vars["taxonomy"]; $term = $wp_query->query_vars["tax"]; $term_id = get_term_by("slug", $term, $taxonomy); $term_id = $term_id->term_id; $terms = get_term_children($term_id, $taxonomy); ?>

    Мы продолжаем обработку только в том случае, если $terms не является пустым массивом. Чтобы проверить, не является ли он пустым, мы сначала повторно заполняем термины с помощью get_terms() . Это необходимо, потому что get_term_children возвращает только массив идентификаторов.

    А нам нужны идентификаторы и имена, которые содержатся в объекте, возвращаемом get_terms() . Мы можем пропустить этот объект через цикл и вывести имена в виде ссылок. Ссылки можно сгенерировать, передав идентификаторы терминов в get_term_link() .

    Вот полный код:

    query_vars["taxonomy"]; $term = $wp_query->query_vars["tax"]; $term_id = get_term_by("slug", $term, $taxonomy); $term_id = $term_id->term_id; $terms = get_term_children($term_id, $taxonomy); if (!empty($terms)) { $terms = get_terms($taxonomy, array("child_of" => $term_id)); echo "

      "; foreach ($terms as $term) { echo "
    • term_id."">".$term->name."
    • "; } echo "
    "; ?>

    Создание собственной целевой страницы таксономии архива

    Если иерархическая таксономия не содержит родительских терминов верхнего уровня, то стандартная система архива таксономии будет для вас бесполезной. Вместо этого вы хотите вывести ссылки на нижние уровни иерархии.

    В этом случае можно создать собственную целевую страницу терминов. Мы снова используем query_vars , чтобы определить, находится ли пользователь на первой странице архива таксономии; если да, то мы используем фильтр taxonomy_archive , чтобы включить отдельный шаблон:

    query_vars["paged"]; if ($page = 0) { $template = get_stylesheet_directory(). "/taxonomy-page-one.php"; } } return $template; } ?>

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

    Затем, получаем текущую страницу, используя переменную query_var с именем paged , и если пользователь находится на первой странице архива, то ему возвращается адрес нового файла шаблона. Если нет, возвращается файл шаблона по умолчанию.

    Что вы вложите в этот отдельный шаблон, зависит только от вас. Вы можете создать список терминов, используя код, приведенный выше. На самом деле вы можете вывести что угодно — например, более подробную информацию о терминах таксономии или ссылки на конкретные записи.

    Заключение

    Потратив некоторое время, вы можете настроить базовую архитектуру WordPress , который все еще заточен под свое изначальное предназначение — блог-платформы, под задачи почти любого сайта или веб-приложения.

    Использование пользовательских таксономий для организации контента в соответствии с вашими потребностями поможет вам в развитии многих ваших проектов на WordPress

    Если для классификации информации на вашем сайте используется несколько таксономий, вам может пригодиться возможность разделения записей в архиве таксономии по…

    Думаю, начинающий вебмастер, рано или поздно сталкивается с проблемой вывода архива записей, будь то блог или портал. И многие CMS имеют такую возможность, ну или подразумевают её наличие. Так и с системой WordPress, множественные функции вполне способны реализовать архивы записей: по рубрикам, по авторам, по месяцам и т.п. Только отдельной страницы под эти нужды разработчиками WP не предусмотрено, правда, некоторые темы WordPress могут содержать шаблон страницы – «архивы».

    Конечно, в системе присутствуют соответствующие виджеты, которые не только выводят список рубрик блога, но и отдельный список записей по месяцам. Только не всегда Sidebar сайта позволяет вывести столь крупные блоки, которые со временем разрастаются, занимая почти всё место боковой панели. И тут, может придти на помощь создание отдельной странички под вывод архивов публикаций, что более удобнее в сравнении с той же « »…

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

    Сперва берём на вооружение код вывода списка рубрик, используемый в стандартном виджете:

    Код настроен на показ счётчика записей.

    Код вывода архива по месяцам

    А вторым вариантом вывода архивов WordPress станет стандартный виджет «Архивы», который отображает прошлые записи по месяцам, начиная с первой публикации:

    Также, как и первый код, этот настроен на показ числа записей.

    Как сделать страницу архивов?

    Чтобы объединить вывод двух блоков на одной странице, понадобиться создать новый шаблон на основе «Page.php»,то есть на базовом шаблоне страницы WordPress, присутствующем в каждой теме.

    Для этого лучше скопировать файл темы . И начать редактирование не посредственно на компьютере, например через редактор «Notepad++».

    В коде находим строку, отвечающую за вывод содержимого страницы:

    И сразу после неё можно вставлять коды блоков архива (или заменив системный вывод «content» на соответствующие коды). Оформление отображения можно отредактировать по своему усмотрению.

    В самом верху кода добавляем несколько строчек, которые определят его как новый шаблон страницы. Например, назовём его «Archives»:

    После можно закрыть редактирование, сохранив внесённые изменения. Переименовываем полученный файл «page.php» в «Archives.php» и загружаем в каталог сайта по пути темы WordPress.

    Дальнейшее редактирование можно продолжить через админ – панель (Внешний вид -> Редактор -> Archives.php). А после создайте новую страницу, дайте ей соответствующее название и справа в выпадающем меню выберете новый шаблон «Archives».

    Пример кода страницы «Архивы» с расположением блоков в две колонки:

    Архив публикаций

    По месяцам:


    По рубрикам:

    Примечание! Данный пример не будет корректно отображаться на вашем блоге, для того чтобы скопировать — придётся внести изменения в соответствии с вашем шаблоном темы WordPress.

    Я уже однажды говорил в блоге и твиттере, что нужно бы заняться модификацией (ребрендингом) архива своих wordpress блогов. Практически во всех стандартных шаблонах можно увидеть в сайдбаре блок архивов, где располагаются ссылки на те или иные месяцы публикаций. Сначала оно вроде как нормально смотрится, но когда ты ведешь блог года 2-3, то этих линков может накопиться штук 20-30. Во-первых, это визуально не совсем хорошо, архив занимает слишком много места при том, что его польза минимальна — искать нужную статью в архиве неэффективно. Во-вторых, понятное дело, что на страницах архива располагается не самый уникальный (можно даже сказать дублированный) контент, поэтому лишний раз делать на этом акцент ненужно.

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

    С помощью этого кода вы отображаете последние 12 месяцев архива, но «забывать» об остальных ссылка я бы не стал, просто их нужно разместить в другом месте — специальной странице архива. Вариантов ее реализации есть несколько. Во-первых, можно сделать отдельный шаблон для этой страницы WordPress , где выводить архивы через wp_get_archives, а, во-вторых, можно обратиться за помощью к сторонним разработкам и модулям.

    Итак, плагины для архивов в WordPress:

    Clean Archives Reloaded

    Clean Archives Reloaded — генерирует список постов, которые разбиты по месяцам. При клике на тот или иной месяц список статей раскрывается или закрывается с помощью JavaScript.

    На сайте авторе есть пример и описание реализации данной функции, где он пишет, что использовал специальный механизм кеширования для работы. Именно поэтому данный плагин не должен особо нагружать вашу БД множеством MySQL запросов и работать очень эффективно. Единственным вопросом при этом является совмещение этого плагина с — ведь оба плагина ссылаются на все посты, есть смысл один из них убрать из-за ненадобности — либо использовать карту сайта в виде страницы архива, либо применить для архива другие плагины.

    Heat Map plugin

    Heat Map plugin плагин позволяет отображать архивы блога, категории и теги в виде оригинального списка чем-то напоминающего . Активность в том или ином архиве отображается с помощью большего размера или цвета шрифта.

    Визуально решение очень интересное! На сайте плагина, правда, указана поддерживаемая версия WordPress 2.6., но думаю должна работать и в более старших. Для архива так точно с тех пор никаких серьезных нововведений не было. Совмещая вывод списка категорий, тегов и архивов можно сделать весьма информативную страницу для посетителей.

    Smart Archives Reloaded

    Smart Archives Reloaded — еще один «reloaded» плагин. Сначала я нашел оригинальный, но он не поддерживается разработчиком еще с весны и wp 2.3, что конечно не очень хорошо. А потом совершенно случайно обнаружил в поиске Smart Archives Reloaded и был приятно удивлен! Сохранив былые принципы работы он был расширен новыми опциями по настройке, в частности у вас будет несколько вариантов для вывода архива:

    • список постов по месяцам;
    • компактный блок с ссылками по годам и датам публикаций;
    • двухуровневое меню с годами и датами публикаций;
    • блок ссылок на месяцы архива + список постов (стандартный старый вид, используемый в оригинальной версии плагина).
    • меню + список постов + JavaScript. И вы получите совершенно нереальный и классный архив!

    — весьма оригинальный динамический архив, реализованный на AJAX. Он позволяет найти любой пост блога через «временное дерево публикаций», то есть сначала выбираете год, потом месяц и можете увидеть список постов за это время. Есть также возможность просмотра архива по категориям.

    Вообще я нашел этот плагин раньше чем Smart Archives Reloaded, поэтому был им весьма впечатлен. По сути, к плюсам можно занести использование AJAX, архив по дате и категориях, но в качестве сложностей выступает необходимость изменения оформления архива (не совсем красиво выглядит) и локализация.

    Collapsing Archives

    Collapsing Archives — с помощью Javascript в данном плагине реализована возможность раскрытия годов, месяцев публикаций, как это, например, можно видеть в архивах Blogger`а. В большей степени подходит для сайдбара, но также применимо для страницы архива:

    Приятной особенностью плагина есть очень большое количество настроек для него, которые можно задать в админке wordpress. Добротный такой модуль, который подходит для wp 2.8 — 3.0.1.

    Latest Post from each Category plugin

    Latest Post from each Category plugin — можно использовать этот плагин в качестве небольшого дополнения к архиву. По названию вы уже могли догадаться, что он выводить последние статьи для каждой директории. То есть, например, вы на странице архива размещаете ссылки на месяцы публикаций и дополняете это все вот таким вот «приятным» бонусом для читателей:

    Если я спрошу вас, какой стандартный тип страниц в WordPress используете реже всего, то, скорее всего, ваш ответ будет – шаблон архивов. Или, что еще вероятнее, вы вообще даже не слышали о шаблоне архивов – настолько он непопулярен. Причина проста. Стандартный способ использования архивов далек от понимания «дружественного к пользователям».

    Давайте поправим это сегодня! Давайте создадим страницу архивов WordPress, которая будет действительно полезной. Самая приятная вещь – то, что вы сможете использовать эти архивы в любой современной теме WordPress, установленной на вашем сайте. Однако давайте сначала разберемся, что мы подразумеваем под «страницей архивов»?

    История архивов WordPress

    В WordPress вы работаете с массой разных шаблонов и структурных элементов, которые входят в стандартную конфигурацию. Если взглянуть на список директорий стандартной темы Twenty Fifteen, то мы увидим следующее:

    • Страница ошибок 404
    • Страница архивов (наш сегодняшний гость)
    • Страница вложенных изображений
    • Индексная страница (главная страница)
    • Шаблон страниц (для стандартных страниц)
    • Страница результатов поиска
    • Страницы отдельных записей и вложений

    Несмотря на различные цели, все эти страницы очень похожи по своей структуре, и зачастую они отличаются лишь несколькими участками или несколькими строками кода. Единственное видимое различие между индексной страницей и архивной страницей – это дополнительный заголовок вверху, который меняется в зависимости от просматриваемой страницы.

    Идея, которая была положена в основу архивной структуры, заключается в том, чтобы предложить администратору блога удобный и простой способ вывода архивов по различным критериям. В конце концов, все эти различные архивные страницы – это просто версии индексной страницы; они выводят контент, опубликованный в определенный временной промежуток, определенным автором, с определенными метками и рубриками.

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

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

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

    Именно по этой причине мы и решили создать произвольную страницу архивов.

    Как создать произвольную страницу архивов в WordPress

    Вот то, что мы собираемся сделать. Наша произвольная архивная страница будет основана на специальном шаблоне страниц. Этот шаблон позволит нам сделать следующее:

    • Добавить произвольное сообщение (может содержать текст, изображения, форму регистрации и т.д. – стандартный контент WordPress).
    • Выводить 15 последних записей (настраивается)
    • Отображать ссылки на авторские архивы
    • Отображать ссылки на архивы по месяцам
    • Иметь дополнительные области виджетов (чтобы выводить такие вещи, как популярный контент, рубрики, теги).

    Наконец, страница будет адаптивной, и ее можно будет использовать на любом сайте.

    Однако нам действительно понадобится взять за основу некоторую тему. Я воспользовался темой Zerif Lite . Признаюсь, что это одна из наших собственных тем. Тем не менее, это одна из 10 самых популярных тем, опубликованных в прошлом году в каталоге тем WordPress. Поэтому я надеюсь, что вы воспользуетесь ей.

    И да, если вам не нравится тема, не нужно ругаться. Вы можете использовать подход, представленный в статье, с любой другой темой.

    Начинаем с основного файла

    Самая лучшая модель для создания архивной страницы — это файл page.php вашей текущей темы, на что есть некоторые причины:

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

    Поэтому воспользуемся файлом page.php темы Zerif Lite. Я создам его копию и назову ее tmpl_archives.php.

    (Убедитесь в том, что вы не назвали страницу page-archives.php. Все названия файлов, начинающиеся с «page-», будут рассматриваться как новый шаблоны страниц в пределах основной иерархии файлов WordPress тем. Именно по этой причине мы использовали префикс tmpl_).

    Изменим ее на следующее:

    Все, что делает эта строка – это передает соответствующий контентный файл для нашей страницы архивов.

    Вы можете удалить и другие элементы, которые выглядят лишними, с вашей архивной страницы (как комментарии, к примеру), однако убедитесь в том, что вы удалили все элементы, которые относятся к HTML-структуре. И, в целом, не бойтесь экспериментировать. В конце концов, если что-то вдруг перестанет работать, вы всегда можете вернуться к предыдущему коду и легко провести его отладку.

    Кроме того, не забывайте о стандартном комментарии — описании шаблона, — который должен находиться в самом начале вашего файла (в нашем случае, в файле tmpl_archives.php):

    В конце концов, мы останемся со следующей структурой (некоторые элементы удалены из нее для удобства):

    В этом файле нам нужно будет удалить все лишнее, оставив только структурные элементы, а также вызовы базовых WordPress-функций:

    >

    Комментарий-заполнитель в самой середине кода – то, куда мы затем вставим наши произвольные элементы.

    Добавляем произвольное приветствие

    Об этом уже позаботился сам WordPress. Нам достаточно вставить следующую строку:

    Добавляем новые области виджетов

    Давайте настроим новые области виджетов в WordPress, используя стандартный процесс. Мы сделаем это с помощью дополнительного файла функций, чтобы сохранить вещи реюзабельными от темы к теме. Мы создадим новый файл, archives-page-functions.php, поместив его в основной каталог темы, а также зарегистрируем две новые области виджетов:

    If(!function_exists("archives_page_widgets_init")) : function archives_page_widgets_init() { /* First archive page widget, displayed to the LEFT. */ register_sidebar(array("name" => __("Archives page widget LEFT", "zerif-lite"), "description" => __("This widget will be shown on the left side of your archive page.", "zerif-lite"), "id" => "archives-left", "before_widget" => "

    ", "after_widget" => "
    ", "before_title" => "

    ", "after_title" => "

    ",)); /* Second archive page widget, displayed to the RIGHT. */ register_sidebar(array("name" => __("Archives page widget RIGHT", "zerif-lite"), "description" => __("This widget will be shown on the right side of your archive page.", "zerif-lite"), "id" => "archives-right", "before_widget" => "
    ", "after_widget" => "
    ", "before_title" => "

    ", "after_title" => "

    ",)); } endif; add_action("widgets_init", "archives_page_widgets_init");

    If(!function_exists("archives_page_styles")) : function archives_page_styles() { if(is_page_template("tmpl_archives.php")) { wp_enqueue_style("archives-page-style", get_template_directory_uri() . "/archives-page-style.css"); // standard way of adding style sheets in WP. } } endif; add_action("wp_enqueue_scripts", "archives_page_styles");

    Это условная операция постановки в очередь. Она будет работать только в том случае, если посетитель просматривает архивную страницу.

    Нужно не забыть включить наш новый файл archives-page-functions.php путем добавления следующей строки в самый конец файла functions.php текущей темы:

    Require get_template_directory() . "/archives-page-functions.php";

    Наконец, новый блок, который мы будем использовать в нашем основном файле content-tmpl_archives.php, достаточно простой. Поместите следующий код под вызовом the_content();:

    Все, что нам теперь останется – это позаботиться о единственно недостающем файле, archives-page-style.css. Однако давайте оставим его на потом, поскольку мы будем использовать его в качестве хранилища всех стилей нашей произвольной архивной страницы, в том числе и для виджетов.

    Вывод последних 15 записей

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

    Вы, вероятно, спросите, почему именно 15 записей? Не знаю, просто взял это число с потолка. Давайте сделаем его настраиваемым с помощью произвольных полей.

    Вот, что мы сделаем:

    • Задаем количество записей через произвольное поле archived-posts-no.
    • Если число не является корректным, шаблон будет использоваться стандартное значение в 15 последних записей.

    Ниже представлен код, который делает это. Поместите его под предыдущей секцией в файле content-tmpl_archives.php, который обрабатывает новые области виджетов.

    ID, "archived-posts-no", true)); /* Here, we"re making sure that the number fetched is reasonable. In case it"s higher than 200 or lower than 2, we"re just resetting it to the default value of 15. */ if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15; $my_query = new WP_Query("post_type=post&nopaging=1"); if($my_query->have_posts()) { echo "

    "; echo "
      "; $counter = 1; while($my_query->have_posts() && $counter <= $how_many_last_posts) { $my_query->the_post(); ?>
    1. ">
    "; wp_reset_postdata(); } ?>

    Все, что делает этот код – это получает значение произвольного поля, задает количество выводимых записей, после чего выбирает эти записи из базы данных, используя WP_Query();. Также я использую некоторые иконки Font Awesome, чтобы добавить данному блоку некоторый шарм.

    Вывод ссылок на авторские архивы

    Этот раздел полезен только в том случае, если вы работаете с блогом с многочисленными авторами. Пропустите его, если у вас один автор.

    Эта функциональность может быть реализована при помощи простого блока кода, который нужно поместить в наш файл content-tmpl_archives.php (под предыдущим блоком):

    Our Authors

    Мы перейдем к стилям через пару минут. В данный момент обратите внимание на что, что все делается с помощью вызова функции wp_list_authors().

    Вывод ссылок на архивы по месяцам

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

    Вот, как это будет выглядеть в файле content-tmpl_archives.php:

    By Month

    В данном случае мы выведем это в виде отдельного абзаца с записями, разделенными прямым слэшем (|).

    Полный шаблон архивной страницы

    Давайте взглянем на полный файл content-tmpl_archives.php, который является нашим основным файлом для вывода произвольного архива:

    >

    ID, "archived-posts-no", true)); if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15; $my_query = new WP_Query("post_type=post&nopaging=1"); if($my_query->have_posts()) { echo "

    Last ".$how_many_last_posts." Posts

    "; echo "
      "; $counter = 1; while($my_query->have_posts() && $counter <= $how_many_last_posts) { $my_query->the_post(); ?>
    1. " rel="bookmark" title="Permanent Link to ">
    "; wp_reset_postdata(); } ?>

    Our Authors

    By Month

    Таблица стилей

    Наконец, давайте посмотрим на таблицу стилей. Вот как выглядит файл archives-page-style.css:

    Archives-widget-left { float: left; width: 50%; } .archives-widget-right { float: left; padding-left: 4%; width: 46%; } .archives-latest-section { } .archives-latest-section ol { font-style: italic; font-size: 20px; padding: 10px 0; } .archives-latest-section ol li { padding-left: 8px; } .archives-authors-section { } .archives-authors-section ul { list-style: none; text-align: center; border-top: 1px dotted #888; border-bottom: 1px dotted #888; padding: 10px 0; font-size: 20px; margin: 0 0 20px 0; } .archives-authors-section ul li { display: inline; padding: 0 10px; } .archives-authors-section ul li a { text-decoration:none; } .archives-by-month-section { ext-align: center; word-spacing: 5px; } .archives-by-month-section p { border-top: 1px dotted #888; border-bottom: 1px dotted #888; padding: 15px 0; } .archives-by-month-section p a { text-decoration:none; } @media only screen and (max-width: 600px) { .archives-widget-left { width: 100%; } .archives-widget-right { width: 100%; } }

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

    Давайте посмотрим, как это будет выглядеть на практике. Вот сайт, который имеет массу контента в архиве:

    Как интегрировать этот шаблон в любую тему

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

    1. Берем файлы archives-page-style.css и archives-page-functions.php, которые мы создали в руководстве, после чего помещаем их в главный каталог темы.
    2. Редактируем functions.php темы и добавляем следующую строку в самый конец: require get_template_directory() . ‘/archives-page-functions.php’;
    3. Берем файл page.php темы, делаем его копию, переименовываем ее, меняем вызов функции get_template_part() на get_template_part(‘content’, ‘tmpl_archives’);, после чего добавляем описательный комментарий в самое начало: /* Template Name: Archive Page Custom */.
    4. Берем файл content-page.php вашей темы, делаем его копию, переименовываем его в content-tmpl_archives.php, и добавляем в него все произвольные блоки, которые мы создали в руководстве, сразу под вызовом функции the_content();.
    5. Тестируем и наслаждаемся.

    Вот как это будет выглядеть в стандартной теме Twenty Fifteen: