我正在尝试向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不允许的事情?
谢谢
最合适的回答,由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\'];