¿Por qué no se puede obtener el extracto por ID como con el título y la mayoría de los otros elementos?
p.ej. get_the_excerpt (ID). Sé cómo usarlo con la función $ post-> post_excerpt pero eso no devuelve parte del contenido si no se ingresó ningún extracto, simplemente no devuelve nada.
Entonces, lo que estoy tratando de hacer es obtener el extracto por ID si hay un extracto, y si no hay un extracto con esa ID pero hay algo de contenido, para obtener parte del contenido.
¿Cómo haría uno eso?
Algunas ideas,
Maravilloso ...
EDITAR -
Código fuente del bucle según lo solicitado.
<?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;?>
Respuestas:
Hola @Robin I. Knight:
Lo veo
get_the_excerpt()
como una función con diseño heredado. A medida que el uso de WordPress ha crecido, hay muchos casos de uso más nuevos en los que no encaja pero donde sí funcionan las funciones más nuevas para obtener datos diferentes. Un ejemplo es el uso frecuente de una$args
variedad de opciones de funciones.Pero es fácil de solucionar según sus necesidades. Aquí hay una función alternativa que puede usar que puede colocar en cualquier parte del
functions.php
archivo de su tema :No lo he probado, pero estoy bastante seguro de que lo hice bien. Si esto no satisface sus necesidades, explique y tal vez pueda hacer otras sugerencias.
fuente
setup_postdata($post)
al comienzo de tu bucle, como sugiere @Rarst. Si eso no funciona, podría ser un complemento que debe deshabilitar; has intentado eso? Y probablemente no quiera llamarloget_the_excerpt_id()
porque WordPress podría agregar esa función en el futuro y romper su sitio. Y probablemente podría prescindir de la función en su bucle utilizando en suforeach($stories as $story): global $post; $post = $story;
lugar.La mecánica del extracto es extremadamente confusa. No es una respuesta precisa a su pregunta, pero en general si necesita hacer etiquetas de plantilla, específicas de Loop, que funcionen con la matriz devuelta
get_posts()
, puede emular Loop de esta manera:fuente
setup_postdata()
la consulta global no se ve afectado y solo se deben restablecer los datos publicados.Hay una nueva función desde 3.3.0: wp_trim_words
Lo estoy usando fuera del ciclo de la siguiente manera:
Esto no debe confundirse con wp_trim_excerpt que aparentemente solo funciona dentro del bucle, ya que invoca the_content () internamente.
fuente
Solo para agregar a la respuesta de MikeSchinkel, que por alguna razón no funcionaría para mí. Tuve que agregar la línea setup_postdata para que funcione.
}
Supongo que si está usando esto fuera del ciclo, entonces no debería interferir con otros setup_postdata.
Aclamaciones
fuente
Sobre la base de la respuesta de @ Maxime, ¿funcionaría esto?
Me parece bastante sencillo, pero me pregunto si me estoy perdiendo algo.
fuente
Si TODAS sus publicaciones tienen la
<!--more-->
etiqueta, puede usar lo siguiente con su código anterior:Por supuesto, si tiene publicaciones que no tienen la
<!--more-->
etiqueta, se mostrarán en su totalidad. Funciona en mi situación, pero no para todos ...fuente
Lo veo
get_the_excerpt()
como una función con diseño heredado. A medida que el uso de WordPress ha crecido, hay muchos casos de uso más nuevos en los que no encaja pero donde sí funcionan las funciones más nuevas para obtener datos diferentes. Un ejemplo es el uso frecuente de una$args
variedad de opciones de funciones.Pero es fácil de solucionar según sus necesidades. Aquí hay una función alternativa que puede usar que puede colocar en cualquier parte del
functions.php
archivo de su tema :Solo para agregar a la respuesta de MikeSchinkel, que por alguna razón no funcionaría para mí. Tuve que agregar la línea setup_postdata para que funcione.
fuente
wp_reset_post_data()
funcionar dentro del bucle?Este es un poco de dos líneas que uso mucho utilizando wp_trim_words . Constantemente me encuentro necesitando la abreviatura y leo más funcionalidades fuera del ciclo. Alguien más puede encontrar esto útil. Entonces esto es lo que uso para:
Puse esto en línea, directamente en la plantilla personalizada que estoy editando.
Descompostura
1. El contenido del extracto
Obtenga el extracto por ID de publicación, pero obtenga el contenido de la publicación si no se ha establecido ningún extracto.
Estoy usando la abreviatura de If / Else PHP .
2. Longitud de palabra
Establezca la cantidad de palabras en el Extracto en 20
3. Elija Leer más contenido (Enlace / Texto)
Solía
$dapost->guid
obtener la URL, porque no necesitaba URL amigables y quería evitar otra llamada a la base de datos. Siempre puedes usar get_the_permalink.Ver wp_trim_words en la documentación de Wordpress.
fuente
Esto funcionó para mí:
fuente
Desde WP 4.5.0 es posible usar la ID de publicación como parámetro
get_the_excerpt( $post->ID )
Fuente: https://developer.wordpress.org/reference/functions/get_the_excerpt/
fuente
Esto es más rápido:
fuente