Ok (dzięki Waszej pomocy) rozwiązałem swój problem, poniżej kod dla potomnych. Może komuś się przyda. Przy okazji byłbym wdzięczny gdyby ktoś to sprawdził/napisał co można było zrobić inaczej etc. Jakieś uwagi
--
Całość wrzucamy do pliku functions.php w głównym katalogu naszego theme'a. (wp includuje ten plik automatycznie).
Co to robi?
Dzieli nam tekst (cały, bez tagów <p>,<span> itp - czysty tekst) na 2 części. Pierwsza (excerpt) wyświetla fragment tekstu od początku do (domyślnie) 600 znaku.
Skrypt wyszukuje pierwszą kropke/wykrzyknik/znak zapytania/średnik i dopiero po nim ucina tekst. Więc problem ucinania słowa/zdania w środku odpada.
Plusy wiadome, możemy osobno wywoływać/formatować wstęp/tekst, działać na nim z jQuery, nie ma żadnych tagów-śmieci z WP.
Wywołanie:
Kod
show_post(); // wyświetli wstęp, domyślnie 600 znaków
show_post(content, 666); // wyświetli część tekstu zaczynając od 666 znaku.
Więc jeśli chcemy wyświetlić cały tekst w ciągu od np 700 znaku to wpisujemy:
Kod
show_post(excerpt, 700); //pierwszy parametr nie jest wymagany
show_post(content, 700); //wyświetli reszte tekstu
Kod
function cut_off($lookfor, $lenght) {
global $more;
$more = 1;
$whole_content = get_the_content();
$cutoff_pos = strpos($whole_content, $lookfor, $lenght);
return $cutoff_pos;
}
function show_post($select = "excerpt", $excerpt_lenght = "600") {
global $more;
$more = 1;
$whole_content = get_the_content();
$whole_content_lenght = strlen($whole_content);
if ($excerpt_lenght<$whole_content_lenght)
{
$punctation[0] = cut_off('.',"$excerpt_lenght");
$punctation[1] = cut_off('!',"$excerpt_lenght");
$punctation[2] = cut_off('?',"$excerpt_lenght");
$punctation[3] = cut_off(';',"$excerpt_lenght");
$i = 0;
foreach($punctation as $pointer) {
if(empty($pointer) === FALSE) {
$true[$i] = $pointer;
}
$i++;
}
$nearest_pointer = min($true);
$nearest_pointer = $nearest_pointer+1;
$text[excerpt] = substr($whole_content, 0, $nearest_pointer);
$text[content] = substr($whole_content, $nearest_pointer);
echo $text[$select];
}
else
{
echo "$whole_content";
}
}