假设我有一个名为jobs的post类型,还有一个名为contact的页面,其中包含一个表单。现在,我希望联系人页面显示在每个作业网址上,以/contact结尾。所以job-1/contact,job2/contact等。
我希望显示相同的联系人页面,但访问当前的作业id。
这个是可能的吗?
发布于 2019-12-16 23:34:21
是的,这是可能的,但是想想WebElaine在评论中写了什么吧。
您需要一个查询变量(例如jobname)来存储jobs自定义post类型的名称。您还需要一个重写规则,将/jobs/{post-slug}/contact地址解释为"contact“页面,并将{post-slug}保留在查询变量jobname中。
add_filter( 'query_vars', 'se354723_query_vars' );
add_action( 'init', 'se354723_rewrite_job_contact' );
function se354723_query_vars( $vars )
{
$vars[] = "jobname";
return $vars;
}
function se354723_rewrite_job_contact()
{
$cpt_slug = 'jobs';
$target_page = 'contact-page-slug';
add_rewrite_rule(
"$cpt_slug/([^/]+)/contact/?$",
'index.php?pagename='. $target_page .'&post_type=page&jobname=$matches[1]',
'top'
);
}您可以使用jobname函数在"contact“页面上检查新查询变量( get_query_var() )的值。
$jobID = 0;
$jobname = get_query_var('jobname', false);
if ( !empty($jobname) )
{
$jobname = sanitize_title_for_query( $jobname );
$arg = [
'post_type' => 'jobs',
'name' => $jobname,
'fields' => 'ids',
'posts_per_page' => 1,
];
$result = get_posts( $arg );
if ( is_array($result) && !empty($result) )
$jobID = (int)$result[0];
}https://wordpress.stackexchange.com/questions/354723
复制相似问题