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 路径中找到。
我创建了一个 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 路径中找到。