Query mai eficient pentru a afișa postări din aceeași sub-categorie?
30 oct. 2014, 16:04:12
Vizualizări: 297
Voturi: 0
[EDIT: Vezi comentariul meu mai jos, este posibil să fi fost păcălit de cache-ul Chrome care a afișat o versiune anterioară a acestui cod. Acum pare să ruleze destul de repede. Las întrebarea aici în caz că cineva vede o metodă mai bună, dar nu vă faceți griji prea mult dacă nu - voi închide această întrebare în câteva zile.]
Mulți oameni au postat cod similar pentru a afișa 'postări similare' în bara laterală, iar eu l-am adaptat într-un shortcode. Funcționează, dar durează 1-2 secunde să se încarce pe localhost. Pot adăuga caching cu transient, dar având în vedere că este un query specific fiecărui post, nu cred că va ajuta foarte mult (sau mă înșel?). Există o metodă mai eficientă de a scrie acest cod?
// SHORTCODE PENTRU AFIȘAREA POSTĂRILOR SIMILARE ÎN BARA LATERALĂ
// Afișează postări din aceeași sub-categorie cu postul curent
// utilizare: [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ște atributele și valorile lor implicite
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) {
// caută doar sub-categoriile curente
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 = '';
// rulează loop-ul bazat pe query
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;
}
Mulțumesc!
Comentarii
Arată celelalte 2 comentarii
Întrebări similare