web-dev-qa-db-fra.com

Obtenir un extrait et un titre après chaque ID?

J'essaie d'obtenir l'extrait et le titre d'un post par ID de post spécifique. Mon code postal est le 6 et mon code comme suit

<?php
    $id = 6;
    $post = get_post( $id );
    $excerpt = get_excerpt( $id);
    $excerpt = $post->post_excerpt;
?>
<h6><?php the_title(); ?></h6>

<?php echo get_excerpt(190); ?>

Il montre le titre de l'article n ° 6, mais le mauvais extrait ... De plus, j'ai aussi un code de contrôle de la longueur de l'extrait dans mon functions.php

// Changing excerpt length
function get_excerpt($count){
    $permalink = get_permalink($post->ID);
    $excerpt = get_the_content();
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $count);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = $excerpt.'... <a href="'.$permalink.'">Read More</a>';
    return $excerpt;
}

Toute aide serait appréciée...

1
Gopal Bhattacharjee

Votre fonction get_excerpt() utilise la variable global$post, qui est hors de portée dans votre fonction.

// Changing excerpt length
function get_excerpt($count){
    $permalink = get_permalink($post->ID);
    $excerpt = get_the_content();
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $count);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = $excerpt.'... <a href="'.$permalink.'">Read More</a>';
    return $excerpt;
}

Cela signifie que lorsque vous faites cela:

$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt( $id);

Vous essayez d’obtenir la publication du contenu pour le actuel publication dans la boucle tronquée en fonction du ID de la publication dont vous tentez d'obtenir l'extrait, mais $post serait hors de portée et donc "non défini". Ensuite, en supposant que $post ait été défini, ...

$excerpt = $post->post_excerpt;

... vous écrasez complètement les données "extraits" générées par les données brutes de la publication en cours dans la boucle.

Et alors...

echo get_excerpt(190);

... vous récupérez à nouveau l'extrait de la publication actuelle dans la boucle , et l'exécutez à nouveau.

Ce que vous faites est tout à fait faux de plusieurs manières. Je dois supposer que vous avez copié et collé ce code sans le comprendre, ce qui est très dangereux. Je vous mets en garde contre cela.

La fonction WordPress Core get_the_title() acceptera un argument ID, mais get_the_excerpt() acceptera non, alors comme vous avez besoin des deux, vous aurez intérêt à récupérer simplement l'objet post.

$id = 6;
$p = get_post($id);
// var_dump($p);
echo apply_filters('the_title',$p->post_title);
echo apply_filters('the_excerpt',$p->post_excerpt); // for a manually created excerpt

Pour générer un extrait du contenu de la publication, vous avez besoin de quelque chose comme:

$text = $p->post_content;
$text = strip_shortcodes( $text );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]&gt;', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;

Ce qui est vraiment juste une version simplifiée de la fonction de base wp_trim_excerpt()

Vous pouvez contrôler la longueur de l'extrait à l'aide du filtre excerpt_length . Selon l'exemple du Codex:

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
4
s_ha_dum

On dirait que beaucoup de choses se passent ...

J'essaierais ce qui suit:

$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt('190');

Et utilisez ce qui suit pour afficher l'extrait:

echo $excerpt;
1
Courtney Ivey

<?php echo get_excerpt(190); ?> cette partie est fausse. Vous imprimez un extrait de id = 190, utilisez simplement echo $excerpt. De plus, vous n'avez pas besoin de la ligne <?php echo get_excerpt(190); ?>

Lisez attentivement les pages de codex, vous y verrez de nombreux exemples utiles pour comprendre le fonctionnement d’une fonction http://codex.wordpress.org/Function_Reference/get_post

1
Sisir

Si vous souhaitez obtenir l'expert d'une publication spécifique portant l'ID 6, procédez comme suit:

<?php
$id = 6;
$posts = get_posts($id)
foreach($posts as $post):?>
<h6><?php echo $post->post_title;?></h6>
<p><?php echo $post->post_excerpt();?></p>
<?php endforeach; ?>

Cela donnera simplement le titre et l'extrait du message avec l'identifiant 6.

0
Yamu

Pourquoi ne pas echo $ variable extrait? Je pense que cela devrait fonctionner. Ne fais pas ça:

<?php echo get_excerpt(190); ?>

faire ceci:

<?php echo $excerpt; ?>
0
ukando