web-dev-qa-db-fra.com

OBTENIR l'extrait par ID

Pourquoi est-ce qu'on ne peut pas obtenir l'extrait par ID comme avec 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 retourne pas une partie du contenu si aucun extrait n'a été entré, il ne retourne rien.

Donc, ce que j'essaie de faire, c'est d'extraire l'extrait par ID s'il y en a un, et s'il n'y a pas d'extrait avec cet ID mais qu'il y a du contenu, pour obtenir du contenu à la place.

Comment ferait-on cela.

Des 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;?>
31
Robin I Knight

Bonjour @Robin I. Knight:

Je considère get_the_excerpt() comme une fonction du design hérité. Au fur et à mesure que l'utilisation de WordPress s'est développée, de nombreux cas d'utilisation plus récents ne sont pas adaptés, mais les nouvelles fonctions permettant d'obtenir des données différentes ne le sont pas. Un exemple 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 sûr d'avoir bien compris. Si cela ne répond pas à vos besoins, veuillez élaborer et peut-être que je pourrais faire d'autres suggestions.

20
MikeSchinkel

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 retourné par get_posts(), vous pouvez émuler Loop comme ceci:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();
16
Rarst

Il y a 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 il appelle the_content () en interne.

8
lkraav

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.

À votre santé

6
danbrown

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.

2
Dominic P

SiALLvos publications ont 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 n’ont pas la balise <!--more-->, elles seront affichées dans leur intégralité. Fonctionne dans ma situation, mais pas pour tous ...

1
Stephen Cronin

Je considère get_the_excerpt() comme une fonction du design hérité. Au fur et à mesure que l'utilisation de WordPress s'est développée, de nombreux cas d'utilisation plus récents ne sont pas adaptés, mais les nouvelles fonctions permettant d'obtenir des données différentes ne le sont pas. Un exemple 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.

1
Jude

De WP 4.5.0 est possible, utilisez l'ID de poste en tant que paramètre get_the_excerpt( $post->ID )

Source: https://developer.wordpress.org/reference/functions/get_the_excerpt/

0
Jorge Cordero

Cela a fonctionné pour moi:

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
0
Rijo K P

C’est un peu deux lignes que j’utilise beaucoup en utilisantwp_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'utilise pour:

  1. Obtenir l'extrait par POST ID
  2. Obtenir le contenu de la publication si aucun extrait n'a été défini,
  3. Définir la longueur de mot de l'extrait
  4. Choisir le contenu pour le lire plus (lien/texte)

Je mets cela en ligne, directement dans le modèle personnalisé que je suis en train d’éditer.

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

Panne

1.Le contenu de l'extrait

Obtenir l'extrait par ID de poste, mais obtenir le contenu de l'envoi si aucun extrait n'a été défini.

J'utilise If/Else PHP en abrégé}.

    $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.

Voirwp_trim_wordsdans la documentation Wordpress.

0
Brev Tiw