Usando wp_trim_excerpt para obter the_excerpt () fora do loop
-
-
Vocêpoderiatentar chamar osfiltros detrecho ... `$myvar=aplicação_filters ('the_excerpt',$myvar);`You could try calling the excerpt filters... `$myvar = apply_filters( 'the_excerpt', $myvar );`
- 0
- 2011-01-15
- t31os
-
7 respostas
- votos
-
- 2012-03-22
Como o WP 3.3.0,
wp_trim_words()
é útil se você é capaz de obter o conteúdo que desejagerar umtrechopara.Espero que seja útilpara alguéme economiza criando suaprópriafunção de contagem depalavras.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()
tem umpouco demecânica curiosa - se alguma coisa épassadaparaele,entãonãofaznada.Aquiestá a lógicabásicaportrás disso:
-
get_the_excerpt()
verificaçõesparatrechomanual; -
wp_trim_excerpt()
sinaisem senão houvertrechomanuale faz um de conteúdo outeaser.
ambos estãofirmemente ligados a variáveisglobaise tão loop.
Fora do loop você émelhor detirar código do
wp_trim_excerpt()
e escrevendo suaprópriafunção de acabamento.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
Atualização:
Aquiestá uma derivada de WP_TRIM_EXCERTT () queeu usei.Funcionaperfeitamente.Derivado da versão do 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); }
-
Vocênãoprecisapostar umanova resposta,você semprepodeeditar o seu antigoparaincluirnovasinformações.Vocêpoderia,porexemplo,copiar o linkpara o código WP da suaprimeira respostaparaestee,em seguida,excluir suaprimeira resposta.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
-
Para cópia/pastorespor aí: Adicionar $ RAW_EXCERTT=$ Texto;For copy/pasters out there: add $raw_excerpt = $text;
- 0
- 2015-04-11
- Svetoslav Marinov
-
- 2011-08-26
Aquiestá aminha opinião sobre um "trim_excerpt" que leva o objeto Post ou um ID POST comoparâmetro.
Obviamente combaseno queestánonúcleo. Não seipor queisso (eget_the_author ())nãotem equivalentes denão-loop.
/** * 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); }
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
+1para rast. Émuitoestranho quenãoexistetal coisa comoget_the_excert ($post->id),quando deve serbastante óbvio que deveria. De qualquerforma,aqui é wp_trim_excerpt ()no WordPress versão 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 }
Vocêpode verna linha 1826 queestá vinculado à variávelglobal de $post viaget_the_contents. E sim,eunãotenhoideia do queelesestavampensando. Mas daqui,substitua oget_the_contentpor $textem seuprópriomy_excert,e deve se comportar deforma semelhante.
+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
Afunção Get_the_Content () retornaria conteúdo completo se $mais!=0. Vocêtem que definir uma variávelglobal $maispara 0para certificar com certezaget_the_content ()trecho de retorno defunção.
função wp_trim_excerpt ()modificada:
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
Usando as respostas dos outros acima,aquiestá uma respostamais simples queparecefuncionarbem:
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 ); }
Estou usando-ono
<meta>
em umafunçãopara definir as descrições do OpenGraph.Entãoeu apenas adiciono:<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 ); ?>" />
-
E quanto ao conteúdo HTML?Comoisso vai lidar comtags?Otrechotambémtiroutags htmle códigos de acesso.E se asprimeiraspalavras doexcerto contiverem umaimagem?Issoprovavelmente vai quebrar seu 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
Euestou construindo umtema que vaimostrartrechosnapáginainicialparapotencialmente dezenas deposts. Eunãotenhotrechosmanuaisem todas asminhaspostagens,então
$post->post_excerpt
está vazioparamuitosposts. No caso denão haver umtrechomanual,gostaria de usar afunção Get_the_excerpt ()integrada,masnãoestá disponívelfora do loop.Rastreando afunção,parece que usa WP_TRIM_EXCERTT de WP-Inclui/Formatting.phppara criartrechosnamosca. Euestou ligandopara omeu código como
wp_trim_excerpt( $item->post_content )
,mas é simplesmente retornando o conteúdo completo. Estoufazendo algoerrado?Eu sei queposso criarminhaprópriafunçãopara criar umtrecho,maseugosto de usarfunçõesinternas sempre quepossível,mantendomeu código compatível com outrospotenciaisplugins/filtros.
http://adambrown.info/p/wp_hooks/hook/wp_trim_excerpt? Version=3.0 & amp;file=wp-inclui/formatting.php