¿Consulta más eficiente para mostrar publicaciones en la misma subcategoría?
30 oct 2014, 16:04:12
Vistas: 297
Votos: 0
[EDITAR: Ver mi comentario abajo, puede que me haya engañado el caché de Chrome mostrando una versión anterior del código. Ahora parece ejecutarse bastante rápido. Dejo la pregunta por si alguien ve una mejor forma, pero no te preocupes demasiado si no - cerraré esto en un par de días.]
Mucha gente ha publicado códigos como este para mostrar 'publicaciones relacionadas' en la barra lateral, y lo he adaptado en un shortcode. Funciona, pero tarda 1-2 segundos en cargar en localhost. Puedo añadir caché transitorio pero dado que es una consulta por tipo de publicación, no ayudará mucho (¿o sí?). ¿Hay una forma más eficiente de escribir esto?
// SHORTCODE PARA MOSTRAR PUBLICACIONES RELACIONADAS EN LA BARRA LATERAL
// Muestra publicaciones en la misma subcategoría que la publicación actual
// uso: [related_posts posts="5"]
add_shortcode( 'related_posts', 'mkm_related_posts_shortcode' );
function mkm_related_posts_shortcode( $atts ) {
ob_start();
$current_post_id = get_queried_object_id();
// define atributos y sus valores por defecto
extract( shortcode_atts( array (
'type' => 'post',
'order' => 'asc',
'orderby' => 'menu_order',
'posts' => '3',
), $atts ) );
$categories = get_the_category($current_post_id);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) {
// buscando solo subcategorías actuales
if ( $individual_category->parent !== 0 ) {
$category_ids[] = $individual_category->term_id;
}
}
}
$options = array(
'post_type' => $type,
'order' => $order,
'orderby' => $orderby,
'posts_per_page' => $posts,
'category__in' => $category_ids,
'post__not_in' => array($current_post_id),
);
$related_query = new WP_Query( $options );
$output = '';
// ejecuta el loop basado en la consulta
if ( $related_query->have_posts() ) {
$alttext = the_title_attribute('echo=0');
$output .= '<ul>';
while ( $related_query->have_posts() ) {
$related_query->the_post();
$output .= '<li>';
$output .= '<h5 class="related-title"><a href="' . get_permalink() . '">' . get_the_title() . '</a></h5>';
if( has_post_thumbnail($related_query->post->ID) ) {
$output .= '<a href="' . get_permalink() . '">' . get_the_post_thumbnail($related_query->post->ID, 'tiny-thumb', array( 'alt' => $alttext )) . '</a>';
}
$output .= '</li>';
}
$output .= '</ul>';
}
ob_get_clean();
wp_reset_postdata();
return $output;
}
¡Gracias!
Comentarios
Mostrar los 2 comentarios restantes
Preguntas relacionadas
1
respuestas