
De functie die ik in deze post met je deel, heb ik gemaakt om op een WordPress site gerelateerde berichten te tonen. De functie kan worden aangeroepen vanuit de sidebar. Er worden dan links getoond naar berichten die van dezelfde tags zijn voorzien als het bericht dat de lezer momenteel op het scherm heeft staan.
Goed, ik denk dat dit voor de geintersseerde lezer wel voldoende introductie is. Ik ga nu eerst de code met je delen, en zal die daarna op een aantal punten verder toelichten. De code dien je op te nemen in het functies.php bestand dat je in je WordPress thema directory vindt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/* ======================== */ /* Display Related Posts */ /* ======================== */ add_filter( 'widget_text', 'shortcode_unautop'); add_filter( 'widget_text', 'do_shortcode', 11); add_shortcode('cust_related', 'display_related_posts'); function display_related_posts() { ob_start(); if ( is_single() ) { ?> <div id="mh_custom_posts-2" class="mh-widget mh_custom_posts"> <h4 class="mh-widget-title"><span class="mh-widget-title-inner">Gerelateerd</span></h4> <!-- simple WP_Query --> <?php $pid = get_the_ID(); $tags_to_select = array(); $posttags = get_the_terms($pid, 'post_tag'); $do_not_duplicate = ""; // First let us put all tags from current post in an array foreach($posttags as $tag_item) { array_push($tags_to_select, $tag_item->term_id); } // That's done. Now build the query and loop the results $args = array ( 'post_type' => 'post', 'tag__in' => $tags_to_select, // the tags we collected 'orderby' => 'ID', 'order' => 'DESC', 'posts_per_page' => '4', 'post__not_in' => array($pid) // prevent showing self as related ); $related_posts = new WP_Query( $args ); while ( $related_posts -> have_posts() ) : $related_posts -> the_post(); if ($do_not_duplicate != get_the_ID() ) { // prevent printing duplicates $do_not_duplicate = get_the_ID(); ; // prevent printing duplicates // The now following lines displaying the actual posts // ?> <ul class="mh-custom-posts-widget mh-clearfix"> <li class="post-<?php the_ID(); ?> mh-custom-posts-item mh-custom-posts-small mh-clearfix"> <figure class="mh-custom-posts-thumb"> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php if (has_post_thumbnail()) { the_post_thumbnail('mh-magazine-lite-small'); } else { echo '<img class="mh-image-placeholder" src="' . get_template_directory_uri() . '/images/placeholder-small.png' . '" alt="' . esc_html__('No Image', 'mh-magazine-lite') . '" />'; } ?> </a> </figure> <div class="mh-custom-posts-header"> <p class="mh-custom-posts-small-title"> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php the_title(); ?> </a> </p> <div class="mh-meta mh-custom-posts-meta"> <?php mh_magazine_lite_loop_meta(); ?> </div> </div> </li> </ul> <?php } endwhile; wp_reset_query(); // } ?> </div> <?php } return ob_get_clean(); } |
Om met de eerste drie regels code te beginnen (de regels 4, 5 en 6). Deze zorgen er voor dat vanuit de text widget in de sidebar deze functioe kan worden aangeroepen met gebruik van een shortcode.
Vervolgens is interresant om te noemen regel 19. Deze haalt de tags op die gekoppeld zijn aan het bericht dat momenteel door de lezer is geopend. Op regel 23 t/m 26 worden de gevonden tags toegevoegd aan de array variabele “$tags_to_select”.
Nu bouwen we op regel 29 t/m 38 de query voorwaarden op en voeren de query uit door de WP_query class aan te roepen. De code van regel 40t/m 75 zorgt er voor dat het resultaat van de query daadwerkelijk op het scherm wordt geprint. Dat is dus de output. De html in deze regels zal je dus willen aanpassen zodat het in je eigen ontwerp past. Op regel 42 en 43 zorgen we er voor dat een bericht niet vaker dan een keer wordt afgedrukt. Het kan namelijk voorkomen dat een bericht omdat het aan meerdere tags is gekoppeld vaker dan een keer in het resultaat van de query zit.
Om de functie aan te roepen, kan je nu eenvoudig de text-widget, die standaard in WordPress aanwezig is, toevoegen aan je sidebar. Roep in de widget de shortcode aan door [ cust_related ] in te voeren.

Laat een reactie achter