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拿到了,我认为这是发生在这里。

+0

Hi @Picard感谢您的回复。你说过问题是什么,但是有没有解决办法?我需要在理想世界中的url结构成为sales-executive-1654。只能用前面的id来得到它,但我想这是因为我正在替换ID,正如你所说,它是一个整数。 –

+0

你可以尝试解析这个id的slu like,例如:'$ wp_rewrite-> add_rewrite_tag('%cpt_id%','[a-zA-Z0-9 \ - ] + \ - ([0-9] +)' ,$ queryarg);''所以'$ queryarg'只会得到你最后得到的ID - 你将不得不测试正则表达式,因为我没有测试它。 – Picard

+0

感谢您的评论。也许我误解了如何实现它,但它不适合我。 –