我正在写一个需要写入的小插件。htaccess一个简单的non\\u wp\\u规则,我是这样做的:
function ci_flush_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
register_activation_hook(__FILE__, \'ci_flush_rules\');
function ci_add_rules()
{
global $wp_rewrite;
$proxy = plugin_dir_path(__FILE__) . \'proxy.php\';
$non_wp_rules = array(\'(.*)\\.(jpe?g|gif|png)$\' => $proxy);
$wp_rewrite->non_wp_rules = $non_wp_rules + $wp_rewrite->non_wp_rules;
}
add_action(\'generate_rewrite_rules\', \'ci_add_rules\');
规则写在中。htaccess文件符合预期。
现在我有两个问题。
Problem 1
当我尝试在插件停用期间删除此规则时,如下所示:
function ci_remove_rules()
{
global $wp_rewrite;
$wp_rewrite->non_wp_rules = array();
$wp_rewrite->flush_rules();
}
register_deactivation_hook( __FILE__, \'ci_remove_rules\' );
该规则不会被删除。如果我停用插件,然后访问Settings>Permalinks,它会删除该规则。
Problem 2
WordPress安装在子目录中
( http://localhost/wordpress )
当规则写入时。htaccess看起来像这样:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\\.php$ - [L]
RewriteRule ^(.*)\\.(jpe?g|gif|png)$ /wordpress/Applications/MAMP/htdocs/wordpress/wp-content/plugins/myplugin/proxy.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
正如您所看到的,不是像/Applications/MAMP这样的路径。。。。它是/wordpress/Applications/MAMP。。。。
这是第一次处理wp\\U重写内容,请与我交流:)
SO网友:TheDeadMedic
Problem 1
你的钩子
ci_add_rules()
刷新规则时仍将运行,因此请先将其删除(并避免“取消设置”)
non_wp_rules
, 你会破坏其他使用它的插件)。
function ci_remove_rules()
{
remove_action( \'generate_rewrite_rules\', \'ci_add_rules\' );
$GLOBALS[\'wp_rewrite\']->flush_rules();
}
Problem 2
非常确定您想要:
plugin_dir_url( \'proxy.php\', __FILE__ )
。。而不是:
plugin_dir_path( __FILE__ ) . \'proxy.php