WordPress中复用联系表单,需根据来源职位页动态修改表单页标题
实现WordPress职位页跳转联系表单时动态修改标题
嘿,这个需求其实挺常见的,核心就是要把职位页的信息传递到联系表单页,我给你两种靠谱的实现思路,你可以根据自己的场景选:
方法一:用GET参数传递职位信息(简单易上手)
这种方法直接在跳转链接里带上职位标题/ID,表单页读取这个参数来动态修改标题,优点是不需要额外配置,直观易懂。
步骤1:修改职位页的跳转链接
在你的职位单页模板(比如single-job.php,如果是自定义文章类型的话)里,把原来指向联系表单的链接改成下面这样:
<a href="<?php echo esc_url(add_query_arg('job_title', urlencode(get_the_title()), get_permalink(get_page_by_path('contact')))); ?>">申请该职位</a>
解释一下:
add_query_arg用来给URL添加job_title参数,值是当前职位的标题(用urlencode处理特殊字符)get_permalink(get_page_by_path('contact'))是获取你的联系表单页的固定链接,你也可以直接写表单页的URL,比如'https://your-site.com/contact/'
步骤2:在联系表单页动态生成标题
如果你用的是自定义页面模板(比如page-contact.php),直接在标题位置替换成下面的代码:
<?php // 获取并解码GET参数里的职位标题 $referrer_job_title = isset($_GET['job_title']) ? urldecode($_GET['job_title']) : ''; // 决定显示哪个标题 if (!empty($referrer_job_title)) { $page_title = sprintf('申请职位:%s', $referrer_job_title); } else { // 直接访问表单页时显示默认标题 $page_title = get_the_title(); } // 输出标题(记得用esc_html防止XSS) echo '<h1>' . esc_html($page_title) . '</h1>'; ?>
如果不想改模板,也可以用短代码实现:
在主题的functions.php里添加这段代码:
function dynamic_contact_form_title() { $referrer_job_title = isset($_GET['job_title']) ? urldecode($_GET['job_title']) : ''; if (!empty($referrer_job_title)) { return '<h1>' . esc_html(sprintf('申请职位:%s', $referrer_job_title)) . '</h1>'; } else { return '<h1>' . esc_html(get_the_title()) . '</h1>'; } } add_shortcode('dynamic_contact_title', 'dynamic_contact_form_title');
然后在联系表单页的编辑器里,用[dynamic_contact_title]代替原来的标题即可。
方法二:用PHP Session传递(更隐蔽,不暴露URL参数)
如果不想让职位信息出现在URL里,可以用Session来存储,适合对隐私有要求的场景。
步骤1:开启WordPress的Session支持
WordPress默认没有开启Session,先在主题的functions.php里添加这段代码:
function wp_init_session() { if (!session_id()) { session_start(); } } add_action('init', 'wp_init_session');
步骤2:在职位页存储职位信息到Session
在职位单页模板里,添加代码把当前职位的标题存入Session:
<?php // 只在职位单页执行 if (is_singular('job')) { // 这里的'job'是你的职位自定义文章类型slug,记得改成自己的 $_SESSION['referrer_job_title'] = get_the_title(); } ?>
步骤3:在联系表单页读取Session并生成标题
在联系表单页的模板里,添加这段代码处理标题:
<?php $referrer_job_title = isset($_SESSION['referrer_job_title']) ? $_SESSION['referrer_job_title'] : ''; // 用完就销毁Session,避免下次访问还显示之前的职位 unset($_SESSION['referrer_job_title']); if (!empty($referrer_job_title)) { $page_title = sprintf('申请职位:%s', $referrer_job_title); } else { $page_title = get_the_title(); } echo '<h1>' . esc_html($page_title) . '</h1>'; ?>
额外小技巧:把职位信息同步到表单里
不管用哪种方法,你可能还希望用户提交的表单里能带上职位信息,方便后台查看。如果用的是Contact Form 7,直接添加一个隐藏字段就行:
[hidden job-title default:get job_title]
如果用Session方法,就改成:
[hidden job-title default:session referrer_job_title]
这样表单提交后,后台就能看到用户申请的是哪个职位啦。
内容的提问来源于stack exchange,提问作者maxkue
相关产品推荐
相关产品推荐

