基于另一文章类型ID获取文章类型:员工专属评价页实现方案
实现员工专属评价页展示关联评价的方案
嘿,这个需求我之前帮客户处理过类似的,逻辑其实挺清晰的,咱们一步步来实现就行!
前提确认
先明确几个基础信息(如果和你的实际情况有出入,对应调整就行):
- 评价内容是自定义文章类型(假设slug是
testimonial) - ACF关联字段的字段名为
related_employee,用来关联对应的员工简历页(返回格式设置为「Post ID」,这个很重要!) - 每个员工的专属评价页,已经通过自定义模板搭建完成,且评价页里有明确的方式关联到对应的员工简历页(比如评价页也有个ACF关联字段
target_employee,或者评价页是员工简历页的子页面)
步骤1:获取当前评价页对应的员工ID
首先要拿到当前评价页关联的员工简历页ID,分两种常见情况:
情况A:评价页用ACF字段关联员工简历页
在你的评价页模板文件里,先获取关联的员工ID:
// 获取当前评价页关联的员工简历页ID $employee_id = get_field('target_employee');
情况B:评价页是员工简历页的子页面
如果评价页是员工页的子页面,直接通过父页面ID获取:
// 获取当前评价页的父页面(员工简历页)ID $employee_id = wp_get_post_parent_id(get_the_ID());
步骤2:查询关联该员工的所有评价
用WP_Query来筛选出所有关联了该员工的评价内容:
// 构建查询参数 $testimonial_args = array( 'post_type' => 'testimonial', // 你的评价自定义文章类型slug 'posts_per_page' => -1, // 显示所有评价,按需改成具体数字(比如10) 'post_status' => 'publish', // 只展示已发布的评价 'meta_query' => array( array( 'key' => 'related_employee', // ACF关联字段的字段名 'value' => $employee_id, 'compare' => '=', 'type' => 'NUMERIC' // 因为关联字段存的是ID,按数字匹配 ) ), 'orderby' => 'date', // 按发布时间排序,可换成其他字段 'order' => 'DESC' // 倒序排列,最新的在前 ); // 执行查询 $testimonials_query = new WP_Query($testimonial_args);
步骤3:循环展示评价内容
拿到查询结果后,就可以像普通文章循环一样输出评价内容了,按需调整输出的字段:
// 检查是否有评价内容 if ($testimonials_query->have_posts()) : echo '<div class="employee-testimonials">'; while ($testimonials_query->have_posts()) : $testimonials_query->the_post(); echo '<div class="testimonial-card">'; // 输出评价标题(如果有的话) echo '<h4 class="testimonial-title">' . get_the_title() . '</h4>'; // 输出评价正文(假设ACF字段为`testimonial_content`) echo '<div class="testimonial-content">' . get_field('testimonial_content') . '</div>'; // 输出客户信息(比如客户名称,ACF字段为`client_name`) if (get_field('client_name')) { echo '<p class="testimonial-client">—— ' . get_field('client_name') . '</p>'; } echo '</div>'; endwhile; echo '</div>'; // 重置查询,避免影响后续内容 wp_reset_postdata(); else : // 没有评价时的提示 echo '<p class="no-testimonials">暂无该员工的相关评价</p>'; endif;
额外注意事项
- 确保ACF关联字段的返回格式设置为「Post ID」,否则查询会失效;
- 如果你的评价不是自定义文章类型,而是用普通页面,把
post_type改成page即可; - 可以给输出的评价内容添加自定义CSS类,比如
.employee-testimonials、.testimonial-card,来做样式美化; - 如果需要更复杂的排序(比如按评价星级排序),可以在
meta_query之外添加orderby参数指向对应的ACF字段。
内容的提问来源于stack exchange,提问作者OMGDrAcula
相关产品推荐
相关产品推荐

