Ottenere l'excerpt e il titolo tramite uno specifico ID del post?

18 dic 2012, 08:32:18
Visualizzazioni: 20.7K
Voti: 1

Sto cercando di ottenere l'excerpt e il titolo di un post tramite uno specifico ID. Il mio ID del post è 6 e il mio codice è il seguente

<?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); ?>

Mostra il titolo del post con ID 6, ma l'excerpt sbagliato... Inoltre ho un codice per controllare la lunghezza dell'excerpt nel mio functions.php

// Modifica della lunghezza dell'excerpt
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.'">Leggi di più</a>';
    return $excerpt;
}

Ogni aiuto sarà apprezzato...

0
Tutte le risposte alla domanda 5
0

La tua funzione get_excerpt() utilizza la variabile global $post, che risulta fuori dallo scope all'interno della tua funzione.

// Modifica della lunghezza dell'excerpt
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.'">Continua a leggere</a>';
    return $excerpt;
}

Ciò significa che quando fai questo:

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

Stai tentando di ottenere il contenuto del post corrente nel Loop troncato in base all'ID del post di cui vuoi ottenere l'excerpt, ma $post sarebbe fuori dallo scope e quindi "non definito". Poi, assumendo che $post sia impostato,...

$excerpt = $post->post_excerpt;

... stai completamente sovrascrivendo quei dati di "excerpt" generati con i dati grezzi dell'excerpt del post corrente nel Loop.

E poi...

echo get_excerpt(190);

... stai recuperando nuovamente l'excerpt dal post corrente nel Loop e lo stai visualizzando.

Quello che stai facendo è sbagliato in diversi modi. Devo presumere che tu abbia copiato e incollato quel codice senza comprenderlo, il che è piuttosto pericoloso. Ti consiglio di evitarlo.

La funzione WordPress Core get_the_title() accetta un argomento ID, ma get_the_excerpt() non lo fa, quindi visto che hai bisogno di entrambi, la soluzione migliore è semplicemente recuperare l'oggetto 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); // per un excerpt creato manualmente

Per generare un excerpt dal contenuto del post, avresti bisogno di qualcosa come:

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

Che in realtà è solo una versione semplificata della funzione Core wp_trim_excerpt()

Puoi controllare la lunghezza dell'excerpt utilizzando il filtro excerpt_length. Come nell'esempio del Codex:

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
9 mar 2014 18:53:07
2

<?php echo get_excerpt(190); ?> questa parte è sbagliata. Stai stampando l'estratto da id = 190 devi semplicemente usare echo $excerpt. Inoltre non hai bisogno della riga <?php echo get_excerpt(190); ?>

Leggi attentamente le pagine del codex, troverai molti esempi utili per capire come funziona una funzione http://codex.wordpress.org/Function_Reference/get_post

18 dic 2012 08:53:20
Commenti

non funziona... <?php echo get_excerpt(190); ?> controlla l'excerpt...

Gopal Bhattacharjee Gopal Bhattacharjee
18 dic 2012 09:56:12

ho anche una lunghezza expert in function.php

Gopal Bhattacharjee Gopal Bhattacharjee
18 dic 2012 10:40:11
0

Sembra che tu abbia molte cose in corso...

Proverei quanto segue:

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

E userei il seguente codice per visualizzare l'estratto:

echo $excerpt;
31 ott 2013 06:37:29
1

Perché non stampi la variabile $excerpt? Penso che dovrebbe funzionare. Non fare questo:

<?php echo get_excerpt(190); ?>

fai questo:

<?php echo $excerpt; ?>
18 dic 2012 09:30:51
Commenti

estratti visibili ma nessun link "leggi di più"...

Gopal Bhattacharjee Gopal Bhattacharjee
18 dic 2012 14:11:59
0

Se vuoi ottenere l'estratto di un post specifico con ID 6, puoi semplicemente fare come segue:

<?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; ?>

Questo restituirà semplicemente il titolo e l'estratto del post con ID 6.

5 gen 2014 12:02:38