Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

✂️ 5 Nippi WordPressi väljavõtete kohandamiseks

✂️ 5 Nippi WordPressi väljavõtete kohandamiseks

Saabud oma blogi avalehele ja näed hiiglaslikke postituste plokke, mis venivad üle kolme ekraani. Lugeja ei keri ühe artikli pärast kolme ekraanitäit, ta lahkub. Või vastupidine olukord: eelvaated katkevad poole lause pealt, linki „Loe edasi" ei ilmu ja RSS-voog näeb välja nagu alguse ja lõputa lausekatked.

Vaikimisi lõikab WordPress väljavõtted esimese 55 sõna järel ja lisab tavalise mõttepunkti. Puuduvad pikkuse seaded, puudub lingi teksti kohandamine ja väljavõtted pole isegi lehekülgede jaoks saadaval. Kõike seda saab parandada, kuid mitte kastikesi märkides, vaid paari koodirida lisades.

Allpool on 5 toimivat tehnikat: alates väljavõtte pikkuse muutmisest kogu saidi jaoks kuni peenhäälestuseni kategooriate kaupa ja lingi „Loe edasi" automaatse lisamiseni. Igaüks koos valmis koodijupiga, mille kopeerid ja kleebid faili functions.php.

💡 Kiire ülevaade:

  • Muuda väljavõtte pikkust kogu saidi jaoks ühe funktsiooniga failis functions.php
  • Määra erinevatele kategooriatele erinevad pikkused, kasutades tingimust in_category()
  • Lisa iga väljavõtte lõppu link „Loe edasi"
  • Luba väljavõtted WordPressi lehekülgedel ühe koodireaga
  • Halda väljavõtteid ilma programmeerimiseta, kasutades pluginat Advanced Excerpt

Mis on väljavõtted WordPressis ja kuidas need töötavad

Väljavõte on postituse lühikirjeldus, mis kuvatakse postituste loendites: avalehel, kategooriate arhiivides, otsingutulemustes ja RSS-is. Erinevalt <!--more--> sildist, mis lõikab sisu suvalisest kohast, on väljavõte iseseisev üksus: WordPress võtab kas sinu käsitsi kirjutatud teksti väljalt „Väljavõte" või genereerib selle automaatselt postituse esimesest 55 sõnast.

Käsitsi kirjutatud väljavõtted on alati prioriteetsed. Kui oled redaktoris välja „Väljavõte" täitnud, kuvab süsteem täpselt seda, ignoreerides automaatset kärpimist. See annab täieliku kontrolli: saad kirjutada sisuka kokkuvõtte, selle asemel et leppida kahe esimese lausega, mis juhtuvad teksti alguses olema.

Probleem on selles, et metaboks „Väljavõte" on vaikimisi peidetud. See lülitatakse sisse jaotises „Ekraani seaded" (nupp postituse redigeerimislehe ülaosas), märgi linnuke valiku „Väljavõte" kõrval ja väli ilmub redaktori alla. Seejärel algab kohandamine: allpool olevad viis tehnikat katavad kõik tüüpilised stsenaariumid.

1. Väljavõtte pikkuse muutmine faili functions.php kaudu

See on alus. WordPress kärbib vaikimisi 55 sõna järel, millest ei piisa selgeks eelvaateks, kuid millest piisab, et lugeja teemast aru saaks. Kui vajad rohkem (või vähem), lahendab excerpt_length filter ülesande ühe funktsiooniga.

Mida kood teeb: kirjutab üle sõnade arvu, mille WordPress tagastab funktsioonis the_excerpt(). Ei puuduta käsitsi kirjutatud väljavõtteid, kui oled redaktoris välja täitnud, kuvatakse see nii nagu on.

  • Ava functions.php oma teemas (Välimus → Teema redaktor → functions.php) või FTP kaudu
  • Lisa faili lõppu (enne ?>, kui see on olemas):
1function my_excerpt_length($length) {
2 return 110;
3}
4add_filter('excerpt_length', 'my_excerpt_length');
  • Salvesta fail

Number 110 on sõnade arv. Tüüpilise blogi jaoks annab 80-120 sõna 3-4 lauset, millest piisab sisukaks eelvaateks ilma avalehte üle koormamata. RSS-lugejad hindavad seda samuti: neil on oma piirangud ja liiga pikka väljavõtet võidakse kärpida agressiivsemalt, kui plaanisid.

Kui kasutad plokiteemat (Block Theme, FSE), võib functions.php puududa või mitte ootuspäraselt töötada. Sel juhul loo alamteema või kasuta Code Snippets pluginat, see lisab koodijuppe ilma teemafaile redigeerimata.

2. Erinevad väljavõtte pikkused erinevatele kategooriatele

Uudised vajavad 30 sõna, samas kui arvustused ja juhendid vajavad 100-120. excerpt_length filter annab oma põhiversioonis ühe väärtuse kogu saidi jaoks, mis pole paindlik. Järgnev kood eraldab pikkuse kategooriate kaupa.

