Пустая строка между анонсом и полным текстом статьи

Замечали, что при открытии полного текста статьи по ссылке "Читать дальше.." у вас появляется лишняя пустая строчка между анонсом статьи и самой статьей? Выглядит это примерно так:

Этим недугом страдают далеко не все шаблоны, а только те, в которых для абзаца <p> прописан отступ снизу типа "padding: 0px 0px 10px 0px;". Спрашивается, откуда берется пустой абзац между анонсом и полным текстом статьи?

Дело в том, что WordPress автоматом заключает теги типа <span id="more-44"></span> (на этот id и ведет ссылка "Читать дальше..") в теги <p>. Корни такого поведения WordPress лежат в функции wpautop, которой обрабатываются все ваши записи в блоге. Она не дает вашему тексту быть вне абзаца. Скажем, если в визуальном редакторе вы написали пару строчек и даже на вкладке "Код" никаких <p> не видите, то при публикации записи эти ваши строчки все равно будут в тегах <p>. Лично мне такое поведение WordPress категорически не нравится, так как WordPress считает себя умнее блогера и якобы исправляет его ошибки в оформлении текста записи. Аналогично и со span, WordPress не дает ему быть вне абзаца и заключает его в тег <p>, а если, как я уже заметил, у вас для <p> прописан отступ, то и возникает эта лишняя пустая строчка. Рассматривать вариант с убиранием отступа у <p> я не буду, частенько он необходим для полноценного функционирования шаблона, поэтому рассмотрим другие варианты.

Первое, что вы можете сделать это удалить функцию wpautop. Для этого откройте файл functions.php вашего шаблона и добавьте туда строчку:

remove_filter('the_content', 'wpautop');

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

В таком случае предлагаю другой вариант через редактирование файла движка. Откройте файл wp-includes\post-template.php и найдите строчку:

121
$output .= '<span id="more-'.$id.'"></span>'.$content[1];

и замените ее на:

121
$output .= '<p style="margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px;"><span id="more-'.$id.'"></span></p>'.$content[1];

Этим мы сразу задали абзац <p> для span, причем обнулили все отступы этого абзаца и теперь, несмотря на то, что у вас прописано в файле стилей шаблона этот абзац не будет давать отступ и как следствие мы не будем наблюдать визуально лишнюю пустую строку:

Здесь же можно избавится от ссылок на полный текст статьи в виде article.html#more-44, то есть ссылка "Читать дальше.." будет вести просто на article.html вместо article.html#more-44. Замените строчку:

125
$output .= ' <a href="'. get_permalink() . "#more-$id\" class=\"more-link\">$more_link_text</a>";

на:

125
$output .= ' <p><a href="'. get_permalink() . "\" class=\"more-link\">$more_link_text</a></p>";

Теги <p> можете убрать, я их здесь вставил только затем, чтобы не прописывать для ссылки more-link собственный css-стиль, пусть она наследует стиль ссылок, прописанных для всех ссылок в абзацах.

Понравился пост? Подпишись на обновления по Обновления блога по RSSRSS или Обновления блога на TwitterTwitter !

Комментарии (всего 21 комментарий)
Написать комментарий

(обязательно)

(обязательно, не публикуется)

Для вставки кода используйте кнопку "Код", по умолчанию используется синтаксис подсветки языка "php", вы можете поменять его на любой другой поддерживаемый GeSHi язык, например "javascript", "css", "html4strict", "sql" и тд. Используйте предпросмотр!
 


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