Лучики здоровья мне|...или хитрые заголовки
Вот правильно я не люблю праздники. Пьянки как минимум в трех разных компашках, чуть-чуть экстрима, чуть-чуть романтики — и завершается все больничкой.
Хорошо то, что еще недельку можно не ходить на работу. Впрочем, и это омрачается тем фактом, что придется ходить уже в больницу. Капелька мёда здесь — прелестные медсестрички. Что, конечно же, тоже сдобрено ушатом холодной воды... ну, так до бесконечности.
Но самое главное — запланированные на эти десять дней дела, конечно же, не сделаны. Поэтому я тружусь не покладая рук, ног и прочих атрофированных конечностей. И, чтобы не расслабляться, да по просьбе @lilumi, рассказываю о замечательных штучках, которые можно сделать с заголовками на Вордпрессе. Которые, уже по традиции, конгениально просты и забавны.
Адаптирующийся хедер
Самое унылое в текущем HTML (да и в грядущем HTML5) — это многоуровневые заголовки, за расстановкой которых просто необходимо следить при верстке. Действительно — ведь на хедеры обращен пристальный взгляд всех поисковых систем.
Основные рекомендации (в спецификации они прописаны вообще мельком) просты — один заголовок первого уровня <h1> на всю страницу, следующие уровни должны быть вложены друг в друга в соответствии с рангом (Ханойские башни!!!). Также не рекомендуются пропускать уровни.
Основная проблема для меня — то, что на 90% сайтов в <h1> находится всегда название всего сайта, а не заголовок страницы. Это вполне логично, но мне всегда хотелось делать все наоборот. Впрочем, есть подозрение, что поисковики не сильно обращают внимание на циферку в теге, лично переранжируя заголовки.
Да не суть. Есть задача — выводить на главной странице в h1 название блога, а в посте заголовком становится название поста (для таксономии — имя тега, категории и т.п.), при этом не меняя стиля шапки. Это, как понимаете, продолжение задачи нет ссылке с главной на главную.
Для этого в header.php в блоке шапки мы просто будем, в зависимости от того, где находимся, ставить либо ссылку, либо заголовок.
<div id="header">
<?php if($_SERVER['REQUEST_URI']!='/') : ?>
<a title="на главную страницу бложека" href="<?php bloginfo('url') ?>"><?php bloginfo('description'); ?></a>
<?php else : ?>
<h1><?php bloginfo('description'); ?></h1>
<?php endif ?>
</div>
Мы используем реквест-юри только потому, что условные тэги is_home() и is_front_page() с задачей не справляются.
Соответственно, в single.php (а также archive.php, tag.php, category.php и др.) вместо стандартного
<h2><?php the_title(); ?></h2>
ставим уже человеческий
<h1><?php the_title(); ?></h1>
И в CSS обращаемся со ссылкой в хедере так же, как обращались и с h1. Аналогично поступаем с двумя уровнями заголовка в посте (если нам надо, чтобы выводилось все одинаково).
#header a,#header h1{
...стили для шапки...
}
#header a{
display:block;
}
.post h1, .post h2{
...стили для заголовка поста...
}
Остается один момент — в результате получается, что в использованных в посте заголовки (а это соответственно, <h3>, <h4>, <h5>, <h6>) появляется пропуск — ведь мы можем спокойно использовать теперь <h2> для подзаголовков. Хорошо, если они всегда под катом или за excerpt'ом — можно просто переопределить классы и заменить теги внутри single.php даже просто реплейсами:
$stext = get_the_content('');
$stext = apply_filters('the_content', $stext);
$stext = str_replace(']]>', ']]>', $stext);
$stext = str_replace('<h3', '<h2', $stext);
$stext = str_replace('</h3', '</h2', $stext);
$stext = str_replace('<h4', '<h3', $stext);
$stext = str_replace('</h4', '</h3', $stext);
echo $stext;
В случае же с отдачей больших постов, придется добавлять классы — чтобы пары <h2> на главной и <h3> в посте выглядели одинаково.
В общем, это очередная херня, которой я побаловался, отлынивая от нормальной работы.
Журнальные подзаголовки
Второе, чем я буду сегодня ездить по ушам — это пародия на журнальные заголовки. Например, кричащий заголовок «Они убили Кенни» сверху и скучный, но более правдивый, подзаголовок «В результате операции террористы были уничтожены» снизу. В бложеках этому формату место еще как есть.
Для этого можно использовать, например, произвольные поля. То есть каждому посту брать и добавлять кастомфилд с названием, например, subtitle и вписывать что угодно. Выводить же этот подзаголовок в нужном месте потом просто:
echo get_post_meta($post->ID, 'subtitle', true);
Можно сделать так же хитро как у меня, например — на главной выводить один заголовок (the_title()), а в single.php — уже дополнительный.
Впрочем, постоянно дополнять полем пост как-то лениво — мне хочется писать просто в самом заголовке «Лучики здоровья мне|...или хитрые заголовки», только разделяя вертикальной чертой заголовок и подзаголовок. Для этого можно создадим две функции в functions.php (который заменяет миллионы плагинов). Если файла нет в папке шаблона — создайте, ага.
function my_title($before = '', $after = '', $echo = true){
$post = &get_post($id);
$title = $post->post_title;
$s=explode("|",$title);
$title=$s[0];
$title=apply_filters( 'the_title', $title );
if ( strlen($title) == 0 )
return;
$title = $before . $title . $after;
if ( $echo )
echo $title;
else
return $title;
}
function my_subtitle($before = '', $after = '', $echo = true){
$post = &get_post($id);
$title = $post->post_title;
$s=explode("|",$title);
if(!empty($s[1])) $title=$s[1]; else $title=$s[0];
$title=apply_filters( 'the_title', $title );
if ( strlen($title) == 0 )
return;
$title = $before . $title . $after;
if ( $echo )
echo $title;
else
return $title;
}
После этого можно вызывать my_title() на главной странице и my_subtitle() в сингле. Соответственно, если подзаголовок будет не указан (не будет черты), то вторая функция выведет просто заголовок.
С другой стороны, если шаблон менять не хочется, можно переопределить саму функцию the_title() в том же самом functions.php. Например, так, чтобы на всех страницах показывалась часть до вертикальной черты, а на главной — после:
add_filter('the_title', 'my_title', 50);
function my_title($title){
if ( strlen($title) == 0 )
return;
$semtitle=explode("|",$title);
if(!is_single()||empty($semtitle[1]))
return $semtitle[0];
return $semtitle[1];
}
Есть одна мелочь при генерации подзаголовков из заголовка — надо следить за слагами, чтобы они выходили нормальными и читаемыми. Впрочем, это надо в любом случае — от автоматического транлитерированного «ЧПУ» тошнит не только специалистов юзабилити.
Можно поиграть заголовками и дальше. И при этом не требуется чего-то большего, чем самые азы одного из простейших языков — было бы желание.
Но обычно шаблоны для Wordpress такие скучные, что зевать хочется.
Кстати, да. Пойду я спать.




