私は私のワードプレスプラグインのカスタムURL書き換えを作成しようとしています。
function insert_plugin_rewrite_rule($rules) {
global $wp, $wp_rewrite;
$wp->add_query_var('update_slug');
$ret = $wp_rewrite->add_rule('updates/plugins/([^/]+)/', 'index.php?update_slug=$matches[1]', 'top');
// Remove when debugging is done.
$wp_rewrite->flush_rules(false);
}
add_filter('init', 'insert_plugin_rewrite_rule');
そしてそれを試して傍受するには:
function blah() {
global $wp;
echo "<pre>";print_r($GLOBALS['wp']->query_vars['update_slug']);echo "</pre>";
}
add_filter('init', 'blah');
私が 'blah'関数を使っているとき、それは私のupdate_slugクエリvarが登録されていること、そして私のurlも登録されていることを示しています。しかし、私が/ updates/plugins/123 /に行ってもquery_varsが設定されていることは何も表示されません。
私はこれを正しくやっていますか、それとも私が見逃している微妙なことがありますか?
まず、適切なフィルタとメソッドを使用してクエリ変数を追加し、ルールを書き換えて、グローバルを直接操作しないでください。私が信じるもう一つの問題はあなたの正規表現パターンです、これは私のために働いています:
add_filter( 'query_vars', 'wpa59404_query_vars' );
function wpa59404_query_vars($query_vars){
$query_vars[] = 'update_slug';
return $query_vars;
}
add_action( 'init', 'wpa59404_rewrites' );
function wpa59404_rewrites(){
add_rewrite_rule(
'updates/plugins/([^/]+)/?$',
'index.php?update_slug=$matches[1]',
'top'
);
}