WordPress相关文章调用:几种代码实现方法详解
文章目录
功能需求说明
在制作WordPress主题时,经常需要为文章模板添加相关文章功能。这些相关文章可以出现在侧栏或文章底部,目的是增加访客在网站上的停留时间,提高PV和用户体验。虽然有许多插件可以实现这个功能,但为了节省资源,我们可以通过代码来完成这一功能。下面我们列举了几种实现WordPress相关文章的方法,并对每种方法的执行效率进行了对比。
相关文章实现方法
方法一:标签相关
通过获取文章的所有标签,然后获取这些标签下的相关文章。
<ul> <?php global $post; $post_tags = wp_get_post_tags($post->ID); if ($post_tags) { $tag_list = []; foreach ($post_tags as $tag) { $tag_list[] = $tag->term_id; } $post_tag = $tag_list[mt_rand(0, count($tag_list) - 1)]; $args = array( 'tag__in' => array($post_tag), 'category__not_in' => array(), // 不包括的分类ID 'post__not_in' => array($post->ID), 'showposts' => 6, // 显示相关文章数量 'ignore_sticky_posts' => 1 ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); ?> <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php } } else { echo '<li>* 暂无相关文章</li>'; } wp_reset_postdata(); } else { echo '<li>* 暂无相关文章</li>'; } ?> </ul>
方法二:分类相关
通过获取文章的分类ID,然后获取该分类下的相关文章。
<ul> <?php global $post; $cats = wp_get_post_categories($post->ID); if ($cats) { $args = array( 'category__in' => array($cats[0]), 'post__not_in' => array($post->ID), 'showposts' => 6, 'ignore_sticky_posts' => 1 ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); ?> <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php } } else { echo '<li>* 暂无相关文章</li>'; } wp_reset_postdata(); } else { echo '<li>* 暂无相关文章</li>'; } ?> </ul>
方法三:标签相关,SQL获取
使用SQL语句直接从数据库中获取标签相关的相关文章。
<ul> <?php global $post, $wpdb; $post_tags = wp_get_post_tags($post->ID); if ($post_tags) { $tag_list = ''; foreach ($post_tags as $tag) { $tag_list .= $tag->term_id . ','; } $tag_list = rtrim($tag_list, ','); $related_posts = $wpdb->get_results(" SELECT DISTINCT ID, post_title FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy WHERE {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id AND ID = object_id AND taxonomy = 'post_tag' AND post_status = 'publish' AND post_type = 'post' AND term_id IN ($tag_list) AND ID != $post->ID ORDER BY RAND() LIMIT 6 "); if ($related_posts) { foreach ($related_posts as $related_post) { ?> <li><a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li> <?php } } else { echo '<li>暂无相关文章</li>'; } } else { echo '<li>暂无相关文章</li>'; } ?> </ul>
方法四:分类相关,SQL获取
使用SQL语句直接从数据库中获取分类相关的相关文章。
<ul> <?php global $post, $wpdb; $cats = wp_get_post_categories($post->ID); if ($cats) { $related_posts = $wpdb->get_results(" SELECT ID, post_title FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy WHERE {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id AND {$wpdb->prefix}term_taxonomy.taxonomy = 'category' AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id AND {$wpdb->prefix}posts.post_status = 'publish' AND {$wpdb->prefix}posts.post_type = 'post' AND {$wpdb->prefix}term_taxonomy.term_id = " . $cats[0] . " AND {$wpdb->prefix}posts.ID != " . $post->ID . " ORDER BY RAND() LIMIT 6 "); if ($related_posts) { foreach ($related_posts as $related_post) { ?> <li>* <a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li> <?php } } else { echo '<li>* 暂无相关文章</li>'; } } else { echo '<li>* 暂无相关文章</li>'; } ?> </ul>
方法五:作者相关
通过获取同一作者的其他文章来显示相关文章。
<ul> <?php global $post; $post_author = get_the_author_meta('ID'); $args = array( 'author' => $post_author, 'post__not_in' => array($post->ID), 'showposts' => 6, 'orderby' => 'date', 'ignore_sticky_posts' => 1 ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); ?> <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php } } else { echo '<li>* 暂无相关文章</li>'; } wp_reset_postdata(); ?> </ul>
时间效率对比
我们通过测量每种方法的执行时间来评估其效率。在同一篇文章中获取6篇相关文章的测算时间如下:
方法一:0.18067908287048 秒
方法二:0.057158946990967 秒
方法三:0.037126064300537 秒
方法四:0.045628070831299 秒
方法五:0.023991823196411 秒
这些时间只是参考值,实际效率可能会因服务器性能和数据库大小等因素有所不同。通过上述几种方法,可以根据具体需求和偏好选择最合适的相关文章实现方式。
希望这些方法和代码能帮助你在WordPress网站中实现相关文章功能。如有任何疑问或进一步需求,请随时告知。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123@#-@12-3.com举报,一经查实,本站将立刻删除。
共有 30 条评论