External Rewrite Rules

时间:2013-01-16 作者:skustes

我正在尝试向Wordpress添加重写规则。我想重写:“http://www.domain.com/plm_check/var_a/var_b/var_c/“实际使用来自的文件”http://www.domain.com/wp-content/plugins/plm/webservices/plm_check.php?var_a=...&;var\\u b=&;var\\u c=。。。“”

我是这样注册的:

/* Register rewrites for web service calls */
add_action( \'generate_rewrite_rules\' , \'register_plm_rewrites\');
function register_plm_rewrites() { //
    global $wp_rewrite; 

    $wp_rewrite->add_external_rule( \'^plm_check/([a-zA-z0-9_]+)/([a-zA-z0-9-]+)/([0-9]+)/?$\' , PLM_PLUGIN_URL . \'webservices/plm_check.php\' );

    // Flush the rules
    $wp_rewrite->flush_rules(); 
}
我没有使用add\\u external\\u rule,而是尝试使用add\\u rewrite\\u rule,如下所示:

$wp_rewrite->add_rewrite_rule( \'^plm_check/([a-zA-z0-9_]+)/([a-zA-z0-9-]+)/([0-9]+)/?$\' , PLM_PLUGIN_URL . \'webservices/plm_check.php\' , \'top\' );
我也尝试过使用和不使用$wp\\u rewrite。

我认为问题是Wordpress不允许我直接以URL的形式访问该文件。例如,如果我只是加入“http://www.domain.com/wp-content/plugins/plm/webservices/plm_check.php“,它将我带到404页,即使该文件实际上存在。

我使用这些函数是否有误?钩住错误的动作?尝试做WP不允许的事情?

谢谢

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

这里有一个快速(希望没有错误!)添加内部重写并加载插件文件以处理这些请求的示例。这将允许您访问WordPress环境,以便您可以use the database, 等

一般步骤如下:

添加您的重写并将其指向索引。附加自定义查询变量的php注册自定义查询变量,以便WordPress知道它们是什么parse_request 操作并检查是否设置了一个查询变量。如果是,请加载插件文件并退出,然后WordPress进行默认查询并加载模板。

<?php
/*
Plugin Name: PLG
Plugin URI:
Description:
Author:
Version:
Author URI:
*/

class PLG {

    static $plugin_path;

    public function __construct(){
        $this->plugin_path = plugin_dir_path(__FILE__);
        register_activation_hook( __FILE__, array( $this, \'flush\' ) );
        add_action( \'init\', array( $this, \'init\') );
        add_filter( \'query_vars\', array( $this, \'query_vars\') );
        add_action( \'parse_request\', array( $this, \'parse_request\') );
    }

    public function flush(){
        $this->init();
        flush_rewrite_rules();
    }

    public function init(){
        add_rewrite_rule(
            \'plm_check/([a-zA-z0-9_]+)/([a-zA-z0-9-]+)/([0-9]+)/?$\',
            \'index.php?plmvar1=$matches[1]&plmvar2=$matches[2]&plmvar3=$matches[3]\',
            \'top\'
        );
    }

    public function query_vars( $query_vars ){
        $query_vars[] = \'plmvar1\';
        $query_vars[] = \'plmvar2\';
        $query_vars[] = \'plmvar3\';
        return $query_vars;
    }

    public function parse_request( &$wp ){
        if ( array_key_exists( \'plmvar1\', $wp->query_vars ) ){
            include $this->plugin_path . \'webservices/plm_check.php\';
            exit();
        }
        return;
    }

}
$wpa8185_plg = new PLG();
在插件文件中plm_check.php, 您可以访问查询变量,如:

<?php
global $wp;
echo $wp->query_vars[\'plmvar1\'];

SO网友:Mark Kaplun

在你的情况下add_rewrite_rul() 将呼叫add_external_rule() 它收集要写入您的规则。htaccess文件。如果您的。htaccess应该是写保护的,但它不会工作。我也不确定你的重写规则是否有效,你可能应该先手动编辑你的。htaccess。

此外,米洛的评论。

结束

相关推荐