“Read more” w WordPress
Kategoria O wszystkim i o niczymPodczas modyfikacji skórki natknąłem się na mały problem związany z wyświetlaniem treści na stronie głównej. WordPress posiada funkcję the_content(), która posiada możliwoć “ucinania” reszty wpisu za tagiem <!–more–>, gdzie pojawia się odnośnik z napisem “read more” czyli “czytaj więcej”. Napis można modyfikować jednym z parametrów, ale co gdy chcemy przenieść odnośnik gdzieś poza akapit? Trywialnie można to zrobić tak:
<a href="<? the_permalink() ?>">więcej</a>
Link będzie jednak widoczny nawet gdy nic już więcej nie ma. Żeby to rozwiązać musiałem się wgłębić w kod WordPress, ponieważ nigdzie nie mogłem znaleźć na to pytanie odpowiedzi. Wywnioskowałem, że jedyne wyjście to dopisanie własnej funkcji. Po podejrzeniu get_the_content() wychodzi następująca funkcja:
function get_more() {
global $more, $page, $pages;
if ( $page > count($pages) )
$page = count($pages);
$content = $pages[$page-1];
if ( preg_match(’/<!–more(.*?)?–>/’, $content, $matches) )
$content = explode($matches[0], $content, 2);
else
$content = array($content);
if ( count($content) > 1 ) return true;
return false;
}
Można ją umieścić w functions.php naszej skórki albo dopisać do wp-includes/post-template.php. Teraz można dodać warunek:
<?php if(get_more()) : ?>
<a href="<?php the_permalink() ?>">więcej</a>
<?php endif; ?>
I wszystko działa jak należy. Należy pamiętać aby usunąć link z treści posta, czyli trzeba zmienić the_content() w szablonie na the_content(”). Mam nadzieję, że się komuś przyda. Dziwne jest tylko to, że takiej funkcji nie ma standardowo w WordPress.
8 Kwiecień 2010 20:06
można prosić o kontakt?
12 Kwiecień 2010 13:39
No niestety, miałem wielką nadzieję co do działania tego kodu, ale wciąż to samo. Po wklejeniu kodów, moja strona wypluwa error, że wystąpił w pliku functions.php nieoczekiwany znak “<”
( przy fragmencie: / / ) . Może ja źle wklejam skrypt? Może podeślę do Ciebie Arturze, pliki functions oraz index, i wmontujesz to odpowiednio?
Dzięki, Pozdrawiam, Piotr
12 Kwiecień 2010 13:45
przy fragmencie ! m o r e ( . * ?) ;D
12 Kwiecień 2010 18:30
Błędy podpowiadają, że znaki “< " i ">” są źle zakodowane. Skasuj je i wstaw własnoręcznie. Jeśli nie pomoże to prześlij pliki to sprawdzę dokładniej.
19 Sierpień 2010 10:59
Dziadostwo nie działa ten sam błąd co Piotr.
Piczu nie możesz tego poprawić?
20 Sierpień 2010 15:37
@Henek:
Błąd leży w formatowaniu na stronie. Usuń cudzysłowa z preg_match i wstaw własnoręcznie.