Stsenaarium A, üks erilise pikkusega kategooria. Sul on kategooria „Arvustused", kus väljavõtted peaksid olema lühemad:

1function excerpt_length_category($length) {
2 if (in_category('Reviews')) {
3 return 20;
4 } else {
5 return 60;
6 }
7}
8add_filter('excerpt_length', 'excerpt_length_category');

Asenda Reviews oma kategooria nimetulbaga, numbrid sellega, mida vajad.

Stsenaarium B, mitu erineva pikkusega kategooriat. if/elseif/else kaskaad katab kolm taset: üks kategooria, kategooriate grupp ja kõik muu:

1function excerpt_length_category($length) {
2 if (in_category('Review')) {
3 return 35;
4 } elseif (in_category(array('News', 'Videos', 'Editorial'))) {
5 return 60;
6 } else {
7 return 55;
8 }
9}
10add_filter('excerpt_length', 'excerpt_length_category');

in_category() aktsepteerib kategooria nimetulpa (string) või nimetulpade massiivi. Tingimusi kontrollitakse järjekorras, esimene tabamus käivitub. Ülaltoodud näites: postitused kategooriast „Review" saavad 35 sõna, kategooriatest „News", „Videos" ja „Editorial" saavad 60, kõik muu saab 55.

Pärast salvestamist kontrolli avalehte ja paari kategooria lehekülge, väljavõtete pikkused peaksid erinema sõltuvalt sellest, millisesse kategooriasse postitus on määratud.

Väljavõte katkeb ja lugejad ei saa alati aru, et see on vaid eelvaade, mitte terve artikkel. Link väljavõtte lõpus lahendab probleemi: selge üleskutse klõpsata ja tervikuna lugeda.

Näide Loe edasi lingist WordPressi väljavõtte lõpus

WordPress paneb vaikimisi kärpimiskohta [...], kuid see pole link. excerpt_more filter asendab mõttepunkti kohandatud stringiga, mis sisaldab HTML-i:

1function excerpt_readmore($more) {
2 return '... <a href="' . get_permalink($post->ID) . '" class="readmore">' . 'Read More' . '</a>';
3}
4add_filter('excerpt_more', 'excerpt_readmore');

Mida saad muuta:

  • Lingi tekst, asenda Read More oma versiooniga, näiteks Continue reading või Learn more
  • CSS klass, class atribuudis oleva readmore saab asendada enda omaga ja kujundada CSS-i kaudu (värv, suurus, vahed, allajoonimine)
  • Eraldaja, mõttepunkt koos tühikuga '... ' enne <a> silti saab eemaldada või asendada märgiga | või ,

Pärast salvestamist ava blogi avaleht või arhiiv, iga väljavõtte lõpus on klikitav link täispikkuses postitusele. See töötab ka RSS-is (enamik lugejaid kuvab HTML-linke korrektselt).

4. Luba väljavõtted WordPressi lehekülgedel

Leheküljed WordPressis ei toeta väljavõtteid vaikimisi. Postituse tüüp page pole registreeritud koos excerpt toega ja metaboks ei ilmu redaktorisse, isegi kui lülitad selle sisse jaotises „Ekraani seaded". Kuid mõnikord on seda vaja: maandumisleht alamlehtede eelvaadetega, kohandatud väljund WP_Query kaudu, teenuste lehed kaartidena.

Lahendus on üks funktsioon, mis lisab väljavõtte toe postituse tüübile page:

1function wploop_pages_excerpt() {
2 add_post_type_support('page', 'excerpt');
3}
4add_action('init', 'wploop_pages_excerpt');

Pärast faili functions.php salvestamist:

  • Mine ükskõik millise lehe redaktorisse
  • Klõpsa üleval „Screen Options" (kuva seaded)
  • Märgi linnuke kasti „Excerpt" (väljavõte) ette, nüüd on see seal
  • Keri lehte allapoole, väljavõtte väli on ilmunud

Kui kasutad kohandatud postitüüpi (CPT), asenda page oma CPT lühendiga, mehhanism on sama. CPT registreerimisel funktsiooni register_post_type() kaudu saad kohe määrata 'supports' => array(..., 'excerpt') ja vältida lisakoodi.

5. Katkendite haldamine Advanced Excerpt pistikprogrammiga

Ei taha koodiga jännata? Advanced Excerpt pistikprogramm annab halduspaneeli kaudu visuaalse kontrolli kõigi katkendite aspektide üle.

Advanced Excerpt plugina seadete leht WordPressi administraatoris

