访问不存在的页面时WordPress自定义URL结构导致奇怪的结果

时间:2017-06-13 10:18:12

标签: php wordpress custom-post-type permalinks

我们正在WordPress中创建一个网站,我们需要在作业类型的永久链接结构中使用唯一的ID。永久链接结构如下所示:http://headway.xpandcreative.co.uk/jobs/5934-sales-executive-4/

前面的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/

有人可以就此提出建议吗?

谢谢

2 个答案:

答案 0 :(得分:0)

插件Debug This可以帮助您确定哪个重写规则导致加载作业页面。我有一个类似的问题,通过使用rewrite_rules_array过滤器删除和插入重写规则并通过posts_where过滤器操作帖子查询来解决它。希望它有所帮助。

答案 1 :(得分:0)

您有$queryarg = 'post_type=jobs&p=',这意味着您的示例会变成$queryarg = 'post_type=jobs&p=5934-sales-executive-4'

由于p旨在成为int类型的帖子ID,因此Wordpress会对输入进行清理。

我没有仔细检查它是如何完成的,但是当你尝试做类似的事情时

$returnValue = intval('5934-sales-executive-4', 10);

你会得到这个案例值5934,我认为这是在这里发生的。