このようなURLと一致させようとしています
linktosite/alphaNum/123/321/alphanum[alphanum].jpg
.htaccessで、すべてのグループを適切に一致させて抽出することができます。
linktosite/(.+)/([0-9]+)/([0-9]+)/(.+)\\[(.+)\\]\\.(.+)$
add_rewrite_ruleでは、一致させることができません。 [
、\\[
、\\\\[
で\\\\\\\\[
をエスケープしてみました
そして何もうまくいきません。私はまた\Q[\E
を試して、それを\x5b
\091
として使用しましたが、何もうまくいきません。また、([^\\[]+)
までの[
以外の文字と一致するように[
を試してみました
このようなメタキャラクタを一致させるための適切な方法は何ですか?リテラル\()
についても同じことをします
私はこれがWordPressのあまり文書化されていない機能の1つであることを発見したので、うまくいけばこれは軌道に乗っているか、WP_Rewriteにもっと流暢な人によって修正されるでしょう。
基本的な要旨はこうです:
init
中に、ルール内にあるカスタムクエリ文字列パラメータにはadd_rewrite_tag()
を使用します。宛先がindex.php?this_is_custom=$matches[1]
の場合は、this_is_custom
タグを追加する必要があります。function wpse_39626_init() {
// these must be added during init. if you haven't done
// add_rewrite_tag() for all custom query string vars,
// wordpress will ignore them.
add_rewrite_tag( '%wpse_thing%', '(\w+)' );
add_rewrite_tag( '%wpse_name%', '(\w+)' );
add_rewrite_tag( '%wpse_index%', '(\w+)' );
// manually flushing rules so this code is easier to demo.
// under normal circumstances you would use the plugin
// activation hook. this will eventually call wpse_39626_rules().
flush_rewrite_rules();
}
add_action( 'init', 'wpse_39626_init' );
// Normally, this would get called during something like
// your plugin's activation hook. See register_activation_hook().
function wpse_39626_activate() {
add_rewrite_rule( 'testing/(\w+)\[(\w+)\]', 'index.php?wpse_thing=custom&wpse_name=$matches[1]&wpse_index=$matches[2]', 'top' );
flush_rewrite_rules();
}
//register_activation_hook( __FILE__, 'wpse_39626_activate' );
// Hook into rewrite_rules_array, in case rewrite rules
// are flushed after the plugin is activated.
function wpse_39626_rules( $rules ) {
$new_rules = array();
// Matches: testing/outer[inner]
// wpse_name = outer
// wpse_index = inner
$new_rules['testing/(\w+)\[(\w+)\]'] = 'index.php?wpse_thing=custom&wpse_name=$matches[1]&wpse_index=$matches[2]';
// prepend and return rules
return $new_rules + $rules;
}
add_action( 'rewrite_rules_array', 'wpse_39626_rules' );
// Here's some demo code to intercept the page load
// and do custom functionality when our rewrite rule
// matches. (We'll just dump the matched values.)
function wpse_39626_posts( $query ) {
if( ! is_main_query( $query ) ) {
return;
}
if( $query->get('wpse_thing') != 'custom' ) {
return;
}
var_dump( $query->get('wpse_name') );
var_dump( $query->get('wpse_index') );
die;
}
add_action( 'pre_get_posts', 'wpse_39626_posts' );
あなたの例は、特にあなたがマッチさせようとしているURL(それらのすべてのパラメータが何に対応しているか?)において、少しコードの上に軽いので、私の答えはやや一般的です。