使用重写规则从主页访问插件的视图

时间:2015-12-16 作者:Mehdi Rahimi

我正在创建一个插件,它在前端有一个视图,我在主页上有一个链接可以访问它:
/wp-content/plugins/wp-test-plugin/public/partials/wp-test-plugin-public-display.php.

但我需要一个重写规则来使用短url访问它,如:
/wp-test-plugin

我的重写功能不起作用:

public function my_rewrite_roles() {
    global $wp_rewrite;
    $new_rules = array(\'^wp-test-plugin/?$\' => \'wp-content/plugins/wp-test-plugin/public/partials/wp-test-plugin-public-display.php\');
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    //return $wp_rewrite->rules;
}

1 个回复
最合适的回答,由SO网友:jgraup 整理而成

如果文件可读,这将创建/处理端点并尝试加载php。注意:您不想在此处刷新重写规则,但它可以确保您可以快速测试。

if (!class_exists(\'WPTestPluginEndpoint\')):

    class WPTestPluginEndpoint
    {
        const ENDPOINT_QUERY_NAME = \'__my_test_plugin\';

        // WordPress hooks

        public function init()
        {
            add_filter(\'query_vars\', array($this, \'add_query_vars\'), 0);
            add_action(\'parse_request\', array($this, \'sniff_requests\'), 0);
            add_action(\'init\', array($this, \'add_endpoint\'), 0);
        }

        // Add public query vars
        public function add_query_vars($vars)
        {
            $vars[] = static::ENDPOINT_QUERY_NAME;

            return $vars;
        }

        // Add API Endpoint

        public function add_endpoint()
        {
            $query_name = self::ENDPOINT_QUERY_NAME;
            add_rewrite_rule(\'^wp-test-plugin/?\', "index.php?{$query_name}=1", \'top\');

//////////////////////////////////////
//////////////////////////////////////
// don\'t do this all the time!!!
//////////////////////////////////////
flush_rewrite_rules(false);
//////////////////////////////////////
//////////////////////////////////////
        }

        // Sniff Requests

        public function sniff_requests()
        {
            global $wp;
            if (isset($wp->query_vars[ self::ENDPOINT_QUERY_NAME ])) {
                $this->handle_request(); // handle it
                exit;
            }
        }

        // Handle Requests

        protected function handle_request()
        {
            $public_display = WP_PLUGIN_DIR . \'/wp-test-plugin/public/partials/wp-test-plugin-public-display.php\';

            if( is_readable( $public_display )) {

                require $public_display;

            }
            else {

                wp_die("Can\'t find Render Page ". $public_display );

            }

            die(); // nothing to be done
        }
    }

    $wptept = new WPTestPluginEndpoint();
    $wptept->init();

endif; // WPTestPluginEndpoint

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。