我使用插件按类别过滤WooCommerce产品。我想将过滤过程中生成的url更改为pretty url。
所以代替https://example.de/products/cars/?yith_wcan=1&product_cat=red
,我想要https://example.de/products/cars/red/
插件默认不支持这个,所以我看add_rewrite_rule。
add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);
function myplugin_rewrite_tag_rule() {
add_rewrite_tag( '%cars%', '([^&]+)' );
add_rewrite_rule('cars/([^/]*)/?','index.php?pagename=cars/?yith_wcan=1&product_cat=$matches[1]','top');
}
但是带过滤器的url/cars/没有出现
echo add_query_arg( $wp->query_vars, home_url() );
显示,非重定向url工作
我显示了永久链接,但它没有帮助。
可能它不工作,因为你还没有注册你的查询变量。试试这段代码。
function register_custom_query_vars($vars) {
$vars[] = "cars";
return $vars;
}
add_filter('query_vars', 'register_custom_query_vars');
function custom_rewrite_endpoint(){
add_rewrite_endpoint( 'cars', EP_ROOT | EP_PERMALINK | EP_CATEGORIES | EP_PAGES );
}
add_filter('init','custom_rewrite_endpoint');
/**
* uncomment this for
* flushing rewrite rules after changes
**/
//flush_rewrite_rules(true);
https://example.de/products/cars/red/
<?php echo get_query_var('cars'); ?>
应该输出'red'。
然而,你的woocommerce插件可能仍然需要初始$_GET查询变量才能正常工作。您可以设置var -但不建议这样做:
$_GET['product_cat'] = $cars;
如果你已经为这个插件付费,最好坚持一个适当的集成重写功能。