Dnes Vám ukážem jednoduchý spôsob ako vo worpdresse získať súvisiace články pre daný post.
O vyhľadávaní súvisiacich článkov som napísal už dva príspevky, čiže ak mi to správne funguje tu na blogu, tak by ste ich mali vidieť pod článkom ;).
Každopádne v tomto článku nebudeme preberať teóriu, ale vám ukážem funkciu pomocou ktorej môžete články nájsť. Sql pre funkciu som zobral z pluginu WordPress Related Posts a trochu som to upravil, aby som mohol filtrovať články podľa kategórií. To je dobré vtedy ak máte na webe viac hlavných kategórií ako napríklad články, fotky, videá a pre články chcete nájsť len súvisiace články a nie aj súvisiace fotky, ktoré vôbec nemusia s článkom súvisieť, ale len budu mať priradený rovnaký tag (kľúčové slovo).
Tu je kód funkcie:
function get_related_posts($categories = null, $limit = 0) { global $wpdb, $post; $now = current_time('mysql', 1); /* získame všetky tagy pre daný post */ $tags = wp_get_post_tags($post->ID); /* ak post nemá pridelené žiadne tagy tak nemá význam hľadať súvisiace príspevky a vrátime false */ if(empty($tags)) { return false; } /* vytvoríme si reťazec obsahujúci ID tagov oddelené čiarkou * tento reťazec použijeme v SQL dotaze */ foreach($tags as $tag) { $taglist[] = $tag->term_id; } $taglist = implode(',', $taglist); /* vytvoríme vnorený SELECT */ $sql = "SELECT p.*, count(t_r.object_id) as cnt FROM $wpdb->term_taxonomy t_t, $wpdb->term_relationships t_r, $wpdb->posts p WHERE t_t.taxonomy ='post_tag' AND t_t.term_taxonomy_id = t_r.term_taxonomy_id AND t_r.object_id = p.ID AND (t_t.term_id IN ($taglist)) AND p.ID!= $post->ID AND p.post_status = 'publish' AND p.post_date_gmt < '$now' GROUP BY t_r.object_id ORDER BY cnt DESC, p.post_date_gmt DESC"; $sql = "SELECT * FROM ($sql) p, $wpdb->term_taxonomy t_t, $wpdb->term_relationships t_r WHERE t_t.taxonomy = 'category' AND t_t.term_taxonomy_id = t_r.term_taxonomy_id AND t_r.object_id = p.ID"; if(!empty($categories)) { $sql .= ' AND t_t.term_id IN (' . implode(',', $categories) . ')'; } if($limit != 0) { $sql .= ' LIMIT ' . absint($limit); } /* získame údaje z DB */ $result = $wpdb->get_results($sql); /* a nájdené posty pridáme do cache */ foreach($result as $post) { wp_cache_add($post->ID, $post, 'posts'); } return $result; }
Funkcia get_related_post()
, nám vráti súvisiace články (posty) zoradené podľa toho koľko kľúčových slov (tagov) majú spoločných s článkom pre ktorý sme ich hľadali.
Nasledujúci príklad vypíše maximálne 5 súvisiaciach článkov z kategórií s ID 1, 2, alebo 3:
<?php foreach(get_related_posts(array(1,2,3), 5) as $post) { ?> <?php //setup_postdata($post); treba odkomentovať ak chceme použiť napríklad the_content() ?> <div class="related-article"> <h6><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h6> <?php the_excerpt(); ?> </div> <?php }?>
Pridaj komentár