Usare wp_trim_excerpt per ottenere the_excerpt () fuori dal ciclo
-
-
Potrestiprovare a chiamarei filtri degliestratti ... `$myvar=apply_filters ('the_excerpt',$myvar);`You could try calling the excerpt filters... `$myvar = apply_filters( 'the_excerpt', $myvar );`
- 0
- 2011-01-15
- t31os
-
7 risposta
- voti
-
- 2012-03-22
Dal WP 3.3.0,
wp_trim_words()
è utile se seiin grado di ottenereil contenutoperil quale desiderigenerare unestratto.Spero che sia utile a qualcunoe cheeviti di creare latuafunzione di conteggio delleparole.Since WP 3.3.0,
wp_trim_words()
is helpful if you're able to get the content that you want to generate an excerpt for. Hope that's helpful to someone and it saves creating your own word counting function. -
- 2011-01-14
wp_trim_excerpt()
ha unameccanica unpo 'curiosa: segli vienepassato qualcosa,nonfanulla.Ecco la logica dibase allabase:
-
get_the_excerpt()
controlla l'estrattomanuale; -
wp_trim_excerpt()
interviene senon ci sonoestrattimanualie ne crea uno dal contenuto o dalteaser.
Entrambi sono strettamente legati a variabiliglobalie quindi Loop.
Al difuori del ciclo èmeglioprendereil codice da
wp_trim_excerpt()
e scrivere lapropriafunzione ditaglio.wp_trim_excerpt()
has a little curious mechanics - if anything is passed to it then it does nothing.Here is basic logic behind it:
get_the_excerpt()
checks for manual excerpt;wp_trim_excerpt()
chimes in if there is no manual excerpt and makes one from content or teaser.
Both are tightly tied to global variables and so Loop.
Outside the Loop you are better of taking code out of
wp_trim_excerpt()
and writing your own trim function. -
- 2011-01-21
Aggiorna:
Ecco un derivato di wp_trim_excerpt () che ho usato.Funzionaperfettamente.Derivato dalla versione di Wordpress 3.0.4
function my_excerpt($text, $excerpt) { if ($excerpt) return $excerpt; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
Update:
Here is a derivative of wp_trim_excerpt() which I used. Works perfectly. Derived from Wordpress version 3.0.4
function my_excerpt($text, $excerpt) { if ($excerpt) return $excerpt; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
-
Non ènecessariopubblicare unanuova risposta,puoi sempremodificare quella vecchiaperincluderenuoveinformazioni.Potresti,adesempio,copiareil collegamento al codice WP dallatuaprima rispostain questae quindieliminare latuaprima risposta.You don't have to post a new answer, you can always edit your old one to include new information. You could, for example, copy the link to the WP code from your first answer into this one and then delete your first answer.
- 0
- 2011-01-25
- Jan Fabry
-
Per copy/pasters làfuori: aggiungi $ raw_excerpt=$text;For copy/pasters out there: add $raw_excerpt = $text;
- 0
- 2015-04-11
- Svetoslav Marinov
-
- 2011-08-26
Ecco lamia opinione su un "trim_excerpt" cheprende l'oggettopost o un IDpost comeparametro.
Ovviamentebasato su cosa c'èin core. Non soperchéthis (eget_the_author ())non hannoequivalentinon di ciclo.
/** * Genera unestratto dal contenuto,senecessario. * * @paramint | object $post_or_idpuòessere l'ID delpost o lo stesso oggetto $post * @param string $excerpt_moreiltesto che viene applicato allafine dell'estratto se lotagliamo algoriticamente * @return stringa l'estratto snippato o l'estratto delmanuale seesiste */ funzione zg_trim_excerpt ($post_or_id,$excerpt_more='[...]') { if (is_object ($post_or_id)) $postObj=$post_or_id; altro $postObj=get_post ($post_or_id); $ raw_excerpt=$text=$postObj- >post_excerpt; if (''==$text) { $text=$postObj- >post_content; $text=strip_shortcodes ($text); $text=apply_filters ('the_content',$text); $text=str_replace (']] >',']] & amp;gt;',$text); $text=strip_tags ($text); $excerpt_length=apply_filters ('excerpt_length',55); //nonpresumere automaticamente che utilizzeremoil collegamento "leggitutto"globalefornito daltema //$excerpt_more=apply_filters ('excerpt_more',''. '[...]'); $parole=preg_split ("/[\n \ r \t] +/",$text,$excerpt_length + 1,PREG_SPLIT_NO_EMPTY); if (count ($ words) > $excerpt_length) { array_pop ($parole); $text=implode ('',$parole); $testo=$testo. $excerpt_more; } altro { $text=implode ('',$parole); } } return apply_filters ('wp_trim_excerpt',$text,$ raw_excerpt); } Here's my take on a "trim_excerpt" that takes the post object or a post ID as a parameter.
Obviously based on what's in core. Don't know why this (and get_the_author()) don't have non-loop equivalents.
/** * Generates an excerpt from the content, if needed. * * @param int|object $post_or_id can be the post ID, or the actual $post object itself * @param string $excerpt_more the text that is applied to the end of the excerpt if we algorithically snip it * @return string the snipped excerpt or the manual excerpt if it exists */ function zg_trim_excerpt($post_or_id, $excerpt_more = ' [...]') { if ( is_object( $post_or_id ) ) $postObj = $post_or_id; else $postObj = get_post($post_or_id); $raw_excerpt = $text = $postObj->post_excerpt; if ( '' == $text ) { $text = $postObj->post_content; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); // don't automatically assume we will be using the global "read more" link provided by the theme // $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
-
- 2011-01-21
+1 a Rast. Èmolto strano chenonesistaget_the_excerpt ($post-> ID),quando dovrebbeessere abbastanza ovvio che dovrebbe. Comunque,ecco wp_trim_excerpt ()nella versione wordpress 3.0.4:
http://core.trac. wordpress.org/browser/tags/3.0.4/wp-includes/formatting.php
function wp_trim_excerpt($text) { 1824 $raw_excerpt = $text; 1825 if ( '' == $text ) { 1826 $text = get_the_content(''); 1827 1828 $text = strip_shortcodes( $text ); 1829 1830 $text = apply_filters('the_content', $text); 1831 $text = str_replace(']]>', ']]>', $text); 1832 $text = strip_tags($text); 1833 $excerpt_length = apply_filters('excerpt_length', 55); 1834 $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); 1835 $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); 1836 if ( count($words) > $excerpt_length ) { 1837 array_pop($words); 1838 $text = implode(' ', $words); 1839 $text = $text . $excerpt_more; 1840 } else { 1841 $text = implode(' ', $words); 1842 } 1843 } 1844 return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); 1845 }
Puoi vedere alla riga 1826 che è collegato alla variabileglobale $posttramiteget_the_contents. E sì,non hoidea di cosa stesseropensando. Ma da qui,sostituisciget_the_content con $textneltuomy_excerpte dovrebbe comportarsiin modo simile.
+1 to Rast. It is very weird that there is no such thing as get_the_excerpt($post->ID), when it should be quite obvious that it should. Anyway, here is wp_trim_excerpt() in wordpress version 3.0.4:
http://core.trac.wordpress.org/browser/tags/3.0.4/wp-includes/formatting.php
function wp_trim_excerpt($text) { 1824 $raw_excerpt = $text; 1825 if ( '' == $text ) { 1826 $text = get_the_content(''); 1827 1828 $text = strip_shortcodes( $text ); 1829 1830 $text = apply_filters('the_content', $text); 1831 $text = str_replace(']]>', ']]>', $text); 1832 $text = strip_tags($text); 1833 $excerpt_length = apply_filters('excerpt_length', 55); 1834 $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); 1835 $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); 1836 if ( count($words) > $excerpt_length ) { 1837 array_pop($words); 1838 $text = implode(' ', $words); 1839 $text = $text . $excerpt_more; 1840 } else { 1841 $text = implode(' ', $words); 1842 } 1843 } 1844 return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); 1845 }
You can see on line 1826 that it is linked to the $post global variable via get_the_contents. And yes, I have no idea what were they thinking. But from here, replace the get_the_content with $text in your own my_excerpt, and it should behave in a similar fashion.
-
- 2011-04-17
Lafunzioneget_the_content () restituirebbeil contenuto completo se $more!=0. Deviimpostare la variabileglobale $more su 0per assicurarti che lafunzioneget_the_content () restituisca unestratto.
Funzione wp_trim_excerpt ()modificata:
function wp_trim_excerpt($text) { $raw_excerpt = $text; if ( '' == $text ) { global $more; $tmp = $more; $more = 0; $text = get_the_content(''); $more = $tmp; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
The get_the_content() function would return full content if $more != 0. You have to set global variable $more to 0 to make sure get_the_content() function return excerpt.
Modified wp_trim_excerpt() function:
function wp_trim_excerpt($text) { $raw_excerpt = $text; if ( '' == $text ) { global $more; $tmp = $more; $more = 0; $text = get_the_content(''); $more = $tmp; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
-
- 2016-09-15
Utilizzando le risposte degli altri sopra,ecco una rispostapiù semplice che sembrafunzionarebene:
global $post; $excerpt = apply_filters('get_the_excerpt', get_post_field('post_excerpt', $post->ID)); if ( $excerpt == '' ) { $excerpt = wp_trim_words( $post->post_content, 55 ); }
Lo sto usandonei tag
<meta>
in unafunzioneper definire le descrizioni di OpenGraph.Quindi aggiungo solo:<meta property="og:description" content="<?php echo esc_html( $excerpt ); ?>" />
Using others' answers above, here's a simpler answer that seems to work well:
global $post; $excerpt = apply_filters('get_the_excerpt', get_post_field('post_excerpt', $post->ID)); if ( $excerpt == '' ) { $excerpt = wp_trim_words( $post->post_content, 55 ); }
I'm using it in the
<meta>
tags in a function to define OpenGraph descriptions. So then I just add:<meta property="og:description" content="<?php echo esc_html( $excerpt ); ?>" />
-
Ei contenuti HTML?Come si occuperà deitag?l'estrattoelimina anchei tag htmle gli shortcode.e se leprimeparole dell'estratto contenessero un'immagine?Questoprobabilmenteinterromperàiltuo layout.What about HTML content? How will this deal with tags? the excerpt also strips html tags and shortcodes. what if the first words of the excerpt contain an image? That will probably break your layout.
- 0
- 2019-12-04
- brett
Sto creando untema chemostreràestratti sulla homepage dipotenzialmente dozzine dipost. Non hoestrattimanuali sututtii mieipost,quindi
$post->post_excerpt
è vuotopermoltipost. Nel casoin cuinon ci sia unestrattomanuale,vorrei utilizzare lafunzioneincorporataget_the_excerpt (),manon è disponibile al difuori del ciclo.Tracciando lafunzione,sembra che utilizzi wp_trim_excerpt da wp-includes/formatting.phpper creareestratti al volo. Lo chiamonelmio codice come
wp_trim_excerpt( $item->post_content )
,ma restituisce semplicemente l'intero contenuto. Stofacendo qualcosa di sbagliato?So dipoter creare lamiafunzioneper creare unestratto,mami piace utilizzare lefunzioniintegrate ovepossibile,mantenendoilmio codice compatibile con altripotenzialiplug-in/filtri.
http://adambrown.info/p/wp_hooks/hook/wp_trim_excerpt? version=3.0 & amp;file=wp-includes/formatting.php