You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Rewrite规则致WordPress Elementor编辑异常(关联Polylang)

问题:自定义Rewrite规则致Elementor编辑模式崩溃(关联Polylang)

环境

  • WordPress 6.7.2
  • Elementor Pro 3.28.2
  • Polylang 3.6.7

核心问题

自定义两条Rewrite规则,实现/fr/xxx或/en/xxx这类链接加载数据库中的汽车品牌信息,前台功能完全正常,但导致WordPress后台点击「用Elementor编辑」时页面无法加载,必须进入安全模式。禁用这两条规则后,Elementor编辑恢复正常。

问题规则如下:

'^fr/(?!garage|cars|elementor|car-page|compare-your-cars)([A-Za-z0-9-]+)/?$' => 'index.php?pagename=car-make-fr&make=$matches[1]',
'^en/(?!garage|cars|elementor|car-page|compare-your-cars)([A-Za-z0-9-]+)/?$' => 'index.php?pagename=car-make&make=$matches[1]',

排查过程

  1. 尝试通过is_edit_mode()及自定义函数FF_bElementor_Edition_mode_PHP_v2判断编辑模式,仅在非编辑模式启用规则,未解决问题。
  2. 发现问题与Polylang强关联,测试流程:
    • 初始状态:页面编辑报错,需安全模式
    • 禁用Polylang:编辑恢复正常
    • 启用Polylang:编辑正常,但自定义规则失效
    • 进入「设置→固定链接」保存(刷新Rewrite规则):编辑再次报错,自定义规则恢复生效

完整代码

Rewrite规则函数

function FF_rewrite_url_rules($rules) {
    $new_rules = array(
        // Car-Series
            // Version FR : fr/garage/{make}/{model}
            '^fr/garage/([^/]+)/([^/]+)/?$' => 'index.php?pagename=car-series-fr&make=$matches[1]&model=$matches[2]', // fr/garage/X/Y ==> fr/garage/bmw/3-series // Page "Car Series" / index.php?pagename=car-series&make=bmw&model=3-series
            // Version EN : en/garage/{make}/{model}
            '^en/garage/([^/]+)/([^/]+)/?$' => 'index.php?pagename=car-series&make=$matches[1]&model=$matches[2]',
    // Car-Versions
        // Version FR : fr/garage/{make}/{model}/{series}
        '^fr/garage/([^/]+)/([^/]+)/([^/]+)/?$' => 'index.php?pagename=car-versions-fr&make=$matches[1]&model=$matches[2]&series=$matches[3]', // fr/garage/X/Y/Z ==> fr/garage/bmw/3-series/sport-line // Page "Car Versions" / index.php?pagename=car-versions&make=$matches[1]&model=$matches[2]&series=$matches[3] / Encore utilisé ??
        // Version EN : en/garage/{make}/{model}/{series}
        '^en/garage/([^/]+)/([^/]+)/([^/]+)/?$' => 'index.php?pagename=car-versions&make=$matches[1]&model=$matches[2]&series=$matches[3]',
    
    // Car-page
        // Version FR : fr/cars/{ID_Car}
        '^fr/cars/([0-9]+)/?$' => 'index.php?pagename=car-page-fr&ID_Car=$matches[1]', // fr/cars/XXX ==> fr/cars/123 // Page "Car Page" / index.php?pagename=car-page&ID_Car=123
        // Version EN : en/cars/{ID_Car}
        '^en/cars/([0-9]+)/?$' => 'index.php?pagename=car-page&ID_Car=$matches[1]',

    // compare-your-cars v1
    '^fr/compare-cars-old/?$' => 'index.php?pagename=compare-your-cars-fr',
    '^en/compare-cars-old/?$' => 'index.php?pagename=compare-your-cars',

    // compare-your-cars v2
    '^fr/compare-cars/?$' => 'index.php?pagename=compare-your-cars-v2-fr',
    '^en/compare-cars/?$' => 'index.php?pagename=compare-your-cars-v2',

    // Car-make
        // Les règles "Car-make" posent problème en mode édition, donc on ne les ajoute que si on n'est PAS en mode édition.
        // On exclut ici :
        //      Les pages qui ne sont PAS des makes : 'garage', 'cars'
        //      Les pages d'édition Wordpress/Elementor : 'elementor', 'car-page', 'compare-your-cars' (et éventuellement d'autres slugs réservés)
        
    // Version FR : fr/{make}
    // '^fr/(?!garage|cars)([A-Za-z0-9-_]+)/?$' => 'index.php?pagename=car-make-fr&make=$matches[1]',
    '^fr/(?!garage|cars|elementor|car-page|compare-your-cars)([A-Za-z0-9-_]+)/?$' => 'index.php?pagename=car-make-fr&make=$matches[1]',
    // Version EN : en/{make} 
    // '^en/(?!garage|cars)([A-Za-z0-9-_]+)/?$' => 'index.php?pagename=car-make&make=$matches[1]',
    '^en/(?!garage|cars|elementor|car-page|compare-your-cars)([A-Za-z0-9-_]+)/?$' => 'index.php?pagename=car-make&make=$matches[1]',
);

// Les nouvelles règles sont placées avant les règles existantes
// custom_log('FF_rewrite_url_rules is returning new rules');

custom_log('FF_rewrite_url_rules / Returning rules merged with personal rules');
return array_merge($new_rules, $rules);
}

添加Rewrite过滤器的代码

// Ajouter le filtre pour générer les règles de réécriture
add_filter('generate_rewrite_rules', function($wp_rewrite) {
    // if(!FF_bElementor_Edition_mode_PHP_v2()){
    // N'appliquer les règles personnalisées que si l'éditeur Elementor n'est PAS actif
    if (\Elementor\Plugin::$instance->editor->is_edit_mode() ) {
        custom_log('generate_rewrite_rules filter / Elementor IS in Edition mode / Not changing rules');
    } elseif (\Elementor\Plugin::$instance->preview->is_preview_mode() ) {
        custom_log('generate_rewrite_rules filter / Elementor IS in Preview mode / Not changing rules');
    } else {
        custom_log('generate_rewrite_rules filter / Elementor is NOT in Edition or Preview mode / Merging rules');
        $wp_rewrite->rules = FF_rewrite_url_rules($wp_rewrite->rules); }
});

请求解决

目前该问题已困扰多时,希望能找到方案,既保留前台自定义链接的功能,又能正常使用Elementor编辑页面。

内容的提问来源于stack exchange,提问作者Franck FELIX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:45:02