基本上,我尝试允许这样的URL:
https://example.com/products/my-product/test
我在使用WooCommerce,我的产品基础是
/products
, 产品名称为
My Product
在这里我想允许URL段
/test
然后检测并重定向到自定义模板。
我就快到了,但我不能template_include
筛选以正确使用自定义模板。
add_filter( \'query_vars\', function ( $vars ) {
$vars[] = \'test\';
return $vars;
} );
add_action( \'init\', function () {
flush_rewrite_rules(); // for testing only
$product_base = ltrim( get_option( \'woocommerce_permalinks\' )[ \'product_base\' ], \'/\' );
add_rewrite_rule( "{$product_base}/([^/]+)/test", \'index.php?product=$matches[1]&test=1\', \'top\' );
} );
add_filter( \'template_include\', function( $template ) {
if ( get_query_var( \'test\' ) ) {
$template = get_stylesheet_directory() . \'/templates/test.php\';
}
return $template;
}, 1, PHP_INT_MAX );
The
template_include
函数正在正确返回要使用的模板,但当我转到
https://example.com/products/my-product/test
它只返回产品页面。
SO网友:Timothy Fisher
看来我要做的就是template_include
过滤器内部init
行动资料来源:https://stackoverflow.com/a/50037707/5749974
add_action( \'init\', function () {
$product_base = ltrim( get_option( \'woocommerce_permalinks\' )[ \'product_base\' ], \'/\' );
add_rewrite_rule( "{$product_base}/([^/]+)/test", \'index.php?product=$matches[1]&test=1\', \'top\' );
add_filter( \'template_include\', function( $template ) {
if ( get_query_var( \'test\' ) ) {
$template = get_stylesheet_directory() . \'/templates/test.php\';
}
return $template;
} );
} );
现在
https://example.com/products/my-product
和
https://example.com/products/my-product/test
两个负载均正确!