Autor Zpráva
bajola
Profil
Ahoj,

používám pro „výňatky“ (excerpts) upravený kód ve functions.php, viz níže, díky kterému můžu přímo v šabloně určit, jakou bude mít výňatek délku (můžu mít různé délky na různých stránkách). Za výňatek se přidává trojtečka.

Problém je, že trojtečka se přidává i tehdy, když výňatek nedosahuje požadované délky a navíc se někdy na konci výňatku objeví tento divný znak – �

Potřebovala bych vyřešit, aby se trojtečka nedávala v případě, že excerpt nedosahuje celé délky + pořešit divný znak.

Zná někdo řešení? Předem díky

<?php

function get_excerpt($count){
  $permalink = get_permalink($post->ID);
  $excerpt = get_the_content();
  $excerpt = strip_tags($excerpt);
  $excerpt = substr($excerpt, 0, $count);
  $excerpt = $excerpt.'…';
  return $excerpt;
}

?>

V šabloně se pak použije:

<?php echo get_excerpt(220); ?>
PostCC
Profil
bajola:
Ty "divné znaky" jsou pozůstatky rozdělení v místě vícebajtového znaku, typicky diakritiky. Znak, který je zapsán více bajty prostě "roztrhnete" uprostřed a zůstane pouze první z bajtů, interpetovaný následně jako nesmyslný znak.

Doporučuji funkci:

substr($excerpt, 0, $count);

nahradit její bezpečnou variantou:

MB_SubStr($excerpt, 0, $count);

A řádek:

$excerpt = $excerpt.'…';

upravit na:

$excerpt .= MB_StrLen($excerpt) > $count ? "…" : "";

EDIT:
... což nebude dávat smysl, protože porovnáváte délku již upraveného řetězce :-) Občas je potřeba si to po sobě přečíst. Nejlépe tedy něco jako:

function get_excerpt($count){
  $permalink = get_permalink($post->ID);
  $excerpt = get_the_content();
  $excerpt = strip_tags($excerpt);
  $OrigLength = MB_StrLen($excerpt);
  MB_SubStr($excerpt, 0, $count);
  $excerpt .= $OrigLength > $count ? "…" : "";
  return $excerpt;
}
bajola
Profil
Diky za rychlou reakci. Trojtecka uz se nepridava ke kratkym textum, mozna se vyresil i divny znak (jeste nevim zcela jiste), ale cela ta funkcnost ted nefunguje (nedela to zkracene vynatky, vypisuje se cely prispevek).
PostCC
Profil
bajola:
No jo, protože dvakrát měř, jednou řež... Chyba je v tomhle řádku:

  $excerpt = MB_SubStr($excerpt, 0, $count);
bajola
Profil
Bezva, už to funguje, díky!
helf
Profil
Dobrý den,

řeším podobný problém jako bajola. Potřebovala bych, aby se u příspěvků kratších než je nastavený limit pro excerpts nevkládal nakonec znak pro výňatek (v mém případě trojtečka). Používám plugin advanced-excerpt.4.2.3, který mi umožnuje zobrazovat v excerptu i obrázky či odkazy a nastavit si vlastní délku výňatku.

Předem moc díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: