Разбираемся с заголовками в WordPress

Где находится голова сайта? Правильно, в header.php!

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

Наиболее типичным является такой вид:

<title>
<?php if (function_exists('is_tag') && is_tag()) {single_tag_title('Тег &quot;'); echo '&quot; - ';}
elseif (is_archive()) {wp_title(''); echo ' Архив - ';}
elseif (is_search()) {echo 'Результат поиска для &quot;'.wp_specialchars($s).'&quot; - ';}
elseif (!(is_404()) && (is_single()) || (is_page())) {wp_title(''); echo ' - ';}
elseif (is_404()) {echo 'Ничего не найдено - ';}
if (is_home()) {bloginfo('name'); echo ' - '; bloginfo('description');}
else {bloginfo('name');}
if ($paged > 1) { echo ' - страница '. $paged;} ?>
</title>

Что мы получаем

Заголовки WordPress
Заголовки у разных типов страниц

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

К примеру, плагин All-in-One SEO делает все это, и его стоит использовать только если не хватает навыков для самостоятельной коррекции и настройки вышеприведенного кода.

Блок ссылок

Секция <head> также содержит ссылки на внешние CSS и JavaScript файлы. Т.к. прежде всего ваш шаблон требует обязательного наличия своего собственного style.css, нужно его вызвать

<link rel='stylesheet' href='<?php bloginfo("stylesheet_uri"); ?>' type='text/css' media='screen' />

где bloginfo("stylesheet_url") является точной ссылкой на файл стилей вашего шаблона.

Ничего не нужно прописывать руками, удобно. И кстати, функция bloginfo() содержит массу полезной информации, к которой мы еще вернемся.

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

Поэтому, чтобы ее подключить в шаблон, достаточно вставить в хедер или functions.php

<?php wp_enqueue_script('jquery'); ?>

Такой вызов имеет массу преимуществ.

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

Если же вы скачаете свою копию jQuery и вставите на нее ссылку в шаблоне, вордпресс даже знать об этом не будет. А если затем активируете плагин, который будет использовать j Query, он загрузит свою копию, что приведет к бардаку и достаточно часто к конфликтам. Использование wp_enqueue позволит избежать дублирования и конфликтов.

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

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/myscriptjs"></script>

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

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

<?php if (is_page_template('page-archives.php')) { ?>
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/css/archives.css" type="text/css" media="screen" />
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/archives.js"></script>
<?php } ?>

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

А вот пример кода для страницы с определенным id равным 5

<?php if (is_page("5")) { ?>
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/css/archives.css" type="text/css" media="screen" />
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/archives.js"></script>
<?php } ?>

id записи в wordpressПо непонятной причине id записей, страниц и рубрик явно не отображается в вордпрессе. Чтобы получить эти значения, например, id страницы, нужно навести курсор над ссылкой Изменить в списке страниц, и в панельке браузера увидим урл, содержащий id этой страницы, в данном примере — это 198. Точно также можно узнать id рубрики, записи, тега и т.п..

 

Разберемся с wp_head()

Обязательная для всех шаблонов функция wp_head() просто сообщает вордпрессу «вот прямо тут находится секция <head>, дальше ты уже знаешь, что нужно делать»

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

Например, вы активировали функционал XML-RPC в настройках. Для его работы необходимо добавить определенные <link> элементы в <head>. В результате работы функции wp_head() они будут вставлены в код.

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

Теги шаблона

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

<?php bloginfo(); ?>

Из нее можно получить много интересного, например, такие соответствующие данные:

