WordPress教程

WordPress主题开发中如何实现文章相互关联

WordPress日记 2018-11-22 WP主题开发 49 次

最近在帮客户定制开发一款WordPress虫草网站主题的时候,其中有两个自定义分类(不是自定义分类也没问题)分别是产品分类和商家分类,当然对应的都是产品文章和商家文章。最初客户提出的需求上要求商家介绍页面下面要有该商家经营的产品展示,点击链接可到产品详情页,在每个产品详情页下面还要有所有出售该产品的商家展示,点击商家链接到商家详情。一开始没想那么多,觉得很简单,直接用自定义字段插件Advanced Custom Fields(插件超详细使用方法)分别为商家详情页和产品详情页创建个关联字段,发布商家和产品的时候分别手动选择对应关联文章,然后在前台分别获取显示出来就可以了。所以我也就这么做了,如何使用Advanced Custom Fields插件制作关联文章可以查看:为WordPress页面或文章手动添加或自定义相关文章

但是快做好的时候,客户问了一句商家和产品是相互关联的吗?这个时候我突然意识到按照上面的方法是有问题的,商家选择完关联产品后,还要去产品中添加关联这个商家,虽然前端效果可以实现整体需求,但是操作太麻烦了。所以就想想怎么实现相互关联,也就是只需要在发布商家的时候关联一下产品就可以了,发布产品就不需要在手动设置关联的商家,因为他们之间关联的关系已经建立了。

最后终于摸索出来了,现在把思路分享出来,希望对大家有用(注意只是思路,不是把代码复制就能用,还要看你使用的是默认文章类型还是自定义文章类型,以及你创建的关联字段ID是什么等)

首先,为商家发布页面创建关联产品字段,我用了sjcp这个字段ID;

第二、发布商家的时候选择关联产品;

第三、在商家详情页模板文件中需要显示关联产品的地方利用下面的代码思路获取关联产品并显示,到此前台商家详情页显示关联产品就实现了。

  1. <?php 
  2. $posts = get_field('sjcp');
  3. if( $posts ): ?>
  4. <ul class="index_productlist">
  5.     <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
  6.     <?php setup_postdata($post); ?>
  7.         <li>
  8.     		<a href="<?php the_permalink() ?>" title="<?php the_title();?>">
  9.     		    <div class="productimg">
  10.     		    	<?php the_post_thumbnail('product-thumb',true);?>
  11.     		    	<div class="readmore_icon">
  12.     		    		<i class="glyphicon glyphicon-search"></i>
  13.     		    	</div>
  14.     		    </div>
  15.     		    <h3><?php the_title();?></h3>
  16.     		</a>
  17.     	</li>
  18.     <?php endforeach; ?>
  19.     <div class="clearfix"></div>
  20. </ul>
  21. <?php wp_reset_postdata(); ?>
  22. <?php endif; ?>

第四、这是最关键的地方,思路是获取所有商家设置的关联商品的ID,这里每个商家所关联的产品ID输出肯定是个数组,然后用in_array来验证获取的所有商家的关联商品ID数组中是否存在当前产品页的ID(<?php $nowproid = get_the_ID(); ?> ),如果存在则把该商家显示出来就行了。代码整体思路如下:

  1. <?php $maixun_posts = new WP_Query(
  2.     array(
  3.         'post_type' => 'business',//自定义文章类型
  4.     )
  5. );
  6. ?>
  7. <?php $nowproid = get_the_ID(); ?> 
  8. <?php if ($maixun_posts->have_posts()): while ($maixun_posts->have_posts()): $maixun_posts->the_post(); ?>
  9. 	<?php $glsj=(array)get_field('sjcp');?>
  10.     <?php if(in_array($nowproid, $glsj)){?>
  11.         <li>
  12.     		<a href="<?php the_permalink() ?>" title="<?php the_title();?>">
  13.     		    <div class="businessimg">
  14.     		    	<?php the_post_thumbnail('business-thumb',true);?>
  15.     		    </div>
  16.     		    <h3><?php the_title();?></h3>
  17.     		</a>
  18.     	</li>
  19. 	<?php } ?>  
  20. <?php endwhile; endif; ?>

到此,商品和产品相互关联就实现了,用户在关联的时候只需要在商品页关联一下产品,产品也会自动显示与之关联的商家。

上一篇:已是最新文章

下一篇: