WordPress多自定义文章类型下,如何匹配展示共享Skills分类的重合技能?
实现WordPress招聘网站技能匹配展示
核心逻辑很简单:利用PHP的array_intersect()函数,对比两类文章的Skills分类ID数组,找出重合项后渲染展示即可。以下是两个页面的具体实现:
在job-single.php(求职者视角)展示匹配技能
假设你已经能获取当前职位的Skills分类ID,这里需要额外获取当前登录求职者的简历Skills,再计算交集:
// 获取当前职位的技能ID数组(替换成你已有的获取逻辑也可) $job_skill_ids = wp_get_post_terms(get_the_ID(), 'skills', array('fields' => 'ids')); // 获取当前登录用户的简历(假设单用户对应单简历,多简历场景需调整查询逻辑) $current_user_id = get_current_user_id(); $resume_query = new WP_Query([ 'post_type' => 'resumes', 'author' => $current_user_id, 'posts_per_page' => 1, 'no_found_rows' => true, // 优化查询性能 ]); if ($resume_query->have_posts()) { $resume_query->the_post(); $resume_skill_ids = wp_get_post_terms(get_the_ID(), 'skills', array('fields' => 'ids')); wp_reset_postdata(); // 计算重合技能ID $matching_skill_ids = array_intersect($job_skill_ids, $resume_skill_ids); if (!empty($matching_skill_ids)) { // 获取重合技能的名称并渲染 $matching_skills = wp_get_post_terms($matching_skill_ids, 'skills', array('fields' => 'names')); ?> <div class="skill-match-tip"> <h3>你的匹配技能</h3> <ul class="skill-list"> <?php foreach ($matching_skills as $skill) : ?> <li><?php echo esc_html($skill); ?></li> <?php endforeach; ?> </ul> </div> <?php } else { echo '<div class="skill-match-tip">暂无匹配技能,建议更新简历技能标签</div>'; } }
在job-application-single.php(雇主视角)展示匹配技能
这里需要先获取当前申请关联的职位ID和简历ID,再分别拉取两者的Skills分类信息:
// 获取当前申请的ID $application_id = get_the_ID(); // 从自定义字段中取出关联的职位ID和简历ID(替换成你实际的字段键名) $related_job_id = get_post_meta($application_id, '_related_job_id', true); $related_resume_id = get_post_meta($application_id, '_related_resume_id', true); if ($related_job_id && $related_resume_id) { // 获取职位的技能ID数组 $job_skill_ids = wp_get_post_terms($related_job_id, 'skills', array('fields' => 'ids')); // 获取简历的技能ID数组 $resume_skill_ids = wp_get_post_terms($related_resume_id, 'skills', array('fields' => 'ids')); // 计算重合技能ID $matching_skill_ids = array_intersect($job_skill_ids, $resume_skill_ids); if (!empty($matching_skill_ids)) { $matching_skills = wp_get_post_terms($matching_skill_ids, 'skills', array('fields' => 'names')); ?> <div class="application-skill-match"> <h3>技能匹配情况</h3> <p>该求职者与职位匹配的技能:</p> <ul class="skill-tags"> <?php foreach ($matching_skills as $skill) : ?> <li><?php echo esc_html($skill); ?></li> <?php endforeach; ?> </ul> <!-- 可选:展示匹配率 --> <?php $total_job_skills = count($job_skill_ids); $match_percentage = $total_job_skills > 0 ? round((count($matching_skill_ids) / $total_job_skills) * 100, 1) : 0; ?> <p>技能匹配率:<?php echo $match_percentage; ?>%</p> </div> <?php } else { echo '<div class="application-skill-match">该求职者与当前职位无匹配技能</div>'; } }
注意事项
- 确保自定义分类法的slug是
skills,如果你的slug不同,替换代码中对应的参数。 - 自定义字段键名(如
_related_job_id)需与你实际存储关联关系的字段一致。 - 所有输出内容用
esc_html()转义,避免XSS安全风险。 - 多简历场景下,job-single.php中需添加简历选择逻辑,让用户指定用来匹配的简历。
内容的提问来源于stack exchange,提问作者cannydare
相关产品推荐
相关产品推荐

