Кухня Магазеты: Живой <!–-more-–>

29 сентября 2007 года, покинул нас Антон Скоробогатов, один из самых видных деятелей и активистов русского сообщества WordPress - MyWordPress.ru. Эту статью я посвятил ему.

Как сделать умный more, похожий на lj-cut в ЖЖ.

Update: Оказывается, в новых версия WP (с 2.2), можно сделать так:

<!–more дальше будет очень интересно!–>. Фраза “дальше будет очень интересно!” теперь станут ссылкой на оставшуюся часть сообщения!

Это наверное единственный пост в Магазете не о Китае. Он о самой Магазете, а вернее о могущественном механизме, на котором “Магазета” работает. Этот механизм зовётся WordPress. Это одна из самых лучших платформ для автономных блогов.

Речь здесь пойдёт о том, как сделать тэг <!–-more-–> “живым”, т.е. как поменять стандартные сообщения “read more”, “читать дальше” для каждого поста в отдельности.

Предисловие

Сразу скажу, что я не мастер в языке php, немного знаю китайский язык и читаю матрицу со словарём.
Как только я перешёл с LiveJournal на WordPress, меня сразу расстроило отсутствие возможности настройки тэга <!–-more-–>, в эквивалент этого в ЖЖ - <lj-cut>, а чтобы задать ему произвольное значение используется тэг <lj-cut text=”произвольный текст”>. Вывод в ЖЖ получается такой:
( more )

это по-умолчанию, а если с произвольным текстом, то:
( произвольный текст )

В WordPress такой возможности (задавать произвольный текст) и подобных плагинов - нет.
Текст ссылки можно задать прямо в шаблоне, или он заменяется стандратным (”Read more” и т.п.). Какой бы вы не писали текст, всё равно все сообщения будут кончаться именно им, а это не оригинально.

Решение

Эту проблему мне помогла решить статья Максима. Использование произвольных полей в WordPress удобная штука, которую мы можем использовать в нашем Лёгком деле - научить WordPress менять текст “more”.

В шаблоне, замените стандартный тэг <? the_conten() ; ?> или <? the_excerpt(); ?>

На такой код:

<?php $text_desc = trim($post_meta_cache[1][$post->ID]['tcut'][0]); ?>
<?php if ( ($post->post_excerpt != ”) && (!is_single()) ) {the_excerpt(); }
elseif ( strlen($text_desc) > 0 ) echo the_content(” . $text_desc,strip_teaser);
else the_content(’Читать дальше →‘,strip_teaser);?>

Что он делает:
Вначале мы вводим возможность использование произвольного поля tcut, об этом подробнее читайте в статье у Макса, tcut вы можете заменить на что угодно.

Потом мы создаём условие, в котором проверяем пуст ли excerpt, не находимся ли мы в single (просматриваем статью полностью). Второе условие, если пуст “excerpt” (анонс), то мы даём выводим содержание произвольного поля tcut. Иначе, просто пишем “Читать дальше →

Использование

Теперь если мы хотим воспользоваться “живым, умным” more-м, то просто вставляем в нужном месте <!–-more-–>, а в произвольных полях пишем:
Ключ (keyword):
tcut
Значение (description):
Ваш произвольный текст или картника…

Вывод получится таким:
Ваш произвольный текст или картника…

Если же Вы воспользовались excerpt-ом (анонсом), то он сработает стандартно.

Если же Вы воспользовались тэгом <!–-more-–>, но не задавали никаких значений, то по умолчанию выйдет:

Читать дальше →

Вот и всё. Надеюсь всё объяснил доходчиво. Я также написал две статьи:

Антон Скоробогатов. Вечная память ему.


7 комментариев

  1. Александр, небольшая поправочка. Правильно использовать <!–more–>

    ~ MAX, 2 октября 2007 → ответить
  2. Похоже текст режется… Нужно два минуса, вместо одного, как в html-комментариях.

    ~ MAX, 2 октября 2007 → ответить
  3. MAX,
    Спасибо Максим, я ещё раньше узрел. Но это WP меняет два минуса на тирэ. Попытаюсь исправить.

    ~ Главред, 2 октября 2007 → ответить
  4. Вообще, ничего этого не нужно. Достаточно написать так: <!–more Любой текст–>
    В итоге получим:
    Любой текст

    ~ Pepsimist, 4 октября 2007 → ответить
  5. Pepsimist,
    Правильно, я уже в начале статьи исправился.
    Но всё равно, спасибо!
    А я, как обычно, новый велосипед изобрёл!

    ~ Главред, 4 октября 2007 → ответить
  6. какой файл редактировать???

    ~ тырпыр, 25 января 2008 → ответить
  7. тырпыр, в смысле?

    ~ Главред, 26 января 2008 → ответить

Ваш отзыв автору