WordPress Россия

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

Добавлено 20 мая 2010 в категорию Плагины.

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

Этим недугом страдают далеко не все шаблоны, а только те, в которых для абзаца <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-includespost-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-стиль, пусть она наследует стиль ссылок, прописанных для всех ссылок в абзацах.

Категории