Obține excerpt și titlul după un ID specific al articolului?
Încerc să obțin excerpt-ul și titlul unui articol după un ID specific. ID-ul postării mele este 6 iar codul meu arată astfel
<?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); ?>
Acesta afișează titlul postării cu ID-ul 6, dar excerpt-ul greșit...
De asemenea, am un cod pentru controlul lungimii excerpt-ului în fișierul meu functions.php
// Modificarea lungimii excerpt-ului
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.'">Citește Mai Mult</a>';
return $excerpt;
}
Orice ajutor va fi apreciat...
Funcția ta get_excerpt()
folosește variabila global
$post
, care este în afara domeniului de aplicare în interiorul funcției tale.
// Modificarea lungimii fragmentului
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.'">Citește mai mult</a>';
return $excerpt;
}
Aceasta înseamnă că atunci când faci asta:
$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt( $id);
Încerci să obții conținutul postării curente din Buclă, trunchiat pe baza ID-ului postării al cărei fragment încerci să-l obții, dar $post
ar fi în afara domeniului de aplicare și, prin urmare, "nedefinit". Apoi, presupunând că $post
este setat,...
$excerpt = $post->post_excerpt;
... suprascrii complet acele date "fragment" generate cu datele brute ale fragmentului din postarea curentă din Buclă.
Și apoi...
echo get_excerpt(190);
... obții din nou fragmentul din postarea curentă din Buclă și îl afișezi.
Ceea ce faci este destul de greșit în mai multe moduri diferite. Trebuie să presupun că ai copiat și lipit acel cod fără să-l înțelegi, ceea ce este destul de periculos. Te-aș sfătui să eviți asta.
Funcția WordPress Core get_the_title()
acceptă un argument ID, dar get_the_excerpt()
nu, așa că, deoarece ai nevoie de ambele, cel mai bine este să obții pur și simplu obiectul postării.
$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); // pentru un fragment creat manual
Pentru a genera un fragment din conținutul postării, ai avea nevoie de ceva de genul:
$text = $p->post_content;
$text = strip_shortcodes( $text );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;
Ceea ce este de fapt doar o versiune simplificată a funcției Core wp_trim_excerpt()
Poți controla lungimea fragmentului folosind filtrul excerpt_length
. Conform exemplului din Codex:
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

<?php echo get_excerpt(190); ?>
această parte este greșită. Afișezi fragmentul din id = 190
- folosește simplu echo $excerpt
. De asemenea, nu ai nevoie de linia <?php echo get_excerpt(190); ?>
Citește cu atenție paginile din codex, vei găsi multe exemple utile acolo pentru a înțelege cum funcționează o funcție http://codex.wordpress.org/Function_Reference/get_post

Dacă dorești să obții detaliile unui articol specific cu ID-ul 6, poți proceda astfel:
<?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; ?>
Această metodă va returna titlul și rezumatul articolului cu ID-ul 6.
