Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress自定义URL结构在访问不存在的页面时会导致奇怪的结果_Php_Wordpress_Custom Post Type_Permalinks - Fatal编程技术网

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

Php WordPress自定义URL结构在访问不存在的页面时会导致奇怪的结果,php,wordpress,custom-post-type,permalinks,Php,Wordpress,Custom Post Type,Permalinks,我们正在WordPress中创建一个网站,我们需要在permalink结构中为职位类型创建一个唯一的ID。permalink结构如下所示: 前面的ID是post ID。问题是,如果我们访问一个URL,比如:它仍然显示作业,尽管它显然应该是404 我用于创建此永久链接结构的代码是: // Rewrite permalink structure function jobs_rewrite() { global $wp_rewrite; $queryarg = 'post_type=j

我们正在WordPress中创建一个网站,我们需要在permalink结构中为职位类型创建一个唯一的ID。permalink结构如下所示:

前面的ID是post ID。问题是,如果我们访问一个URL,比如:它仍然显示作业,尽管它显然应该是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);
请在这里查看网站

有人能给我一个建议吗


谢谢

插件可以帮助您找出导致加载作业页面的重写规则。我遇到了一个类似的问题,通过使用过滤器删除和插入重写规则,并通过过滤器另外操作posts查询,解决了这个问题。希望有帮助。

您有
$queryarg='post\u type=jobs&p='
,这意味着在您的示例中变成
$queryarg='post\u type=jobs&p=5934-sales-executive-4'

由于
p
旨在作为类型为
int
的post ID,Wordpress会清理输入

我还没有详细研究它是如何完成的,但当你尝试自己做一些事情时,比如:

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

在本例中,您将获得值
5934
,我认为这正在发生。

Hi@Picard感谢您的回复。你说明了问题所在,但有什么解决办法吗?我需要的url结构是类似于理想世界中的sales-executive-1654。我只能用前面的id来获取它,但我想这是因为我正在替换id,正如您所说,它是一个int。您可以尝试为id解析slug,如:
$wp\u rewrite->add\u rewrite\u标记(“%cpt\u id%”,“[a-zA-Z0-9\-]+\([0-9]+)”,$queryarg)
因此,
$queryarg
将只获得最后的ID-您必须测试正则表达式,因为我还没有测试它。谢谢您的评论。也许我误解了如何实现它,但它对我不起作用。