OBTENIR l'extrait par ID

29

Pourquoi ne pouvons-nous pas obtenir l'extrait par ID, comme pour le titre et la plupart des autres éléments.

par exemple. get_the_excerpt (ID). Je sais comment l'utiliser avec la fonction $ post- > post_excerpt, mais cela ne renvoie pas une partie du contenu si aucun extrait n'a été saisi - rien ne retourne.

Donc, ce que j'essaie de faire, c’est d’obtenir l’extrait par ID s’il ya un extrait, et s’il n’ya pas d’extrait portant cet ID mais un contenu, pour obtenir du contenu à la place.

Comment ferait-on cela.

Toutes les idées,

Merveilleux ...

MODIFIER -

Code source de boucle tel que demandé.

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>
    
posée Robin I Knight 19.03.2011 - 18:34
la source

11 réponses

19

Bonjour @Robin I. Knight:

Je considère get_the_excerpt() comme une fonction de la conception héritée. Au fur et à mesure que l'utilisation de WordPress a augmenté, de nombreux cas d'utilisation récents ne lui permettent pas de s'adapter, mais les nouvelles fonctions permettant d'obtenir des données différentes ne le sont pas. Un exemple en est l’utilisation désormais fréquente d’un tableau $args d’options de fonctions.

Mais il est facile de remédier à vos besoins. Voici une fonction alternative que vous pouvez utiliser et que vous pouvez insérer n'importe où dans le fichier functions.php de votre thè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;
}

Je ne l’ai pas testé, mais je suis presque sûr que j’ai bien compris. Si cela ne répond pas à vos besoins, veuillez élaborer et peut-être que je pourrais faire d'autres suggestions.

    
réponse donnée MikeSchinkel 19.03.2011 - 19:33
la source
15

La mécanique de l’extrait est extrêmement déroutante. Ce n'est pas une réponse précise à votre question, mais en général, si vous devez créer des balises de modèle, spécifiques à Loop, utilisez le tableau renvoyé par get_posts() , vous pouvez émuler Loop comme ceci:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();
    
réponse donnée Rarst 20.03.2011 - 15:12
la source
8

Il existe une nouvelle fonction depuis la version 3.3.0: wp_trim_words

.

Je l'utilise en dehors de la boucle 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 } } ?>

Cela ne doit pas être confondu avec wp_trim_excerpt qui ne fonctionne apparemment que dans la boucle, car elle appelle the_content () en interne. .

    
réponse donnée lkraav 14.01.2012 - 23:43
la source
6

Juste pour ajouter à la réponse de Mike Schinkel, qui pour une raison quelconque ne fonctionnerait pas pour moi. Je devais ajouter la ligne setup_postdata pour que cela fonctionne.

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 utilisez ceci en dehors de la boucle, cela ne devrait pas interférer avec les autres setup_postdata en cours.

Cheers

    
réponse donnée danbrown 30.08.2013 - 11:57
la source
2

S'appuyant sur la réponse de @ Maxime, cela fonctionnerait-il?

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;

Cela me semble assez simple, mais je me demande si quelque chose me manque.

    
réponse donnée Dominic P 02.05.2013 - 23:53
la source
1

Si ALL vos publications portent la balise <!--more--> , vous pouvez utiliser les éléments suivants avec votre code ci-dessus:

$sjc_excerpt = explode( '<!--more-->', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );

Bien sûr, si vous avez des publications qui ne portent pas le tag <!--more--> , elles seront affichées dans leur intégralité. Cela fonctionne dans ma situation, mais pas pour tous ...

    
réponse donnée Stephen Cronin 11.07.2011 - 15:01
la source
1

Je considère get_the_excerpt() comme une fonction de la conception héritée. Au fur et à mesure que l'utilisation de WordPress a augmenté, de nombreux cas d'utilisation récents ne lui permettent pas de s'adapter, mais les nouvelles fonctions permettant d'obtenir des données différentes ne le sont pas. Un exemple en est l’utilisation désormais fréquente d’un tableau $args d’options de fonctions.

Mais il est facile de remédier à vos besoins. Voici une fonction alternative que vous pouvez utiliser et que vous pouvez insérer n'importe où dans le fichier functions.php de votre thè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;
}

Juste pour ajouter à la réponse de Mike Schinkel, qui pour une raison quelconque ne fonctionnerait pas pour moi. Je devais ajouter la ligne setup_postdata pour que cela fonctionne.

    
réponse donnée Jude 19.04.2016 - 14:51
la source
0

Cela a fonctionné pour moi:

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
    
réponse donnée Rijo K P 26.09.2017 - 12:35
la source
0

À partir de WP 4.5.0, possibilité d'utiliser l'identifiant de poste en tant que paramètre. get_the_excerpt( $post->ID )

Source: enlace

    
réponse donnée Jorge Cordero 07.09.2018 - 20:42
la source
0

C’est un modèle à deux lignes que j’utilise beaucoup en utilisant wp_trim_words . J'ai constamment besoin de l'abréviation et je lis plus de fonctionnalités en dehors de la boucle. Quelqu'un d'autre peut trouver cela utile. C'est donc ce que j'utilisais pour:

  1. Obtenir l'extrait par ID POST
  2. Obtenir le contenu du message Si aucun extrait n'a été défini,
  3. Définissez la longueur de mot de l'extrait
  4. Choisissez le contenu pour le lire plus (lien / texte)

Je mets cela en ligne, directement dans le modèle personnalisé que je modifie.

    //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>" );

Décomposer

1.Le contenu de l'extrait

Récupère l'extrait par identifiant de publication mais récupère le contenu de la publication si aucun extrait n'a été défini.

J'utilise le raccourci If / Else PHP .

    $dapost = get_post(POST_ID);    
    apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content

2. Longueur du mot

Définissez le nombre de mots de l'extrait sur 20

.
    "20"

3. Choisissez le contenu ReadMore (lien / texte)

   "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"

J'ai utilisé $dapost->guid pour obtenir l'URL, car je n'avais pas besoin d'URL conviviales et je voulais éviter un autre appel à la base de données. Vous pouvez toujours utiliser get_the_permalink.

Voir wp_trim_words dans la documentation Wordpress.

    
réponse donnée Brev Tiw 08.06.2016 - 06:31
la source
-2

C'est plus rapide:

global $post;
return get_post($post_id)->post_excerpt;
    
réponse donnée Maxime Kieffer 12.11.2012 - 13:13
la source

Lire d'autres questions sur les étiquettes