Как-то, переводя очередной шаблон китаянки Chiq Montes,
столкнулся с проблемой неправильной кодировки русского текста в анонсах
статьи на главной странице. Проблема была в том, что фраза обрезалась
на неожиданном месте и в конце стоял вот такой символ – черный ромб с
вопросом внутри:

При этом обратил внимание, что английский текст отображался корректно. Я понял, что проблема лежит в том, что функция, которую использовал автор, некорректно работает с таблицей кириллицы. Во-первых, сначала я посмотрел на функцию, которую автор поставил в файле index.php для вывода анонса статьи. Выглядит она вот так:
1
| < ?php echo dp_clean( $post -(post_content, 250); ?> |
Я решил, что число 250 – это количество
символов, которое выводится на главной и стал методом “тыка” его менять,
чтобы получить в результате нормальное отображение текста, без черного
ромба. Конечно, у меня ничего не получилось 

После этого я не стал листать книги по
PHP и MySQL, а просто загуглил вопрос в поиске и стал кропотливо искать
пояснения, как мне обойти эту проблему. Нашел достаточно много
информации, но все было не то. И только в одной статье нашел прямую
подсказку, какую функцию можно использовать для вывода анонсов статьи на
главной – the_excerpt (). Я решил попробовать и заменил ту, которую
поставил автор, на эту. Кстати, советую вам прежде, чем вы что-то решили
поменять в коде, сначала сохранить файл. Я сделал чуть проще: так как я
менял только одну строку, я просто закомментировал функцию автора. Вы
тоже можете использовать подобный подход. Как это делается? Очень просто
перед началом любой функции надо поставить вот такие знаки: <!— а
после окончания функции – такие: —> Например:
1
| <!---< ?php echo dp_clean( $post -(post_content, 250); ?>---> |
1
| < ?php the_excerpt () ; ?> |
Чтобы вам было более понятно, в каком
месте необходимо её вставлять, я вам покажу всю часть кода из файла
index.php с комментариями в конце каждой строки, что именно выполняется
каждой строкой этой части кода. Пример мой из шаблона китаянки, как раз с
тем “кривым” кодом:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| &amp;lt;!-- begin latest posts –--&amp;gt; /* Как раз пример комментария. Говорит, что это – начало. &amp;lt;div class =&amp;quot;box&amp;quot;&amp;gt;
/* Див, отвечающий за вывод свойства “box” для отображения нашего
анонса. &amp;lt; ?php if (have_posts()) : ?&amp;gt; /* Начало цикла вывода записей из нашей базы данных. &amp;lt; ?php while (have_posts()) : the_post(); ?&amp;gt; /* Продолжение цикла loop. &amp;lt;li&amp;gt; /* Тег начала вывода элемента маркированного списка. &amp;lt;a
href=&amp;quot;&amp;lt;?php the_permalink();
?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php
dp_attachment_image( $post -(ID, 'thumbnail' , 'alt=&amp;quot;&amp;quot;' . $post -&amp;quot;post_title . '&amp;quot;' ); ?&amp;gt;&amp;lt;/a&amp;gt; /* Функция вывода картинки-миниатюры в анонсе статьи. &amp;lt;a
href=&amp;quot;&amp;lt;?php the_permalink();
?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php
the_title(); ?&amp;gt;&amp;lt;/a&amp;gt; /* Сам
заголовок статьи. &amp;lt;!---&amp;lt;p&amp;gt;&amp;lt;?php echo dp_clean( $post -(post_content,
250);
?&amp;gt;&amp;lt;/p&amp;gt;---&amp;gt;
/* А это как раз наша “кривая” функция, которая и выводит черный ромб с
вопросом внутри в конце записи. Я ее “закомментировал”. &amp;lt;p&amp;gt;&amp;lt;?php the_excerpt_reloaded(45, '' , 'none' , TRUE, '' , 2); ?&amp;gt;&amp;lt;/p&amp;gt; /* А это – наша новая функция вывода анонса статьи на главной. &amp;lt;a
href=&amp;quot;&amp;lt;?php the_permalink();
?&amp;gt;&amp;quot;&amp;lt;more&amp;gt;/&amp;gt;
/* Тег вывода слова “далее”, кликая на него, мы попадаем на чтение всей
статьи (запускается файл single.php). &amp;lt;/li&amp;gt; /* Тег закрытия элемента маркированного списка. &amp;lt; ?php endwhile ;
?&amp;gt; /* Тег закрытия списка. О списках и свойствах стилей в
Сети много он-лайн учебников. Я пользуюсь этим сайтом -
www.htmlbook.ru. &amp;lt;p class =&amp;quot;postnav&amp;quot;&amp;gt;
/* Класс стилей, отвечающий за отображения навигации “вперед” и “назад”
по нашим страницам записей. Обычно стоит ниже последней записи. Его
отлично заменяют плагины страничной навигации типа WP-Pagenavi или
WP-Page-Number. &amp;lt; ?php next_posts_link( '&amp;amp;amp;laquo; Older Entries' ); ?&amp;gt; &amp;amp;amp;nbsp; /* Выводит ссылку на страницу “назад” &amp;lt; ?php previous_posts_link( 'Newer Entries &amp;amp;amp;raquo;' ); ?&amp;gt; /* То же, но на страницу “вперед”. &amp;lt; ?php endif ; ?&amp;gt; /* Окончание цикла loop, который выводит наши записи на главной. &amp;lt;!-- end latest posts --&amp;amp;&amp;gt; |
А теперь посмотрим, что произошло после
замены “кривой” функции dp_clean($post->post_content, 250) на новую, –
the_excerpt (). Показываю на том же примере, что и вверху:

Что сразу бросается в глаза: черного ромба нет, но…. Количество слов увеличилось, а это не очень красиво выглядит. Теперь текст обтекает картинку не только слева, но и внизу. Страница потеряла привлекательность. В чем причина? А причина как раз в функции the_excerpt (), у которой количество символов стоит как бы по умолчанию, и регулировать их вывод мы не можем.
Получается, что одну проблему мы убрали,
но столкнулись с другой. Опять я возвращаюсь в поиск и с помощью
великого Google (а куда без них и Яшки?) ищу ответ на новую проблему.
Искал долго, честное слово. Потому как точно не знал, что ищу. И наконец
наткнулся на блог Соники, где она подробно описывает работу еще одной
функции, а точнее – плагина, который позволяет регулировать количество
символов в анонсе статьи, атакже – настроить еще несколько важных
свойств вывода анонса. Я не буду здесь повторять ее статью, а просто
отправлю вас к ней – читайте если надо. Здесь я скажу только несколько слов. Внимательно изучив все возможные варианты, я настроил вывод функции так:
1
| < ?php the_excerpt_reloaded(50, '' , 'none' , TRUE, '' , 2); ?> |
Все, что находится между круглыми
скобками – это дополнительные аргументы. Не буду их описывать, скажу
только главное: число 50 – это количество слов в анонсе. Честно – считал
и сравнивал, не совпадает, но – работает. Регулируйте больше или
меньше, и увидите, что количество выводимых слов меняется. И главное:
все равно при написании статьи используйте тег <!—more—>, тогда вы
сможете добится четкого отображения слов в анонсе, под обрез самой
картинки:

Как использовать функцию
the_excerpt_reloaded ? Это плагин, который так и называется. Я его
всегда ложу в папку шаблона моей любимой китаянки
когда сталкиваюсь с ее “кривой” функцией
dp_clean($post->post_content, 250). Плагин относится к разряду
плагинов, о которых говорят – поставил и забыл. Главное, не забыть
руками удалить “кривую” функцию и прописать нужную в тех файлах шаблона,
где она работает. Обычно это файлы index.php, archive.php, search.php.

Если вы столкнулись с нечто подобным в
своем шаблоне, который брали не у меня, но видите в анонсах черный ромб и
знак вопроса – скачайте плагин и попробуйте сделать так как я написал
выше. Возможно, вам это поможет.
Скачать плагин the-excerpt-reloaded.
Будут вопросы, отзывы, советы – пишите в комментариях.
Хотите следить за новыми публикациями на моем сайте – подпишитесь на RSS ленту.
Править код — это хорошо, но некоторые разработчики, как например wpzoom, таким образом кодируют тему, что при любых изменениях в файле, даже если поставлен пробел, ее ломает напрочь. Причем увидеть это можно только в ИЕ, а в других браузерах тема незначительно плывет, можно и не заметить. Поэтому предлагаемое решение не всегда применимо. Но это единичные случаи конечно)