OBTENIR l'extrait par ID
-
-
quelestexactement «unepartie» du contenu?what exactly is "some" of the content?
- 0
- 2011-03-19
- kaiser
-
Lafonction d'extrait dans wordpress renvoie l'extrait d'unmessage.Si l'articlene contientpas d'extrait,il renvoie un certainnombre de caractères du contenu suivi de '...' ou 'readmore' outout ce que lemodèlefournitThe excerpt function in wordpress returns the excerpt of a post. If the post does not have an excerpt it returns a certain number of characters of the content followed by '...' or 'read more' or whatever the template provides
- 0
- 2011-03-19
- Robin I Knight
-
Nepas être un PITAmais les règles de la communautéinterdisent les signatureset lesfermetures standard.Afin de respecter les règleset d'éviter que [Jeff Atwood] (http://stackexchange.com/about/management) vousenvoie unmessage sévère après avoir éditétoutes vos questions,veuillez cesser d'utiliser * "Marvelous" * comme clôture.* (Et s'il vousplaîtne tirezpas sur lemessager) *Not to be a PITA but community rules disallow signatures and standard closings. So as to abide by the rules and avoid having [Jeff Atwood](http://stackexchange.com/about/management) send you a stern message after editing all your questions, please stop using *"Marvellous"* as a closing. *(And please don't shoot the messenger)*
- 1
- 2011-03-19
- MikeSchinkel
-
10 réponses
- votes
-
- 2011-03-19
Bonjour @Robin I. Knight:
Je considère
get_the_excerpt()
comme unefonction avec un design hérité.Àmesure que l'utilisation de WordPress a augmenté,ilexiste denombreux cas d'utilisationplus récents où celane convientpas,mais où lesnouvellesfonctionspermettant d'obtenir des données différentes lefont.Unexempleest l'utilisation désormaisfréquente d'untableau$args
d'options defonction.Maisilestfacile de répondre à vosbesoins.Voici unefonction alternative que vouspouvez utiliser que vouspouvezmettren'importe où dans lefichier
functions.php
de votrethème:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Jene l'aipastesté,maisje suispresque sûr de l'avoirbien compris.Si celane répondpas à vosbesoins,veuillezpréciseret jepourraipeut-êtrefaire d'autres suggestions.
Hi @Robin I. Knight:
I view
get_the_excerpt()
as a function with legacy design. As WordPress usage has grown there are many newer use-cases where it doesn't fit but where the newer functions for getting different data do. One example is the now frequent use of an$args
array of function options.But it's easy to fix for your needs. Here's an alternative function you can use which you can put anywhere in your theme's
functions.php
file:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
I've not tested it but am pretty sure I got it right. If this doesn't meet your needs please elaborate and maybe I can make other suggestions.
-
Çamarche.Sorte de.Des résultatstrès étranges.Il remplit définitivement safonctionmais les résultats sont étranges.Je l'utiliseen conjonction avec GET_Postset pour une raison quelconque,les 2premiersmessages sonttoujours lesmêmes.Voici un lienet vous verrez ce queje veux dire.Regardez les 4poteaux sur le côté droit.http://www.divethegap.com/update/community/feedback/2010/06/steve-riches/It works. Sort of. Very odd results. It is definitely performing its function but the results are odd. I am using it in conjunction with GET_Posts and for some reason the top 2 get posts are always the same. Here is a link and you will see what I mean. Look at the 4 posts on the right hand side. http://www.divethegap.com/update/community/feedback/2010/06/steve-riches/
- 0
- 2011-03-19
- Robin I Knight
-
@Robin I Knight: Veuillezpublier votre code source deboucle comme unemise àjour de votre question;ilesttrès difficile de déboguer du code sans voir le code.C'est aussipeut-être unplugin qui cause leproblème;essayez de les désactiver unpar un.@Robin I Knight: Please post your loop source code as an update to your question; it's very hard to debug code without seeing code. It's also possibly a plugin that is causing the problem; try disabling them one at a time.
- 0
- 2011-03-19
- MikeSchinkel
-
Code source de laboucleen question ci-dessus ^^Loop source code in question above ^^
- 0
- 2011-03-19
- Robin I Knight
-
BTWj'ai changé lenom de lafonctionen get_the_excerpt_id ($post_id)BTW I changed the name of the function to get_the_excerpt_id($post_id)
- 0
- 2011-03-20
- Robin I Knight
-
@Robin I Knight - Jene vois rien dans votreboucle,mais vouspouvezessayer d'appeler `setup_postdata ($post)` au début de votreboucle,comme le suggère @Rarst.Si celane fonctionnepas,ilpeut s'agir d'unplugin que vous devez désactiver;avez-vousessayé ça?Et vousne voulezprobablementpas l'appeler `get_the_excerpt_id ()` car WordPresspourrait ajouter cettefonction à l'aveniret casser votre site.Et vouspourriezprobablement vouspasser de lafonction dans votreboucleen utilisant `foreach ($ stories as $ story):global $post;$post=$ story; `à laplace.@Robin I Knight - I don't see anything in your loop, but you might try calling `setup_postdata($post)` at the beginning of your loop, as @Rarst suggests. If that doesn't work it might be a plugin you need to disable; have you tried that? And you probably don't want to call it `get_the_excerpt_id()` because WordPress could add that function in the future and break your site. And you could probably do without the function in your loop by using `foreach($stories as $story): global $post; $post = $story;` instead.
- 0
- 2011-03-20
- MikeSchinkel
-
- 2011-03-20
Lesmécanismes de l'extrait sontextrêmement déroutants.Cen'estpas une réponseprécise à votre questionmaisen général si vous avezbesoin defaire desbalisestemplate,spécifiques à Loop,travailler avec untableau retournépar
get_posts()
vouspouvez émuler Loop comme ceci:$stories = get_posts(); foreach ($stories as $post) { setup_postdata($post); // stuff } wp_reset_postdata();
The mechanics of excerpt are extremely confusing. It is not precise answer to your question but in general if you need to make template tags, specific to Loop, work with array returned by
get_posts()
you can emulate Loop like this:$stories = get_posts(); foreach ($stories as $post) { setup_postdata($post); // stuff } wp_reset_postdata();
-
qu'enest-il de wp_reset_query ();?what about wp_reset_query(); ?
- 0
- 2012-01-27
- cwd
-
@cwd si seulement la requêteglobale `setup_postdata ()`n'estpas affectéeet seules les données depublication doivent être réinitialisées.@cwd if only using `setup_postdata()` global query is not affected and only post data needs to be reset.
- 1
- 2012-01-27
- Rarst
-
Cette solutionest un alliagepluspropre que de stocker leposte dans une autre varet denécessiter un autrepostejustepour le rendreglobal.+1This solution is allot cleaner than storing the post in another var and requering another post just to get it global. +1
- 0
- 2013-04-10
- Barry Kooij
-
Merci @Rarst quim'a aidé.Ajout de setup_postdata ($post);résolumesproblèmesThanks @Rarst that helped me out. Adding setup_postdata($post); resolved my issues
- 0
- 2014-11-14
- Simon
-
- 2012-01-14
Il y a unenouvellefonction depuis la version 3.3.0: wp_trim_words
Je l'utiliseen dehors de laboucle comme suit:
<?php if ( $post_id ) { $post = get_post( $post_id ); if ( $post ) { ?> <h2><?php echo $post->post_title; ?></h2> <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p> <p><strong>This article can only be read by subscribers.</strong></p> <?php } } ?>
Celane doitpas être confondu avec wp_trim_excerpt quine fonctionne apparemment que dans laboucle,caril appellethe_content ()en interne.
There is a new function since 3.3.0: wp_trim_words
I'm using it outside the loop as follows:
<?php if ( $post_id ) { $post = get_post( $post_id ); if ( $post ) { ?> <h2><?php echo $post->post_title; ?></h2> <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p> <p><strong>This article can only be read by subscribers.</strong></p> <?php } } ?>
This is not to be confused with wp_trim_excerpt that apparently only works within the loop, since it calls the_content() internally.
-
- 2013-08-30
Justepour ajouter à la réponse de MikeSchinkel,quipour une raison quelconquene fonctionneraitpaspourmoi.J'ai dû ajouter la ligne setup_postdatapour que celafonctionne.
function get_the_excerpt( $post_id ){ global $post; $save_post = $post; $post = get_post($post_id); setup_postdata( $post ); // hello $output = get_the_excerpt(); $post = $save_post; return $output;
}
Je suppose que si vous l'utilisezen dehors de laboucle,celane devraitpasinterférer avec d'autres setup_postdataen cours.
Acclamations
Just to add to MikeSchinkel's answer, which for some reason wouldn't work for me. I had to add the setup_postdata line to make it work.
function get_the_excerpt( $post_id ){ global $post; $save_post = $post; $post = get_post($post_id); setup_postdata( $post ); // hello $output = get_the_excerpt(); $post = $save_post; return $output;
}
I'm assuming if you're using this outside the loop then it shouldn't interfere with other setup_postdata going on.
Cheers
-
J'aiessayé la réponse de MikeSchinkelet celan'apasfonctionnépourmoi.La configuration des données depublication afait l'affaire.Dansmon cas sans le 'setup_postdata',lafonction a renvoyé letitre +extrait dumessageparent.I tried MikeSchinkel's answer and it did not work for me. Setting up post data did the trick. In my case without the 'setup_postdata' the function returned the title+excerpt of the parent post.
- 0
- 2016-09-25
- turzifer
-
- 2013-05-02
En vous appuyant sur la réponse de @ Maxime,celafonctionnerait-il?
$post = get_post( $id ); $excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
Celame semble assez simple,maisje me demande si quelque choseme manque.
Building on @Maxime's answer, would this work?
$post = get_post( $id ); $excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
It seems straight forward enough to me, but I'm wondering if I'm missing something.
-
- 2011-07-11
Si TOUS vosmessages comportent labalise
<!--more-->
,vouspouvez utiliser ce qui suit avec votre code ci-dessus:$sjc_excerpt = explode( '<!--more-->', $post->post_content); echo wpautop( $sjc_excerpt[0] );
Bien sûr,si vous avez desmessages quine portentpas labalise
<!--more-->
,ils seront affichés dans leurintégralité.Fonctionne dansma situation,maispaspourtous ...If ALL your posts have the
<!--more-->
tag, then you can use the following with your code above:$sjc_excerpt = explode( '<!--more-->', $post->post_content); echo wpautop( $sjc_excerpt[0] );
Of course if you have any posts that don't have the
<!--more-->
tag, they'll be shown in their entirety. Works in my situation, but not for all... -
- 2016-04-19
Je considère
get_the_excerpt()
comme unefonction avec un design hérité.Àmesure que l'utilisation de WordPress a augmenté,ilexiste denombreux cas d'utilisationplus récents où celane convientpas,mais où lesnouvellesfonctionspermettant d'obtenir des données différentes lefont.Unexempleest l'utilisation désormaisfréquente d'untableau$args
d'options defonction.Maisilestfacile de répondre à vosbesoins.Voici unefonction alternative que vouspouvez utiliser que vouspouvezmettren'importe où dans lefichier
functions.php
de votrethème:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Justepour ajouter à la réponse de MikeSchinkel,quipour une raison quelconquene fonctionneraitpaspourmoi.J'ai dû ajouter la ligne setup_postdatapour que celafonctionne.
I view
get_the_excerpt()
as a function with legacy design. As WordPress usage has grown there are many newer use-cases where it doesn't fit but where the newer functions for getting different data do. One example is the now frequent use of an$args
array of function options.But it's easy to fix for your needs. Here's an alternative function you can use which you can put anywhere in your theme's
functions.php
file:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Just to add to MikeSchinkel's answer, which for some reason wouldn't work for me. I had to add the setup_postdata line to make it work.
-
Cela a-t-ilbesoin de `wp_reset_postdata ()`pourfonctionner à l'intérieur de laboucle?Does this need `wp_reset_post_data()` to work inside the loop?
- 0
- 2017-07-10
- Chris Pink
-
Apparemment (après avoirfait letour de cettemaisonen particulier),celafaitmaintenantpartie dunoyau.Apparently (after going around this particular house) it's now part of core.
- 0
- 2017-07-10
- Chris Pink
-
- 2016-06-08
C'est unpetit deux lignes quej'utilisebeaucoupen utilisant wp_trim_words . Jeme retrouve constamment à avoirbesoin de l'abréviationet de lireplus defonctionnalitésen dehors de laboucle. Quelqu'un d'autrepeuttrouver cela utile. Voici donc ce quej'utilisepour:
- Obtenir l'extraitpar ID POST
- Obtenir le contenu de l'article Si aucunextraitn'a été défini,
- Définir la longueur dumot de l'extrait
- Choisissez le contenupouren savoirplus (lien/texte)
Jemets celaen ligne,directement dans lemodèlepersonnalisé queje suisen train demodifier.
//Get Post Object $dapost = get_post(POST_ID); //Get the Execerpt $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );
Ventilation
1.Le contenu de l'extrait
Obtenez l'extraitpar ID depublication,mais obtenez le contenu de l'article si aucunextraitn'a été défini.
J'utilise le raccourci PHP If/Else .
$dapost = get_post(POST_ID); apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content
2. Longueur dumot
Définissez la quantité demots dans l'extrait sur 20^
"20"
3. Choisissez ReadMore Content (Link/Text)
"<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
J'ai utilisé
$dapost->guid
pour obtenir l'URL,carje n'avaispasbesoin d'URL convivialeset je voulais éviter un autre appel à labase de données. Vouspouveztoujours utiliserget_the_permalink.Voir wp_trim_words dans la documentation Wordpress.
This is a little two-liner I use a lot utilizing wp_trim_words. I constantly finding myself needing the abbreviation and read more functionalities outside of the loop. Some one else may find this useful. So this is what I use to:
- Get the Excerpt by POST ID
- Get Post Content If no Excerpt has been set,
- Set the Word length of the Excerpt
- Choose the Content for the Read More(Link/Text)
I put this inline, directly in the custom template I am editing.
//Get Post Object $dapost = get_post(POST_ID); //Get the Execerpt $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );
Break Down
1.The excerpt content
Get the Excerpt by Post ID but, get Post Content If no Excerpt has been set.
I am using If/Else PHP shorthand.
$dapost = get_post(POST_ID); apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content
2. Word length
Set the amount of words in the Excerpt to 20
"20"
3. Choose ReadMore Content(Link/Text)
"<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
I used
$dapost->guid
to get the URL, because I did not need friendly URLs, and wanted to avoid another call to the DB. You could always use get_the_permalink.See wp_trim_words in the Wordpress Documentation.
-
-
- 2018-09-07
Depuis WP 4.5.0,ilestpossible d'utiliser l'ID depublication commeparamètre
get_the_excerpt( $post->ID )
Source: https://developer.wordpress.org/reference/functions/get_the_excerpt/
From WP 4.5.0 is possible use the post ID as parameter
get_the_excerpt( $post->ID )
Source:https://developer.wordpress.org/reference/functions/get_the_excerpt/
Pourquoi onne peutpas obtenir l'extraitpar ID comme avec letitreet laplupart des autres éléments.
parexemple.get_the_excerpt (ID). Je sais comment l'utiliser avec lafonction $post->post_excerptmais celane renvoiepas unepartie du contenu si aucunextraitn'a été saisi,ilne retourne simplement rien.
Donc,ce quej'essaie defaireest d'obtenir l'extraitpar ID s'il y a unextrait,et s'iln'y apas d'extrait avec cet IDmais qu'il y a du contenu,pour obtenir unepartie du contenu à laplace.
Commentferait-on cela?
Toutes lesidées,
Merveilleux ...
MODIFIER -
Boucle le code source comme demandé.