WordPress自定义网址结构导致奇怪的结果当访问不存在页面
问题描述:
我们正在WordPress中创建一个网站,我们需要一个唯一的ID在永久链接结构中的作业职位类型。永久链接结构如下所示:http://headway.xpandcreative.co.uk/jobs/5934-sales-executive-4/WordPress自定义网址结构导致奇怪的结果当访问不存在页面
前面的ID是发帖ID。问题是,如果我们去像一个网址:http://headway.xpandcreative.co.uk/jobs/5934-sales-executive-4dediejidjiedjiejdiendjeijdejdjie/它仍然显示作业,即使它应该明确是404
我用它来创建此永久链接结构的代码是:
// Rewrite permalink structure
function jobs_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=jobs&p=';
$wp_rewrite->add_rewrite_tag('%cpt_id%', '([^/]+)', $queryarg);
$wp_rewrite->add_permastruct('jobs', '/jobs/%cpt_id%/', false);
}
add_action('init', 'jobs_rewrite');
function jobs_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
// $post = &get_post($id);
global $post;
if (is_wp_error($post))
return $post;
$newlink = $wp_rewrite->get_extra_permastruct('jobs');
$newlink = str_replace('%cpt_id%', $post->ID . '-' . $post->post_name, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
add_filter('post_type_link', 'jobs_permalink', 1, 3);
请看看这里的网站http://headway.xpandcreative.co.uk/jobs/
任何人都可以给我这个建议吗?
感谢
答
插件Debug This可以帮助你找出哪些重写规则导致正在加载的工作页。我遇到了类似的问题,并通过使用rewrite_rules_array过滤器删除和插入重写规则并通过posts_where过滤器额外处理帖子查询来解决此问题。希望能帮助到你。
答
你有$queryarg = 'post_type=jobs&p='
这意味着在你的例子变成$queryarg = 'post_type=jobs&p=5934-sales-executive-4'
。
由于p
打算是邮政编号,其类型是int
,Wordpress消毒输入。
我还没有搜查它是如何做到准确,但是当你尝试自己做一些事情,如:
$returnValue = intval('5934-sales-executive-4', 10);
,你会在这种情况下,价值5934
拿到了,我认为这是发生在这里。
Hi @Picard感谢您的回复。你说过问题是什么,但是有没有解决办法?我需要在理想世界中的url结构成为sales-executive-1654。只能用前面的id来得到它,但我想这是因为我正在替换ID,正如你所说,它是一个整数。 –
你可以尝试解析这个id的slu like,例如:'$ wp_rewrite-> add_rewrite_tag('%cpt_id%','[a-zA-Z0-9 \ - ] + \ - ([0-9] +)' ,$ queryarg);''所以'$ queryarg'只会得到你最后得到的ID - 你将不得不测试正则表达式,因为我没有测试它。 – Picard
感谢您的评论。也许我误解了如何实现它,但它不适合我。 –