WordPress 用のプラグインを作成しようとしていますが、wp_rewrite 機能に関していくつか問題があります。
URL を介して変数を渡すことにより、1 つのページを複数のページとして表示したい (例: www.mysite.com/WordPress?variable=helloall)
ただし、パーマリンク構造をそのまま維持したいので、URLを次のように表示したい:
www.mysite.com/WordPress/helloall
次に、スラッグを取得して、それを使用してデータベースを検索できるようにしたいと考えています。(最初に述べた一般的な方法を使用していた場合に $_GET を使用するように)
オンラインでいくつかのチュートリアルを見つけましたが、まだこれを機能させることができます。私の問題は、ルールを正しく書く方法を理解していないことが原因だと思います。
私はこのチュートリアルを使用しました:
http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html
ほとんどの場合、同じコードを使用しようとしました。ルールを設定することはできますが、彼らは私のために働きたくないようです
これを行うための正しい形式を誰か教えてもらえますか?
編集
これが私の現在の機能です
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(.?.+?)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(.?.+?)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');
解決
これを回答として投稿するつもりでしたが、現時点では自分の質問に答えることができないようです。代わりに、元の投稿を編集しています。
まず、上記のコードは正しいですが、ルールをフラッシュしていなかったために機能しなかったため、次のコードでこれを行います。
function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action( 'init', 'flush_rewrite_rules');
私の新しい問題は、コードが少しうまく機能し、必要なページだけでなくすべてのページをリダイレクトすることでした。これは、子ページが表示されないことを意味し、これは少し問題でした。編集:
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(testpage)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
したがって、wp_rewrite 機能に関する私の最終的なコードは次のとおりです。
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(testpage)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
function query_vars($public_query_vars)
{
$public_query_vars[] = "varname";
return $public_query_vars;
}
function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action( 'init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');
これにより、将来誰かが時間を節約できることを願っています。