admin_email = jeff@digwp.com
atom_url = https://digwp.com/home/feed/atom
charset = UTF-8
comments_atom_url = https://digwp.com/home/comments/feed/atom
comments_rss2_url = https://digwp.com/home/comments/feed
description = Take Your WordPress Skills to the Next Level!
url = https://digwp.com/home
html_type = text/html
language = en-US
name = Digging Into WordPress
pingback_url = https://example/home/wp/xmlrpc.php
rdf_url = https://digwp.com/home/feed/rdf
rss2_url = https://digwp.com/home/feed
rss_url = https://digwp.com/home/feed/rss
siteurl = https://digwp.com/home
stylesheet_directory = https://digwp.com/home/wp/wp-content/themes/largo
stylesheet_url = https://digwp.com/home/wp/wp-content/themes/largo/style.css
template_directory = https://digwp.com/home/wp/wp-content/themes/largo
template_url = https://digwp.com/home/wp/wp-content/themes/largo
text_direction = ltr
version = 2.8.5
wpurl = https://digwp.com/home/wp

Подставляя нужный аргумент, можно получить значение, например, bloginfo('template_url'); вернет ссылку на папку с шаблоном и используется вот так

<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/css/archives.css" type="text/css" media="screen" />

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

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

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

Вставьте в functions.php следующий код (пример для Амазона)

<?php add_action('admin_menu', 'add_gcf_interface');
function add_gcf_interface() {
add_options_page('Global Custom Fields', 'Global Custom Fields', '8', 'functions', 
'editglobalcustomfields');
}
function editglobalcustomfields() { ?>
<div class="wrap">
<h2>Global Custom Fields</h2>
<form method="post" action="options.php">
<?php wp_nonce_field('update-options') ?>
<p><strong>Amazon ID:</strong><br />
<input type="text" name="amazonid" size="45"
value="<?php echo get_option('amazonid'); ?>" />
</p>
<p><input type="submit" name="Submit" value="Update Options" /></p>
<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="amazonid" />
</form>
</div>
<?php } ?>

Укажите и сохраните в настройках свой реф-айди с амазона.

Теперь, где угодно в шаблоне можно с помощью кода 

<?php echo get_option('amazonid'); ?>

получить значение рефайди и вставить в партнерскую ссылку на товар.

Циклы в WordPress

Цикл, хорошо известный как петля(loop) — это базовое понятие того, как работает Вордпресс. В самом общем виде представить это можно так:

<?php // The Loop
if (have_posts()) : while (have_posts()) : the_post();
...
endwhile; else:
...
endif;
?>

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

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

<?php if (have_posts()) : ?>

<?php while (have_posts()) : the_post(); ?>

<div dass="post" id="post-<?php the_ID(); ?>"> <h2><a href="<?php the_permalink(); ?>" rel-'bookmark" title-'Ссылка на <?php the_ title_attribute(); ?>"><?php the_title(); ?></a></h2>

<?php echo get_post_meta($post->ID, 'PostThumb', true); ?>

<p class="meta">
<span>Опубликован</span> <?php the_time('F jS, Y'); ?> <span> </span> <?php the_author(); ?>
</p>

<?php the_content('Полная статья'); ?>
<p><?php the_tags('Теги: ', ', ', '<br />'); ?>
Опубликовано в <?php the_category(', '); ?>
<?php comments_popup_link('Нет комментариев;', '1 Комм.', '% Комм.'); ?></p>
</div>

<?php endwhile; ?>
<?php next_posts_link('Старые записи'); ?>
<?php previous_posts_link('Новые записи'); ?>

<?php else : ?>
<H2>Ничего не найдено</h2>
<?php endif; ?>

Есть ли опубликованные записи?

Начало цикла, работает пока есть записи

Ссылка на запись
В качестве текста — название записи

Произвольное поле, содержащее id
картинки-превью записи

Мета-информация: дата публикации
имя автора

Содержимое записи
Теги записи
Название категории записи
Ссылка на форму комментирования

Конец цикла
Ссылка на более старые записи
Ссылка на ранние записи

Нет записей?
Сообщаем об этом
Закончили.

