¿Cómo obtener el extracto y título de una entrada por su ID específico?

18 dic 2012, 08:32:18
Vistas: 20.7K
Votos: 1

Estoy tratando de obtener el extracto y título de una entrada por su ID específico. Mi ID de entrada es 6 y mi código es el siguiente

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

Muestra el título de la entrada con ID 6, pero el extracto incorrecto... También tengo un código de control de longitud del extracto en mi functions.php

// Cambiar la longitud del extracto
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.'">Leer Más</a>';
    return $excerpt;
}

Cualquier ayuda será apreciada...

0
Todas las respuestas a la pregunta 5
0

Tu función get_excerpt() utiliza la variable global $post, que está fuera de alcance dentro de tu función.

// Cambiando la longitud del extracto
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.'">Leer más</a>';
    return $excerpt;
}

Esto significa que cuando haces esto:

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

Estás intentando obtener el contenido de la publicación actual en el Loop truncado basado en el ID de la publicación cuyo extracto intentas obtener, pero $post estaría fuera de alcance y por lo tanto "indefinido". Luego, asumiendo que $post estuviera configurado,...

$excerpt = $post->post_excerpt;

... estás sobrescribiendo completamente esos datos de "extracto" generados con los datos de extracto sin procesar de la publicación actual en el Loop.

Y luego...

echo get_excerpt(190);

... obtienes el extracto de la publicación actual en el Loop nuevamente, y lo muestras.

Lo que estás haciendo es bastante incorrecto de varias maneras diferentes. Tengo que asumir que has copiado y pegado ese código sin entenderlo, lo cual es bastante peligroso. Te aconsejaría que no lo hagas.

La función principal de WordPress get_the_title() aceptará un argumento de ID, pero get_the_excerpt() no lo hará, por lo que, dado que necesitas ambos, lo mejor será simplemente recuperar el objeto de la publicación.

$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); // para un extracto creado manualmente

Para generar un extracto del contenido de la publicación, necesitarías algo como:

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

Lo cual es realmente una versión simplificada de la función principal wp_trim_excerpt()

Puedes controlar la longitud del extracto utilizando el filtro excerpt_length. Según el ejemplo en el 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); ?> esta parte está incorrecta. Estás imprimiendo el extracto del id = 190, simplemente usa echo $excerpt. Además, no necesitas la línea <?php echo get_excerpt(190); ?>

Lee las páginas del codex con atención, encontrarás muchos ejemplos útiles allí para entender cómo funciona una función http://codex.wordpress.org/Function_Reference/get_post

18 dic 2012 08:53:20
Comentarios

no funciona... <?php echo get_excerpt(190); ?> controla el extracto...

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

también tengo una longitud de extracto en function.php

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

Parece que tienes muchas cosas en marcha...

Yo probaría lo siguiente:

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

Y usarías lo siguiente para mostrar el extracto:

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

¿Por qué no haces echo a la variable $excerpt? Creo que esto debería funcionar. No hagas esto:

<?php echo get_excerpt(190); ?>

haz esto:

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

se muestra el extracto pero no el enlace "leer más"...

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

Si deseas obtener el experto de un post específico con ID 6, puedes hacerlo de la siguiente manera:

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

Esto simplemente mostrará el título y el extracto del post con ID 6.

5 ene 2014 12:02:38