任意のURLに複数のquery_var/valueペアを追加したいです。たとえば、ページのベースURLは次のとおりです。
example.com/Nice-page/
私はすでに1つのエンドポイントを達成することができます(たとえば、ページ上のサブギャラリー)。
example.com/Nice-page/my-gallery/animals/cats
my-gallery
はquery_var、animals/cats
はその値です。これを使う:
add_rewrite_endpoint('my-gallery', EP_PAGES);
add_rewrite_endpoint('my-lightbox', EP_PAGES);
私はこれが機能するためにも必要です:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
my-lightbox
を追加のエンドポイントまたはquery_varとして登録したいのですが、my-gallery
がなくても独立して使用できるため、次のようになります。
example.com/another-page/my-lightbox/2345
現在私は値として全体のanimals/cats/my-lightbox/1234
を得ます。 my-lightbox
が既に存在する場合、WPに新しいquery_varがmy-gallery
で始まることを認識させることができません。書き換えタグが入力URL全体に作用しているようです。エンドポイントは入力URLの最後に作用しますが、正規表現の$ end-anchorは常にそこにあります。複数のquery_varsを複雑なURLに整形するために書き換えAPIを使用することさえ可能ですか?
私はこれが機能するためにも必要です:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
my-lightbox
を追加のエンドポイントまたはquery_varとして登録したいのですが、my-gallery
がなくても独立して使用できるため、次のようになります。example.com/another-page/my-lightbox/2345
これはadd_rewrite_rule()
を使ったそれの例です:
add_action( 'init', function() {
// This will let you use get_query_var( 'my-gallery' ).
add_rewrite_endpoint( 'my-gallery', EP_PAGES );
// This will let you use get_query_var( 'my-lightbox' ).
add_rewrite_endpoint( 'my-lightbox', EP_PAGES );
add_rewrite_rule(
'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\d+)|my-gallery/(.+?)|/?my-lightbox/(\d+))/?$',
'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]',
'top'
);
// This is just for testing purposes. You should instead go to the Permalink
// Settings page and click on the Save Changes button to flush the rules. =)
//flush_rewrite_rules();
} );
[編集] add_rewrite_endpoint()
を使わない代替版:
add_filter( 'query_vars', function( $qv ) {
// This will let you use get_query_var( 'my-gallery' ).
$qv[] = 'my-gallery';
// This will let you use get_query_var( 'my-lightbox' ).
$qv[] = 'my-lightbox';
return $qv;
} );
add_action( 'init', function() {
add_rewrite_rule(
'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\d+)|my-gallery/(.+?)|/?my-lightbox/(\d+))/?$',
'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]',
'top'
);
} );
そして私はこれらのURLでそれをテストしました:
..where get_query_var( 'my-gallery' )
はanimals/cats
(最初と2番目のURL)を返し、get_query_var( 'my-lightbox' )
は1234
(1番目と3番目のURL)を返します。