使用“标签菜单”实现相关文章功能

related-post

在 WordPress 中实现相关文章最方便的方法就是使用标签、目录等文章分组模式进行文章关联,把具有关联性的文章设置成相同的标签、目录,这样当提取相关文章条目的时候就可以按照设置好的标签或者目录作为条件来检索就可以了。

WordPress 提供了非常方便、灵活地建立标签和目录的方法,首先通过后台管理工具创建标签或者目录,然后就可以在写文章的时候使用这些标签和目录了,把关联的文章设置成相同的标签或者目录。

文章建立好关联关系后,当浏览到一篇文章的时候,还需要通过程序代码把关联的文章条目提取出来并显示在页面的某个位置。本篇教程以主题 “twentysixteen” 为例,通过修改“单一文章” 页面模板,使用左侧边栏来显示相关文章条目。侧边栏的创建方法可以参考这篇文章

一、修改 “单一文章” 模板(content-single.php)

content-single.php 模板文件在主题 “twentysixteen” 的 template-parts 目录里面,在标签<footer/>位置添加下面的代码:

<?php get_sidebar('related-post'); ?>
二、在左侧边栏显示关联文章

新建相关文章页面模板文件 sidebar-related-post.php,再放到主题 “twentysixteen” 目录下,该页面模板负责提取并显示相关文章条目,代码如下:

<?php if ( is_active_sidebar( 'left-sidebar-1' ) ) : ?>
	<aside id="leftsidebar-1" class="relatedpostsidebar widget-area" role="complementary">
		<?php $orig_post = $post;
			global $post;
			$tags = wp_get_post_tags($post->ID);
			if ($tags) {
				$tag_ids = array();
				foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
				$args=array(
				'tag__in' => $tag_ids,
				'post_type' => 'post',
				'post_status' => 'publish',
				'post__not_in' => array($post->ID),
				'posts_per_page'=> 5,
				'cat' => ‘9,6',
				'orderby' => 'rand',
				'order'   => 'DESC',
				'caller_get_posts'=> 1
				);
				$my_query = new wp_query( $args );
				if( $my_query->have_posts() ) { ?>
				<div id="related-posts" class="widget widget_related_entries">
				<h2 class="widget-title">相关文章</h2>
				<ul>
				<?php while( $my_query->have_posts() ) {
						$my_query->the_post(); ?>
					<li><div class="relatedthumb">
					<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
					<div class="relatedcontent">
					<a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
					<!--?php the_time('M j, Y') ?-->
					</div>
					</li>
				<?php }
				echo '</ul></div>';
				}
		}
		$post = $orig_post;
		wp_reset_query(); ?>
		<?php dynamic_sidebar( 'left-sidebar-1' ); ?>
	</aside><!-- .sidebar .widget-area -->
<?php endif; ?>

发表评论

邮箱地址不会被公开。 必填项已用*标注