add_rewrite_rule 使用父主题但不使用子主题

add_rewrite_rule working in parent theme but not in child theme

我创建了一个 CPT 并使用以下代码创建了添加重写规则以实现以下 URL 结构:

https://www.example.com/coupons/company/

function custom_rewrite_basic() 
{
    add_rewrite_rule('^coupons/([a-z0-9-]+)[/]?$', 'coupons/?host=', 'top');
}
add_action('init', 'custom_rewrite_basic');

add_action( 'template_include', function( $template ) {
    if ( get_query_var( 'host' ) == false || get_query_var( 'host' ) == '' ) {
        return $template;
    }
 
    return  get_theme_file_path().'/list-coupons.php';
} );

我已将上述代码放在子主题的 functions.php 中,但出现 404 错误。当我在父主题的 functions.php 文件中上传此代码时,相同的代码成功运行。

注意:list-coupons.php 文件作为自定义模板存在于子主题中。

谁能帮我解决这个问题?

WordPress 的 get_query_var() 函数仅在 WP_Query class.

中检索其本机查询变量的值

因此,在 add_action( 'template_include'... 之前,您必须手动将自定义查询变量 'host' 添加到 public 查询变量数组中,例如 this:

function themeslug_query_vars( $qvars ) {
    $qvars[] = 'host';
    return $qvars;
}
add_filter( 'query_vars', 'themeslug_query_vars' );

这个条件一直是true:

if ( ... || get_query_var( 'host' ) == '' ) {
 return $template;
}

因此您总是在 return 中获得默认模板路径。 将您的代码放入子主题的 functions.php.

时会产生 404

因为默认模板只能在父主题内的 returned 路径中找到。