Тема с пародией на «Журнальные подзаголовки» — офигенно понравилась между прочим!
Хм...
Я много думал о необходимости такого дела, но поскольку большую половину постов публикую через Live Writer (а он, надо вам сказать, начисто лишен функционала по кастомфилдс или управлении слагами) — то решил таки отказатся от этой идеи.
Excerpt для этого же можно использовать — большая часть людей вообще не обращает внимания на эту могущественную штуку, но я как раз ее использвую по полной...
Так что без меня, но я запомню — отличный метод :)
и, кстати, «журнальные подзаголовки» можно использовать и через Live Writer — там ведь главное сам заголовок написать через черту.
Есть, правда, одна проблема — кросспост, подписка на комментарии, некоторые не нативные плагины вывода последних, популярных и т.п. постов. В общем, некоторые плагины, которые не используют the_title, также придется править, чтобы они выводили только текст до или после черты.
excerpt все-таки немного другое — это для меня скорее подзаголовок в старых книгах — знаете, «Первое путешествие Гулливера. Автор сообщает кое-какие сведения о себе и о своем семействе. Первые
побуждения к путешествиям. Он терпит кораблекрушение, спасается вплавь и
благополучно достигает берега страны лилипутов. Его берут в плен и увозят
внутрь страны.» Что-то вроде :). Использование просто сокращения и унылого [...] (в русском вообще-то надо ставить ) — все равно скучно.
Оооо! Посылаю тебе лучики здоровья!
Ты меня здорово выручил, счас займусь переделыванием шаблона. Спасибо тебе огроменное!
Кхех. я только начал читать пост с мыслью — вот оно, вот он маленький лытдыбр автора о пьянке, но эта ссылочка в конце на продолжение статьи...
ты в своём репертуаре ;)
@blogomober: не, ну для интернетовских и в твиттере лытдыбра моего достаточно.
Здесь 127 ридерам-то зачем знать, что я был в сауне, прыгал с парашютом, катался на снегокате и сноуборде вместо того, чтобы дела делать? :) А про больничку, запахи лекарств (и накрахмаленные коротенькие халатики) вообще не стоит.
...из которых добрая половина — боты, конечно же.
боты накрахмаленых коротеньких халатах? :)
Здоровские идеи после праздников появляются! Молодец! Запишу в блокнотик, а я вот только от праздников отходить начал, да к работе приступаю потихоньку
@Дизайнер-художник: я просто, как волшебник, вытащил из шляпы самого что ни на есть обычного кролика, всего-то :). Удачно приступить к работе — у меня вот никак не получается...
О! я вижу ты пост дополнил, про адаптирующийся хедер, а мне как раз это и было нужно.
Меня нервирует что у тебя нет поиска и нет каталогизатора, все яндексом приходится выискивать
кстати про выпадающий H2 — можно писать «журнальный подзаголовок» в нем ;)
Не нервничай, все будет.