Pärast paigaldamist ja aktiveerimist (tasuta, WordPressi repositooriumist) ilmub menüüsse „Seaded" Advanced Excerpt leht järgmiste valikutega:

  • Katkendi pikkus, tähemärkides või sõnades. Tähemärgid on paigutuse juhtimiseks täpsemad, sõnad loetavuse jaoks
  • Ellips, sümbol või HTML-kood, mis katkendi lõpetab. Vaikimisi on &hellip; (ellips ). Saab asendada [...], noole, ikooniga või jätta tühjaks
  • Kärpimismeetod, tähemärkide kaupa (sõna võib poolelt kohalt katkeda) või lausete kaupa (alati terviklik lause, kuid katkend on määratud piirist pikem)
  • „Loe edasi" link, luba/keela, määra tekst, mähi kohandatud HTML-i
  • Ära näita käsitsi sisestatud katkendeid, kui lubatud, genereerib pistikprogramm katkendid alati automaatselt, isegi kui oled välja käsitsi täitnud
  • Eemalda katkendist lühikoodid, kindlasti hoia see lubatuna, et [contact-form-7] või [shortcode] ei jääks eelvaates välja paistma
  • Filter, vali, millist funktsiooni teema katkendite väljastamiseks kasutab: the_excerpt(), the_content() või mõlemat. Kui pole kindel, jäta mõlemad märkeruudud sisse
Täiendavad filtreerimisseaded Advanced Excerpt pluginas

Pistikprogramm kasutab samu excerpt_length ja excerpt_more konkse nagu näpunäidete 1-3 käsitsi kood, kuid pakendab need liidesesse. Arendaja dokumentatsioon GitHub Wikist kirjeldab filtreid kohandatud integreerimiseks.

  1. aasta seisuga on pistikprogramm aktiivne enam kui 80 000 saidil, kuid uuendatakse harva: viimane väljalase tuli 2024. aasta jaanuaris ja on testitud kuni WordPress 6.4-ni. Enne värskele WordPressi versioonile paigaldamist kontrolli ühilduvust lavastuskeskkonnas.

Enne korduma kippuvate küsimuste juurde liikumist lühike video katkenditega töötamisest WordPressis praktikas:

⁉️🤔 Korduma kippuvad küsimused

Kuidas erineb käsitsi sisestatud katkend <!--more--> sildist?

Katkend on eraldi väli, mida väljastatakse teema mallides the_excerpt() funktsiooni kaudu. <!--more--> silt sisestatakse postituse sisusse ja lõikab the_content() kindlast kohast. Katkendeid näidatakse postituste loendites ja RSS-is, more silt töötab ainult seal, kus kasutatakse the_content(). Lühikokkuvõtte jaoks arhiivides kasuta katkendeid, pika postituse kodulehel lõikamiseks piisab more sildist.

Miks katkendit ei kuvata, kuigi kirjutasin selle redaktoris?

Teema ei kutsu vajalikus mallis välja the_excerpt(). Kontrolli archive.php, category.php, home.php ja search.php malle. Kui seal on the_content(), ignoreeritakse käsitsi katkendeid. Asenda the_excerpt()-ga või kasuta tingimuslikku konstruktsiooni if (has_excerpt()) { the_excerpt(); } else { the_content(); }.

Kas ma saan näidata postipisipilti katkendi kõrval?

Jah, teema peaks tsüklis kutsuma the_post_thumbnail() enne the_excerpt(). Enamik kaasaegseid WordPressi teemasid teeb seda vaikimisi. Kui mitte, lisa pisipildi kutse malli enne katkendit. Kohandatud märgendi jaoks mähi mõlemad kutsed <div class="post-card"> sisse ja kujunda CSS-i abil.

Kuidas eemaldada katkendid ainult kodulehelt, jättes need arhiividesse?

Kasuta filtris tingimuslikku silti is_home(). Näiteks failis functions.php:

1 function disable_excerpt_on_home($excerpt) {
2 if (is_home()) {
3 return '';
4 }
5 return $excerpt;
6 }
7add_filter('get_the_excerpt', 'disable_excerpt_on_home');

Täpsemate seadistuste jaoks lehe tüübi, kategooria või postituse tüübi järgi kasuta 5. näpunäite Advanced Excerpt pistikprogrammi: selle seadetes on märkeruudud „Keela..." kodulehe, arhiivide, otsingu ja üksikute lehtede jaoks.

Mida katkenditega kohe teha

Rakendamise järjekord, lihtsast keerukani. Alusta 1. näpunäitest: üks funktsioon, üks number ja katkendi pikkus kogu saidil on juba kontrolli all. Seejärel lisa „Loe edasi" link (3. näpunäide), see on kriitilise tähtsusega klikitavuse jaoks kodulehel ja RSS-is. Kui pead blogi erineva formaadiga rubriikidega, kõrvaldab 2. näpunäide pikkuse kohta kategooria järgi dissonantsi uudiste ja pikkade lugude vahel.

Kasuta Advanced Excerpt pistikprogrammi (5. näpunäide), kui soovid koodi täielikult vältida või kui sinu teema kasutab mittestandardset sisu väljastamise viisi ning excerpt_length/excerpt_more filtrid ei rakendu. Muudel juhtudel on kood failist functions.php usaldusväärsem: vähem sõltuvusi, ei tekita koormust, töötab iga teemaga.

1