Это статья – сокращенный и достаточно вольный перевод статьи “Custom Fields Hacks For WordPress”, опубликованной в Smashing Magazine (ссылка на оригинал дана в конце). Перечислены 10 способов интересного применения custom fields (пользовательских полей) в WordPress.
1. Установка дата окончания поста.
Этот прием поможет установить дату окончания публикации поста, если вам нужно отображать запись в течение ограниченного времени.
В теме заменяем цикл вывода на следующий:
< ?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
$expirationtime = get_post_custom_values('expiration');
if (is_array($expirationtime)) {
$expirestring = implode($expirationtime);
}
$secondsbetween = strtotime($expirestring)-time();
if ( $secondsbetween > 0 ) {
// For example...
the_title();
the_excerpt();
}
endwhile;
endif;
?>
При написании поста создается пользовательское поле с ключом expiration и временем в формате mm/dd/yyyy 00:00:00 в качестве значения. Пост перестанет отображаться после наступления указанной даты и времени.
2. Отображение постов на главной странице.
Этот прием поможет выбрать, как отобразить пост на главной странице – полностью или только анонс. Как и в предыдущем способе, надо заменить стандартный цикл вывода на следующий:
< ?php if (have_posts()) :
while (have_posts()) : the_post();
$customField = get_post_custom_values("full");
if (isset($customField[0])) {
//Custom field is set, display a full post
the_title();
the_content();
} else {
// No custom field set, let's display an excerpt
the_title();
the_excerpt();
endwhile;
endif;
?>
Данный код отображает все посты в виде анонсов. Чтобы отобразить выбранный пост полностью, надо создать поле с ключом full и задать ему любое значение.
3. Отображение музыки и настроения в посте.
У пользователей ЖЖ есть две удобные опции при написании поста, которые пока отсутствуют в WordPress – отображение текущих музыки и настроения. Добавить их в WP достаточно просто – нужно в файле single.php или index.php текущей темы добавить следующий код:
$customField = get_post_custom_values("mood");
if (isset($customField[0])) {
echo "Mood: ".$customField[0];
}
В посте создаем поле с ключом mood и как значение вписываем настроение.
4. Добавление META-описание к постам.
Хоть META-информация и не так уже важна для поисковиков, как раньше, все же не помешает иметь META-описание для ваших записей.
В файл header.php добавьте этот код в любом месте между тэгами <head> и </head>
">
Этот прием использует тэги WordPress для генерации meta-описаний. На страницах категорий, тэгов, архивов и главной используется статическая meta-информация. Отредактируйте строки 3, 7 и 9 в коде для определения ваших собственных значений. Для записей создайте поле Metadescription и впишите значения.
5. Ссылки на внешние ресурсы.
Как создать ссылку в заголовке на внешний ресурс “напрямую”, без ссылки на сам пост (как это бывает на Хабре – прим. перев.)? Для этого есть такой эстетичный способ. Сначала в файл functions.php вставляем следующий код:
Теперь при написании поста нужно создать поле со значением url1 или title_url или url_title и вписать ссылку на внешний ресурс как значение. Заголовок поста при этом станет не ссылкой на сам пост, как обычно, а ссылкой на внешний ресурс (снова вспомним Хабр – прим. перев.). Если значение поля не найдено, заголовок будет традиционно вести на сам пост.
6. Встроенные CSS-стили.
Иногда нужно добавить к записям дополнительные стили CSS. Конечно, всегда можно использовать встроенные (inline), но это иногда не очень удобно. Данный прием поможет легко создавать дополнительные классы CSS и вставлять их в заголовок блога.
В файле header.php в любом месте между тэгами <head> и </head> вставляем код
< ?php if (is_single()) {
$css = get_post_meta($post->ID, 'css', true);
if (!emptyempty($css)) { ?>
При написании записи создаем поле css и вписываем нужный CSS как значение. Вот настолько просто!
7. Переопределение <TITLE>
Тэг title чрезвычайно важен для SEO и привлечения траффика на ваш блог. И, кстати, большинство тем для WP поставляется без оптимизированного тэга title. Сторонние плагины, типа All in One SEO Pack могут помочь решить задачу, но так же этого можно достигнуть с помощью пользовательских полей.
В файле header.php заменяем код в <title> </title> на
При написании поста создаем поле title и вписываем нужное значение.
8. Блокирование поисковых систем от индексации определенных постов.
Вы хотели когда-нибудь запретить поисковику индексировать определенные записи (например, что-то очень личное)? Но при этом разрешить его читать простым читателям. Это достаточно просто с помощью… вы уже поняли чего.
Сначала нужно найти ID поста, который подлежит сокрытию от вездесущих поисковиков. В примере используем ID 17.
В файл header.php добавьте этот код в любом месте между тэгами <head> и </head>
Пользовательское поле noindex и ID поста как значение запретят поисковым системам индексировать контент данного поста.
9. Получить или вывести значение любого поля.
Теперь вы используете множество пользовательских полей. Как насчет того, чтобы автоматически получать все значения? В файл functions.php вставляется вот такой код:
function get_custom_field_value($szKey, $bPrint = false) {
global $post;
$szValue = get_post_meta($post->ID, $szKey, true);
if ( $bPrint == false ) return $szValue; else echo $szValue;
}
Теперь для вызова функции и получения значения полей, используем такой вот код:
< ?php if ( function_exists('get_custom_field_value') ){
get_custom_field_value('featured_image', true);
} ?>
Сначала используется функция PHP function_exists(), чтобы удостовериться что функция get_custom_field_value определена в теме. Первый аргумент функции – название поля (в этом случае featured_image) и второй – получение значения (true) или вызов его для дальнейшего использования (false).
10. Вывод кнопик “Digg This” только при необходимости.
Очень удобная и хорошая идея использовать кнопку “Digg This”, чтобы получать траффик с Digg. Но нужна ли эта кнопка ко всем постам? Вряд ли стоит использовать Digg, например, для объявления изменений на вашем сайте. Нас снова выручат пользовательские поля.
Открываем файл single.php и вставляем этот куда туда, где мы хотим видеть кнопку “Digg This”.
Пользовательское поле digg с любым значением отобразит кнопку “Digg This” (javascript, использованный в коде, покажет кнопку, предоставленную самим Digg). Если значения нет, кнопка не будет показана.
Бонус. Отображение миниатюр (thumbnails) рядом с записями.
Это достаточно известный прием и он успешно используется очень многими. Но некоторые все еще не знают, как красиво показать миниатюры рядом с постами на странице.
1. Создайте изображение по умолчанию в редакторе вроде PhotoShop или Gimp. Размер в приведенном примере 200х200, но конечно, это на ваше усмотрение. Назовите изображение default.gif и загрузите его в папку images в текущей теме.
2. В файле index.php вставьте это код в то место, где вы желаете видеть миниаютюры.
3. При написании создавайте пользовательское поле с ключом post-img и путь к изображению, которое вы хотели бы отобразить как миниатюру, как значение его.
Инструментов для удобства и облегчения работы связки WordPress/Twitter уже придумано предостаточно. Например, немало на эту тему можно почитать на . Я нашел еще один плагин, который избавит Вас от необходимости анонсировать в Twitter каждый новый пост в блоге – то есть фактически кросспост заголовка блога в Twitter. Для этого нужно проделать следующую процедуру
1) Скачать-установить-активирован плагин .
2) В настройках плагина ввести свои логин/пароль к Twitter и что вы хотите кросс-постить: заголовок и/или URL поста.
Автор плагина рекомендует передавать URL, а не заголовок. URL’у отдается приоритет, т.к. из-за ограничений в 140 знаков ссылка может быть трансформирована в сокращенную, а заголовок, если он превышает в длину 140 знаков, будет просто обрезан.
Плагин протестирую на этом посте. Результаты от увиденного допишу апдейтом.
Плагинов для WordPress типа related posts или similar posts, которые могут добавлять к посту список похожих по тематике записей, в мире существует не мало. А мне понадобилось найти плагин, который не самостоятельно бы генерировал список похожих постов, а позволял бы автору самостоятельно, “вручную” добавлять к посту ссылки на схожие. Недолгий поиск в Гугле привел вот к плагину, который делает именно это – позволяет автору с помощью AJAX-интерфейса самому выбирать похожие ссылки.
Возможности плагина:
- легкий поиск схожих записей через AJAX-интерфейс
- быстрое добавление и удаление ссылок без перезагрузки
- автоматическое добавление ссылок к посту, без необходимости править PHP-код шаблона (для особо опытных пользователей доступны несколько функций)
- добавление ссылок к схожим постам работает “в обе стороны”, т.е. если запись А ссылается на запись Б как на схожую, то и к записи Б появляется ссылка к записи А
- поддержка виджетов
- удобная настройка отображения внешнего вида
-
Еще один способ отображать профиль автора на мультиавторском блоге. Но в отличие от предыдущего в данном методе задействовано не редактирование страниц темы, а плагин, который придаст Вашему блогу некоторой “web 2.0-ности”.
Для начала нужно скачать плагин под названием , после чего, как обычно, скопировать его в папку плагинов и активировать.
После этого в файлах текущей темы в место вызова авторов поста вставить вот такой код:
<?php if (function_exists('author_exposed')){author_exposed();} ?>
Теперь при клике на ссылку автора будет выводиться вот такой симпатичный pop-up с отображением информации об авторе из его профайла и ссылкой на его записи.
Все знают, как с помощью нехитрого трюка в мультиавторском блоге можно вывести вместо имени автора ссылку на все посты данного автора, т. е. проще говоря, применить простой фильтр по авторам. Но мы за то и любим WP, что можно этим не ограничиваться, а пойти еще дальше. В данном примере описывается прием, с помощью которого на отдельной странице можно вывести не только ссылки на посты автора, но и описание его профайла. Для этого нужно проделать несколько приемов.
1. В файлах текущей темы нужно найти файл archives.php, создать его копию и переименовать в author.php.
2. В этом файле author.php весь код между вызовом хэдера (“шапки”) и сайдбара (“боковой колонки”) с футером (“подвала”) заменить на что-то вроде этого
<div id="content" class="narrowcolumn">
<!-- This sets the $curauth variable -->
<?php
if(isset($_GET['author_name'])) :
$curauth = get_userdatabylogin($author_name);
else :
$curauth = get_userdata(intval($author));
endif;
?>
<h3>Об авторе: <?php echo $curauth->display_name; ?></h3>
<p><strong>Сайт:</strong> <a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></p>
<p><strong>Описание:</strong> <?php echo $curauth->user_description; ?></p>
<h3>Записи <?php echo $curauth->display_name; ?>:</h3>
<ul>
<!– The Loop –>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li>
<a href="<?php the_permalink() ?>" rel="bookmark" title=";Постоянная ссылка: <?php the_title(); ?>">
<?php the_title(); ?></a>
</li>
<?php endwhile; else: ?>
<p><?php _e('У этого автора еще нет записей.'); ?></p>
<?php endif; ?>
<!– End Loop –>
</ul>
</div>
Данный код отобразит ссылку и краткое описание автора, заполненные соответственно в профиле данного автора. Это, конечно, далеко не все – с помощью шаблона, описанного в , можно таким же манером отобразить пользовательские мессенджеры (AIM, YIM, Jabber), дату регистрации и т.д.
Ну и, наконец, чтобы в списке постов имена авторов выводились на их страницы, заменяем <?php the_author(); ?> на <?php the_author_posts_link(); ?>.
Чуть ли не 100% русскоязычных блоггеров пользуются классическим плагином Антона Скоробогатова rus-to-lat. На днях появился еще один такой же плагин, под названием . В принципе, ничего плохого в этом нет, чем больше разных плагинов, тем лучше и альтернативу иметь всегда неплохо, вот только меня смущает немного фраза:
Cyr2Lat Slugs is based on Petko’s original idea and uses one of his functions.
и тут идет ссылка на еще один плагин с той же функциональностью, опубликованный 24 апреля 2007 г, и судя по тексту, предназначенный для работы с WP в кодировке Win-1251. В русском варианте readme такой фразы нет.
Хорошо, что есть такие плагины, но все же “original” ли данная “idea”? Особенно если учесть, что плагину А. Скоробогатова уже несколько лет, а Антон сам, к сожалению, уже высказаться не сможет.
На досуге перевел еще одну тему для WordPress, под названием ascii-one. Оригинальная тема публиковалась на . Это 3-колоночная тема, готовая для виджетов.
Slaff новую тему для WordPress под названием “Slaffistica Cafe Cortado”. Если кто-нибудь еще не заметил, я уже запустил ее для тестирования на inforedesign’e. Особенно приятно было заметить, что тема получила именно мной предложенный вариант название.
Свои впечатления и пожелания к теме буду отписывать позже.
UPD 1: При просмотре поста в режиме single post (1 пост на страницу) видим: “Эта запись опубликована ноября 18, 2008.”, т.к. установлен стандартный американский timestamp. Но тема-то у нас русскоязычная. Соответственно, меняем в файле theloop.php timestamp на jS F, Y.
Там же, рядом с вызовом тэгов висит: “Таги”. Slaff, ну какие “таги”? :) Я для себя заменил на “Тэги” (как вариант – “теги”).
И еще лично для меня некоторое неудобство. Я понимаю, что минимализм, но все же мне было бы удобнее видеть рядом с постом дату, рубрику и тэги. Поэтому все в тот же файл theloop.php добавил такую строку:
< ?php the_time('j F Y') ?> · < ?php the_category(' · ') ?> · < ?php the_tags('Тэги: ', ', ', ''); ?>
“10 ноября 2008 года — черный день российского блогоспамера”! Так утверждает , предназначенного для борьбы с русскоязычным спамом (т.е. то, с чем не очень хорошо справляется Akismet). Установка тут же выявила 23 коммента, которые мне показались “правильными”, а на деле оказались очередным СМО-мусором. В общем, первые впечатления вполне положительные. Рекомендую всем немедленно включаться в общее дело борьбы со спамом.
PS. Интересно, какие будут комменты к этому посту.