Het gebruik van samenvattingen in WordPress lijkt arbitrair. Maar als je beter naar de lengte van de samenvatting en de gebruikte ‘Lees meer’ kijkt, merk je dat ook nu schijn weer bedriegt.
In het artikel Lees verder…» vervolgd ga ik in op een aantal praktische toepassingen van het onderstaande.
Samenvattingen volgens de codex
Laten we beginnen met een quote uit de WordPress codex, waarbij aangetekend dat de betreffende pagina als incompleet is gemarkeerd. Het geeft in ieder geval alvast enig inzicht.
The manual WordPress excerpt is often confused with the automatic excerpt or with the teaser (the part of a post that appears on the front page when you use the More tag). While both are related to the manual excerpt, they are different from it.
The relationship between the three is this: When a post has no manual excerpt and the post template uses the the_excerpt() template tag, WordPress generates an excerpt automatically by selecting the first 55 words of the post. When the post template uses the the_content() template tag, WordPress will look for the More tag and create a teaser from the content that precedes the More tag.
Het theme bepaalt
Voordat we ons storten op de werking van samenvattingen, is het belangrijk om vast te stellen dat je WordPress theme (in combinatie met plugins) bepaalt hoe en wat wordt weergegeven. En niet ieder theme toont samenvattingen – of enig ander onderdeel – op dezelfde manier.
In de administratie kun je zowel de samenvatting gebruiken als de ‘more tag’ (zie bijgaande afbeelding). Met onderstaande info kun je bepalen hoe beiden door je theme weergeven zouden moeten worden.
[clear]
the_excerpt()
Situatie | Resultaat | Lengte | Vervolg indicatie | HTML | Opmerkingen |
Er is een samenvatting | De tekst van de samenvatting wordt gebruikt | De gehele samenvatting wordt gebruikt, ongeacht de lengte | Er wordt geen Vervolg indicatie […] toegevoegd | Toegestaan | Een samenvatting wordt dus alltijd in zijn geheel overgenomen en krijgt nooit een Vervolg indicatie […] Shortcodes worden (dus) overgenomen alsof ze gewone tekst zijn. |
Er is geen samenvatting | – | – | – | – | – |
Er is een <!more> tag in de tekst aanwezig | De tekst voor de <!more> tag wordt gebruikt in archive views. Voor single en page views dient echter global $more ingesteld te worden om te voorkomen dat de tekst voorbij de <!more> tag gebruikt wordt tot een lengte van excerpt_length. | De tekst wordt afgekapt op ‘excerpt_length’ | Alleen als de tekst wordt afgekapt, wordt een Vervolg indicatie […] toegevoegd | HTML wordt verwijderd | Shortcodes worden geheel verwijderd. |
Er is geen <!more> tag in de tekst aanwezig | – | – | – | – | – |
Er is tekst aanwezig | De tekst wordt gebruikt | De tekst wordt afgekapt op ‘excerpt_length’ | Alleen als de tekst wordt afgekapt, wordt een Vervolg indicatie […] toegevoegd | HTML wordt verwijderd | Shortcodes worden geheel verwijderd. |
Er is geen tekst aanwezig | Er wordt niets getoond | – | – | – | – |
the_content()
Let op dat de link van deze Lees meer tekst voorzien is van een label waarmee de doelpagina wordt gepositioneerd op het punt waar de tekst na de <!more> tag begint. Dit is (tegenwoordig) geen wenselijk gedrag. Er zijn plugins beschikbaar om deze werking eenvoudig uit te schakelen.
Als parameter $strip_teaser = true wordt gebruikt op de pagina van het bericht zelf, wordt alleen de tekst na de <!more> tag getoond. Alle tekst voor die tag is de ’teaser’ die niet wordt getoond.
Situatie | Resultaat | Lengte | Vervolg indicatie | HTML | Opmerkingen |
Er is een <!more> tag in de tekst aanwezig | De tekst voor de <!more> tag wordt in zijn geheel gebruikt | De tekst wordt niet afgekapt | De Vervolg indicatie (meer…) wordt toegevoegd | Toegestaan | Shortcodes worden verwerkt en het resultaat getoond. |
Er is geen <!more> tag in de tekst aanwezig | – | – | – | – | – |
Er is tekst aanwezig | De gehele tekst wordt gebruikt | De tekst wordt niet afgekapt | Er wordt geen Vervolg indicatie toegevoegd | Toegestaan | Shortcodes worden verwerkt en het resultaat getoond. |
Er is geen tekst aanwezig | – | – | – | – | – |
Er is een samenvatting | De tekst van de samenvatting wordt gebruikt | De tekst wordt niet afgekapt | Er wordt geen Vervolg indicatie toegevoegd | – | Shortcodes worden verwerkt en het resultaat getoond. |
Er is geen samenvatting | Er wordt niets getoond | – | – | – | – |
Functies en filters
De belangrijkste functies en filters in deze context zijn de volgende:
- functies the_content() en get_the_content()
- functies the_excerpt() en get_the_excerpt()
- functie has_excerpt() kan gebruikt worden om te testen of een bericht een Samenvatting heeft. Maar let op: de functie is alleen True indien veld Samenvatting is gevuld. False in alle andere gevallen. De functie test hard op $post->post_excerpt dus filters als excerpt_more hebben geen invloed.
- filter excerpt_more – te gebruiken om de Lees meer tekst aan te passen – maar dat werkt alleen voor de situaties waarin een Samenvatting moet worden afgeleid van de Tekst
- filter excerpt_length – zie de opmerking voor filter excerpt_more hierboven
- filter the_excerpt – toegepast in functie the_excerpt(). Via dit filter wordt o.a. wat auto-opmaak (wptexturize, wpautop, etc) toegepast
- filter get_the_excerpt – toegepast in functie get_the_excerpt(). Standaard wordt functie wp_trim_excerpt() aan dit filter toegevoegd en hier wordt een groot deel van de formatering afgehandeld.
- functie wp_trim_excerpt() werkt in grote lijnen als volgt:
- als geen expliciete Samenvatting (i.e. post->excerpt) aanwezig is:
- $excerpt_length = apply_filters( ‘excerpt_length’, 55 ); — hier wordt de lengte in woorden ingesteld
- $excerpt_more = apply_filters( ‘excerpt_more’, ‘ ‘ . ‘[…]’ ); — hier wordt de Lees meer tekst gezet
- $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
- $text = wp_strip_all_tags( $text );
- apply_filters( ‘wp_trim_words’, $text, $num_words, $more, $original_text );
- apply_filters( ‘wp_trim_excerpt’, $text, $raw_excerpt );
- als geen expliciete Samenvatting (i.e. post->excerpt) aanwezig is:
Ander gebruik van Samenvattingen en hun functies
Houd er rekening mee dat de samenvatting functies ook op andere manieren wordt gebruikt. Dit kunnen ‘core’ toepassingen zijn, zoals het gebruik bij opbouw van het menu, of plugin toepassingen zijn zoals toevoeging van Open Graph data t.b.v. Facebook:
<meta property=”og:description” content=”…samenvatting…”>
Praktische toepassingen
Lees het vervolg op dit artikel voor enkele praktische toepassingen.