代码之家  ›  专栏  ›  技术社区  ›  Bhargav Chudasama

在WordPress自定义插件中添加重写规则

  •  0
  • Bhargav Chudasama  · 技术社区  · 7 年前

    short url 我的客户页面的 my-pugin

    当我使用我的自定义页面,我会像下面的url

    http://localhost/wordpress/wp-content/plugins/my-plugin/testurl.php
    

    http://localhost/wordpress/testurl
    

    我在插件中编写了这段代码

    function create_rewrite_rules($rules) {
            //print_r($rules);
            global $wp_rewrite;
            $newRule = array('/testurl' => 'wp-content/plugins/my-plugin/testurl.php');
            //echo $newRule;
            $newRules = $newRule + $rules;
            //$newRules = $newRule;
            // echo "<pre>";
            // print_r($newRules);
            return $newRules;
        }
    
        function flush_rewrite_rules() {
            //echo 1;
            global $wp_rewrite;
            $wp_rewrite->flush_rules();
        }
    
    if(class_exists('MyPlugin'))
        $myPlugin = new MyPlugin();
    
    add_filter('rewrite_rules_array', array($myPlugin, 'create_rewrite_rules'));
    add_filter('init', array($myPlugin, 'flush_rewrite_rules'));
    

    但这没办法。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tameroski    7 年前

    有几件事你必须注意:

    • 您必须仅在插件激活/停用时刷新重写规则,而不是在初始化时刷新重写规则,以防止性能问题。
    • 这个 rewrite_rule 第一个参数必须是正则表达式。
    • 这个 init 钩子是一个动作,不是过滤器。

    下面的插件代码确实有效:

    <?php
    /*
    Plugin Name: Rewrite test
    */
    
    function custom_rewrite_basic() {
        add_rewrite_rule('^testurl?', 'wp-content/plugins/my-plugin/testurl.php', 'top');
    }
    
    register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
    register_activation_hook( __FILE__, 'myplugin_flush_rewrites' );
    function myplugin_flush_rewrites() {
        custom_rewrite_basic();
        flush_rewrite_rules();
    }
    

    希望这会有所帮助。