Funktionsweise
Die grundlegende Funktionsweise solcher Plugins ist im Prinzip immer die Gleiche. Sie suchen anhand von entweder den Artikeltags oder der Artikelkategorie weitere Artikel aus der Datenbank heraus, die ebenfalls diese Tags oder Kategorie haben. Nun, das kann man auch mit einer kleinen Funktion selbst in sein WordPress-Blog einbinden. Ist gar nicht so schwer, man muss nur – wie sollte es auch anders sein – an die functions.php des jeweiligen Themes heran und für die Ausgabe der relevanten Artikel auch an die (content-)single.php (diese Datei hat leider je nach Theme einen etwas anderen Namen), hier wird die Funktion dann aufgerufen.
An dieser Stelle sei gesagt, solche Änderungen bitte immer nur an einem Child-Theme vornehmen, somit bleibt euer Theme updatefähig und wird – im Zweifelsfalle – nicht beschädigt, falls etwas schief geht.
Funktion einbinden
Wie ich schon sagte, muss man hierfür an die functions.php heran, diese wird um eine kleine Funktion erweitert.
Natürlich möchte ich noch ein paar Worte zur Funktion selbst verlieren. Innerhalb dieser wird eine eigene Thumbnailgröße definiert, um die Anzeige der relevanten Artikel mit eigenen Thumbnails der jeweiligen Artikelbilder auszustatten. Sieht einfach schöner aus. Sollte der Artikel selbst kein Artikelbild enthalten, so wird ein Platzhalterbild angezeigt, welches die Größe des gesuchten Thumbnails hat.
Es sind also zwei Dinge empfehlenswert:
Ein Platzhalterbild zu erstellen und unter /wp-content/themes/<dein-theme>/images/placeholder/postthumbnail-related-post.jpg zu speichern und um von den schon vorhandenen Bildern das neue Thumbnail generieren zu lassen das Plugin Regenerate Thumbnails zu installieren. Dieses Plugin generiert von allen Bildern in der Mediathek die jeweiligen Thumbnails, die innerhalb des Themes Verwendung finden. Keine Panik um eure Bilder, läuft alles ganz hervorragend.
Aber nun zur Funktion, natürlich kann auch hier gewählt werden, ob die relevanten Artikel anhand der Artikeltags oder der Artikelkategorien erstellt werden und wie viele relevante Artikel angezeigt werden sollen. Und das war es schon an Einstellungsmöglichkeiten. Also schlank und einfach.
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | <?php /** * Displaying related posts under the article * * Usage: * if(function_exists('my_related_posts')) { * my_related_posts('tag', 5); // for related posts by tag * my_related_posts('category', 5); // for related posts by category * } * * @param string (optional) $var_sRelatedBy Related article by 'tag' or 'category'. Default 'tag' * @param int (optional) $var_iPostsPerPage Number of related articles. Default 5 */ if(!function_exists('my_related_posts')) { function my_related_posts($var_sRelatedBy = 'tag', $var_iPostsPerPage = 5) { /** * Adding an imagesize for thumbnails on related posts * width: 230px * height: 115px */ add_image_size('related-post', 230, 115, true); $var_sHasRelatedIn = false; $var_iPostId = get_the_ID(); /** * Setting WP_Query arguments depending on $var_sRelatedBy. */ switch($var_sRelatedBy) { /** * Related posts by tag */ case 'tag': $array_Tags = wp_get_post_tags($var_iPostId); if(count($array_Tags) != 0) { $var_sHasRelatedIn = true; $array_TagIds = array(); foreach($array_Tags as $each_tag) { $array_TagIds[] = $each_tag->term_id; } // END foreach($array_Tags as $each_tag) $array_QryArgs['tag__in'] = $array_TagIds; } // END if(count($array_Tags) != 0) break; /** * Related posts by category */ case 'category': $array_Categories = get_the_category($var_iPostId); if(count($array_Categories) != 0) { $var_sHasRelatedIn = true; $array_CatIds = array(); foreach($array_Categories as $each_tag) { $array_CatIds[] = $each_tag->term_id; } // END foreach($array_Categories as $each_tag) $array_QryArgs['category__in'] = $array_CatIds; } // END if(count($array_Categories) != 0) break; } // END switch($var_sRelatedBy) /** * Only if we have a base (one or mor tags/categories) to search for related posts. * Otherwise return and end this function */ if($var_sHasRelatedIn === true) { /** * Setting the rest of our WP_Query arguments */ $array_QryArgs['post__not_in'] = array( $var_iPostId ); $array_QryArgs['posts_per_page'] = $var_iPostsPerPage; $array_QryArgs['post_status'] = 'publish'; $array_QryArgs['post_type'] = 'post'; $array_QryArgs['orderby'] = 'rand'; /** * Comparing WordPress versions to get the right call for ignoring sticky posts * * WordPress < 3.1 = caller_get_posts * WordPress >= 3.1 = ignore_sticky_posts */ if(version_compare(WP_VERSION_RUNNING, '3.1', '>')) { $array_QryArgs['caller_get_posts'] = 1; } else { $array_QryArgs['ignore_sticky_posts'] = 1; } // END if(version_compare(WP_VERSION_RUNNING, '3.1', '>')) $relatedArticles = new WP_Query($array_QryArgs); /** * If there are related posts. */ if($relatedArticles->have_posts()) { echo '<div class="my-related-articles clearfix">'; echo '<h3>' . _n('Related Article', 'Related Article(s)', $relatedArticles->post_count, MY_TEXTDOMAIN) . ':</h3>'; echo '<ul>'; /** * loop through the posts and list each until done. */ while($relatedArticles->have_posts()) { $relatedArticles->the_post(); echo '<li>'; /** * Looking for post thumbnail * * If we don't find it, take the placeholder * filed in /wp-content/theme/<your-theme>/images/placeholder/postthumbnail-related-post.jpg * So don't forget to place the image it here! * * Dimensions for the placeholder image: * width: 230px * height: 115px */ if(has_post_thumbnail()) { the_post_thumbnail('related-post'); } else { echo '<img width="230" height="115" title="' . __('Placeholder Postthumbnail Related Posts', MY_TEXTDOMAIN) . '" alt="' . __('Placeholder Postthumbnail Related Posts', MY_TEXTDOMAIN) . '" class="attachment-related-article wp-post-image" src="' . get_template_directory_uri() . '/images/placeholder/postthumbnail-related-post.jpg" />'; } // END if(has_post_thumbnail()) echo '<p><a href="' . get_permalink() . '" rel="bookmark" title="' . __('Permanent Link to: ', MY_TEXTDOMAIN) . the_title_attribute(array('echo' => false)) . '">' . get_the_title() . '</a></p>'; echo '<p>' . get_the_excerpt('excerpt', '150') . ' ...</p>'; echo '<p><a class="talos-read-more related-post-read-more" href="' . get_permalink() . '" rel="bookmark" title="' . __('Permanent Link to: ', MY_TEXTDOMAIN) . the_title_attribute(array('echo' => false)) . '">' . __('read more', MY_TEXTDOMAIN) . '</a></p>'; echo '</li>'; } // END while($relatedArticles->have_posts()) echo '</ul>'; echo '</div>'; } // END if($relatedArticles->have_posts()) /** * Destroy the previous query. This is a MUST, * otherwise you will get the WRONG comments * (comments assigned to the wrong post), * and sometimes categories and tags are for the wrong post. */ wp_reset_query(); } else { return; } // END if($var_sHasRelatedIn === true) } // END function my_related_posts() } // END if(!function_exists('my_related_posts')) ?> |
Anzeige unter Artikel
Um nun die relevanten Artikel unter dem Artikel anzeigen zu lassen, muss man nur noch schnell an die (content-)single.php heran, denn diese ist für die Darstellung des Einzelartikels zuständig. Hier wird schlicht und einfach die neue Funktion an entsprechender Stelle aufgerufen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php /** * 5 Relevante Artikel anhand der Tags */ if(function_exists('my_related_posts')) { my_related_posts('tag', 5); } ?> <?php /** * 5 Relevante Artikel anhand der Kategorie */ if(function_exists('my_related_posts')) { my_related_posts('category', 5); } ?> |
Und schon werden, wenn alles richtig gemacht wurde, die relevanten Artikel unter dem jeweiligen Artikel angezeigt.
Ich wünsche viel Spaß :-)

Hallo,
danke für den Code. So kann man sich mal wieder ein Plugin sparen. Und so macht es auch viel mehr Spaß. Danke hierfür und alle anderen Tipps.
Hallo,
ein Frage habe ich noch. Hat sich gerade beim Einbau desm Codes ergeben. Wirkt sich der Code nur auf neue Artikel oder auch auf bereits bestehende Artikel aus? Wo kann man das (ggf.) im Code sehen?
Gruß,
Stefan.
www.veganrockcity.de
Der Code hat nichts mit neuen oder alten Artikeln zu tun.
Je nach dem, welche Bedingungen gewählt wurden, werden die relevanten Artikel angezeigt.
OK, danke für die Info.