3

プラグインに書き換えルールを追加し、コードで配布する必要があります。WordPress ルート フォルダーの .htaccess にルールを配置すると、すべて正常に動作しますが、ルールと共にプラグインを配布する必要があります。

プラグイン フォルダー内に .htaccess を配置してadd_rewrite_rule関数を使用しようとしましたが、どちらも機能しません。

ここでは、WordPress ルート フォルダーでは正しく機能するが、プラグイン フォルダーでは機能しない .htaccess コードを示します。

<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が見つからないというエラーが常に発生します。私が間違っていることは何ですか?どうすれば必要なことを行うことができますか? 同様の質問を検索しましたが、問題を解決するものはありません。

私のプラグインのフォルダ構造は次のとおりです。

メインフォルダー: /wp-content/plugins/my-plugin ------ /pages (サブフォルダー) --------------/request.php (リクエストを受け取るスクリプト)

4

2 に答える 2

4

注: WordPress Rewrite API は、Apache Rewrite モジュールと同じではありません。WP Rewrite 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ください。

参考文献:

于 2013-01-31T10:40:11.440 に答える
1

WP は、次の/wp-adminように、PHP スクリプト (admin.php) を使用してディレクトリからプラグインを処理します。

http://MyWP.com/wp-admin/admin.php?page=MyPlugin/module.php

したがって、プラグイン ディレクトリ内の .htaccess ファイルは、プラグインが呼び出されたときに解析されません。wp-adminすでにわかっているように、それらはディレクトリまたはルートディレクトリに配置する必要があります。

プラグインのインストール時に .htacces ファイルをルート ディレクトリにコピーし、削除時に削除することは可能ですが、最適なオプションではないと思います。.htaccess ファイルを WP スペースに置くことは、良い考えとは思えません。

2 番目のアプローチははるかに優れているように見えます: メイン スクリプトで書き換えルールを作成します。

あなたのコードを見ると、問題はパターン(一致する着信 URL 文字列) と、おそらく置換 URL パス (質問の $plugin_url) にあると思います。

関数の$ruleパラメーターはadd_rewrite_rule()、プラグインのモジュールを呼び出すために使用される URL (上記) のセグメントをキャプチャする必要があります。

書き換えルールの正規表現から推測できるものを除いて、プラグインとそのディレクトリツリーに関する十分な情報を提供していないため、他に何も提案できません。ただし、これは必要なものを達成するための一般的な考え方です。

于 2013-01-31T08:08:27.400 に答える