Оформление тэга more в Wordpress

Тэги: , ,

sea.jpg

За идею поста спасибо читателю блога Вебсовет Михаилу. Тема на самом деле довольно интересная. Когда-то я тоже застрял на этом моменте и долго искал внятный способ решения. Речь идет о визуальном оформлении ссылки типа “читать далее…” в блоге на движке Wordpress. Данная ссылка появляется внизу анонса поста, если автор решил убрать под кат основное содержимое статьи.

Зачастую эта самая ссылка не слишком заметна. Специально ее искать будет лишь тот, кто сообразит, что статья не закончилась на втором-третьем абзаце, и есть там что-то еще. Чтобы как-то выделить данную ссыль, нужно ее соответствующим образом оформить. Но как это грамотно сделать? Ведь если заглянуть в код большинства шаблонов Wordpress, то можно обнаружить, что текст данной ссылки как бы “зашит” в php-код вывода статьи. Вот в таком, например, виде:

<?php the_content('Читать далее... »'); ?>

Здесь the_content выводит непосредственно само содержимое статьи, внешний вид которой (в том числе и вид ссылок) уже предопределен в файле css в каком-нибудь наборе правил для класса entry или ему подобным. Как выцарапать отсюда ссылку “читать далее”, чтобы придать ей более яркий вид?

Во-первых, у движка Wordpress уже есть на сей счет заготовка в виде класса more-link. То есть, как бы вы не извращались с шаблоном, но сам движок в любом случае подставит к данной ссылке class=”more-link”. И это очень полезная штуковина. Она говорит о том, что мы преспокойно можем использовать данный класс, просто добавив для него некоторый набор правил в лист стилей css нашей темы. По сути, нам остается лишь дописать в файле style.css шаблона что-то вроде:

.more-link {
background: #ffc;
}

Тем самым мы ссылке “Читать далее” зададим фон цвета ffc. Уже хоть что-то. Но! Здесь есть небольшая засада. Дело в том, что слишком вольно с данной ссылкой мы обращаться не можем по одной простой причине: ссылка эта наследует все те правила, которые уже предопределены для ссылок в посте. Фон изменить можно, размер шрифта тоже можно. Но цвет ссылок уже не поменяешь. Кроме того, заменить текстовую ссылку картинкой — тоже задачка не из простых. Поэтому читаем другой способ.

Другой способ. Можно данную ссылку вынести вообще в отдельный блок, которому задать какие угодно правила отображения. Как это сделать? Лиххко и непринужденно! Для начала в коде страницы (к примеру, файл index.php) немного исправим то место, где говорится о выводе содержимого статьи. Это все та же часть:

<?php the_content('Читать далее... »'); ?>

Здесь мы просто удалим все, что находится между одинарными кавычками и оставим вот такую запись:

<?php the_content(' '); ?>

Если за вывод текста отвечал какой-либо класс типа entry, то самое время здесь закрыть данный блок (ставим </div> и идем пить чай). Это освободит нас от наследуемости стилей. Далее, мы добавим в код страницы следующую запись:

<div class="continue">
<a href="<?php the_permalink() ?>#more-<?php the_ID(); ?>">Читать далее...</a>
</div>

Теперь у нас есть для ссылки “Читать далее…” специально выделенный блок по имени continue. Вот ему-то как раз и можно задать какое угодно отображение в файле style.css. Или вообще вместо текста “Читать далее” можно разместить картинку:

<div class="continue">
<a href="<?php the_permalink() ?>#more-<?php the_ID(); ?>"><img width="180px" height="30px" src="<?php bloginfo('template_directory'); ?>/images/bg-more.gif" alt="Читать далее" /></a>
</div>

Понятно, что картинка уже должна лежать в папке images вашего шаблона и иметь заданные размеры и название bg-more.gif.

Все просто! Если у вас есть другие варианты решения данной проблемы, буду рад услышать.

rss Подпишитесь на RSS

Или получайте новости на ваш e-mail:

Комментарии (7) на запись “Оформление тэга more в Wordpress”

  1. Михаил 20.11.2009 07:43

    Вопрос плиз
    Указанный код “continue” прописывается непосредственно в теле поста?

  2. Игорь Квентор 20.11.2009 12:02

    Михаил, не в теле поста, а в шаблоне. А еще точнее в файле index.php шаблона

  3. Михаил 21.11.2009 09:20

    Господа!
    После проверки предложенного кода выяснилось, что блок “Далее” выводится после каждого поста, независимо от того, есть ли в нем тег “More…”. Чего же в супе не хватает?
    После некоторых экспериментов у меня получился такой код:

    index.php (для простоты я привожу весь код вывода тела поста)

    <a href=”#more-”>Читать подробно &raquo

    style.php

    .continue {
    margin:15px 0;
    padding: 5px;
    background: #E6E6E6;
    width:135px;
    }
    .continue a {
    color:#FF7956;
    text-decoration:none;
    }
    .continue a:hover{
    color:#00F;
    text-decoration:underline;
    }

    В результате получается полноценный DIV, который выводится только если в посте есть тег “More…”
    Может быть решение и сложновато, но наши “корифеи” на почту не отвечают - приходится действовать методом втыка.
    Результат работы модифицированного index.php - на сайте http://www.helppsianna.ru/
    С уважением к коллегам, материалы которых использованы при доработке
    Михаил

  4. Михаил 21.11.2009 09:25

    Господа!
    Прошу прощения, в предыдущем комменте почему-то потерялся код в index.pxp повторю его

    <a href=”#more-”>Читать подробно &raquo

  5. Игорь Квентор 22.11.2009 12:16

    Здравствуйте, Михаил!
    Вы правы, тэг выводится после каждой статьи. Применять подобную конструкцию имеет смысл в тех блогах, где все статьи выходят в виде анонсов. Если же нужна универсальная конструкция, то код будет более сложным. Возможно я еще вернусь к этой теме позже.

  6. Стас 28.01.2010 23:34

    Здравствуйте. спасибо за статью. Возник небольшой вопрос, а как сделать так, чтобы гиперссылка “Читать далее” выводилась сразу за оборвавшимся предложением, а не на следующей строке?

    Сейчас посты формируются так:

    Текст текст текст. Бла-бла бла бла

    Читать далее…

    А нужно:

    Текст текст текст. Бла-бла бла бла Читать далее…

    Заранее спасибо за комментарий к моему вопросу.

  7. Игорь Квентор 30.01.2010 10:24

    Стас, для этого просто вставляйте тэг more не вначале следующего абзаца, а в конце текущего.

Трэкбеки

Оставить комментарий