我使用woomerce和“yith woomerce ajax导航”插件来过滤品牌。结果是显示为https://example.com/products/racquets/tennis-racquets/?filter_brands=47的链接。
理想情况下,我想改用https://example.com/products/racquets/tennis-racquets/brands/wilson
我尝试过使用apache mod_重写规则,例如:

RewriteRule ^products/racquets/tennis-racquets/?filter_brands=47 /products/racquets/tennis-racquets/wilson [QSA,L]

我也试过为我的functions.php文件编写一个函数,但这两个函数似乎都没有捕捉到。这是我尝试使用的代码示例。
function brand_rewrite_rules() {
    add_rewrite_rule( 'products/racquets/tennis-racquets/?filter_brands=47', 'products/racquets/tennis-racquets/wilson', 'top' );
    flush_rewrite_rules();
}
add_action( 'init', 'brand_rewrite_rules' );

我确实尝试过更新permalink设置,但是这个函数什么也没做。有人能提出解决办法吗?

最佳答案

这是一个添加Rewrite Endpoint的问题:
添加终结点将为提供的位掩码指定的每个匹配位置创建额外的重写规则。还将创建与端点同名的新查询变量。端点定义后面的字符串提供此查询变量的值(例如"/foo/bar/"变为"?foo=bar")。

<?php
/**
 * Plugin Name: Add a Brand endpoint to the URLs
 * Plugin URI:  http://stackoverflow.com/a/24331768/1287812
 */

add_action( 'init', function()
{
    add_rewrite_endpoint( 'brands', EP_ALL );
});

add_filter( 'query_vars', function( $vars )
{
    $vars[] = 'brands';
    return $vars;
});

/**
 * Refresh permalinks on plugin activation
 * Source: http://wordpress.stackexchange.com/a/108517/12615
 */
function WCM_Setup_Demo_on_activation()
{
    if ( ! current_user_can( 'activate_plugins' ) )
        return;

    $plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
    check_admin_referer( "activate-plugin_{$plugin}" );

    add_rewrite_endpoint( 'brands', EP_ALL ); #source: http://wordpress.stackexchange.com/a/118694/12615
    flush_rewrite_rules();
}
register_activation_hook(   __FILE__, 'WCM_Setup_Demo_on_activation' );

然后,在模板中按如下方式使用:
$brand = get_query_var('brand') ? urldecode( get_query_var('brand') ) : 'Empty endpoint';
echo $brand;

08-25 10:46