Как видно, цикл — это хорошо приукрашенный цикл с логикой “while” (пока). Пока есть доступные записи в базе данных, подходящие под условия, вытаскивать и отображать эти записи. Но не совсем понятно, что вытаскивать и как долго, т.к. мы видим, что while (have_posts()) не содержит никаких параметров.

На самом деле цикл хорошо знает, что делать. Достаточно добавить эту строчку кода перед циклом

<?php global $query_string; echo $query_string; ?>

Если добавить эту строку в файл single.php, то увидем что-то типа такого
year=2011&monthnum=02&name=version-3-update

Что означает, что из базы данных взять и отобразить что-то, опубликованное в феврале 2011 года и называется Version 3 update.

А если добавить в archive.php и загрузить архив рубрики JavaScript, то увидим
posts_per_page=10&what_to_show=posts&orderby=date&order=DESC&category_name=javascript

Что означает, отобразить на одной странице 10 штук, отображать записи, отсортировать по дате в обратном порядке и выбрать рубрику javascript.

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

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

Некоторые типичные функции цикла

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

Например <?php the_title(); ?> отображает заголовок записи. Помните, что мы внутри цикла, поэтому, если цикл будет выполнен 5 раз, то каждый раз будет отображен разный заголовок.

Вот некоторые популярные функции цикла

  • the_permalink() — отображает ссылку на запись;
  • the_ID() — отображает id записи;
  • the_author() — отображает имя автора записи;
  • the_category() — отображает категориюкатегории, к которым принадлежит запись.

Кроме этого внутри цикла есть доступ к наборам переменных, которые определяются после выполнения функции the_post(). Эти переменные существуют в объекте $post. Большая часть этой информации используется различными функциями, но мы тоже можем получить к ней доступ через запросы

  • $post->ID — возвращает id записи;
  •  $post->post_content — возвращает содержимое записи;
  • $post->post_modified — возвращает время созданияредактирования записи;
  • $post->post_name — возвращает slug записи.

Нужно четко понимать разницу между функциями и переменными. Функции выводят данные на экран, переменные возвращают значения, которые мы можем использовать, изменять и только потом выводить.

Если вы знаете название переменной, вы можете в зависимости от ее типа вывести значение с помощью print_r(), var_dump() или get_defmed_vars().

Полный список функций можно получить тут
https://codex.wordpress.org/Справочник_по_функциям/get_post ,
а переменных тут
https://www.rlmseo.com/blog/wordpress-post-variable-quick-reference/

Но у цикла есть не только внутренние, но и внешние функции (работающие за пределами цикла). Они возвращают более глобальную и общую информацию и не связаны с конкретной записью.

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

Комментарии

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

Файл comments.php

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

  • Вся необходимая логика для отображения комментариев;
  • Отображение дополнительной информации;
  • Отображение формы комментирования.

Чтобы выполнять все это, comments.php нуждается в комплексной системе логики. Работает она примерно так:

Защищена ли запись (требуется пароль)?

  • Да — вывести предупреждение и остановиться
  • Нет — продолжать

Есть ли какие-нибудь комментарии?

  • Да — вывести комментарии и продолжать
  • Нет — продолжать

Открыто ли комментирование?

  • Да — продолжать
  • Нет — вывести предупреждение и остановиться

Требуется ли регистрация?

  • Да — вывести предупреждение и остановиться
  • Нет — вывести форму комментариев

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

Например, форма комментариев отображается в виде по умолчанию или при наличии комментария, на который можно написать ответ

<?php comment_form_title('Оставить комментарий', 'Комментарий к %s'); ?>

Выборочное включение для различных ситуаций

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

<?php comments_template(); ?>  

И точно также, простым удалением этой строки из файла шаблона вы убираете комментирование с этой страницы.

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

Теперь вставьте в файл шаблона этот код

<?php
if (!get_post_meta($post->ID, "noSidebar", true))
{
get_sidebar();
} ?>

Теперь на всех страницах, с установленным полем noSidebar, сайдбар отображаться не будет.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up