web-dev-qa-db-ja.com

プラグインに書き換えルールを追加する:プラグインフォルダの.htaccessまたはWordPress機能を使用する

私は自分のプラグインに書き換えルールを追加し、私のコードでそれを配布する必要があります。 WordPressのルートフォルダの.htaccessにルールを入れてもすべてうまくいきますが、プラグインを自分のルールと一緒に配布する必要があります。

私はプラグインフォルダの中に.htaccessを入れて add_rewrite_rule 関数を使おうとしますが、どちらもうまくいきません。

ここで、.htaccessコードはWordPressのルートフォルダでは正常に機能しますが、私のプラグインフォルダでは機能しません。

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1

</IfModule>

私は自分のプラグインでフォローコードを試してみますが、どちらも動作しません:

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $query_vars )
{
    $query_vars[] = 'pid';
    return $query_vars;
}
add_action( 'init', 'add_init' );
function add_init()
{
    $plugin_url = 'the-path-to-my-plugin-folder';
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php'
                  , $plugin_url . 'pages/request.php?pid=$matches[1]','top');

    global $wp_rewrite;
    $wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}

しかし、URLが見つからなかったというエラーが常に発生します。何が悪いの?どうしたら私は必要なことができますか?私は似たような質問を探しましたが、私の問題を解決するものは一つもありません。

3
leticia

注:WordPress Rewrite APIはApache Rewriteモジュールと同じではありません。 WPリライトAPIはリクエストを別のURLにリダイレクトしません。現在のURLを解析してquery_vars配列を埋めるために使用されていました。

問題はあなたのadd_rewrite_rule関数呼び出しの2番目のパラメータにあります。それはindex.php?から始めなければなりません、そしてそれからpidのようなあなたの引数があるべきです、例えば:

"index.php?pid=$matches[1]...."

したがって、add_init関数は次のようになります。

add_action( 'init', 'wpse8170_add_init' );
function wpse8170_add_init()
{
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php', 'index.php?pid=$matches[1]', 'top');
}

Settings"Permalinksページにアクセスして書き換えルールをフラッシュすることを忘れないでください。

参考文献:

1
Eugene Manuilov