add_query_arg()
を使用すると、URLに追加のパラメータを追加でき、書き換え規則を簡単に作成できます。ここまでは順調ですね。しかし問題は、ワードプレスによるURLの置き換えです。
次のようなURLがあると
www.mysite.com/?page_id=1&myvar=test
そして私はこのURLを活性化されたパーマリンクと共にブラウザのアドレス行にタイプします。このリンクは次のようになります。
www.example.com/pagename/?myvar=test
_ but _ :私が欲しいのは:
www.example.com/pagename/test
最後に、私は以下のようなコードを使いたいです。
<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>
これは次のようになります。
www.example.com/pagename/test
どうすればこれを達成できますか?私は文書を読むのに何時間も費やしました、そして私は解決策を見つけることができませんでした。
ただ同じ状況に直面し、グーグルしながらこの質問につまずいた。
これは不可能なようです。かなりパーマリンクが有効になっている場合、コア自体がURLに文字列を追加するだけです。 https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-include/link-template.php#L571
これに興味がある人のために:あなたはあなたのコードでこのようなことをすることができます:
if ( '' != get_option('permalink_structure') ) {
// using pretty permalinks, append to url
$read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
} else {
$read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
}
この解決策は、Jon Caveの公式makeブログへのコメントでも推奨されていました: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686
Wordpressの解決策は、書き換え規則を追加して次のようにすることです。
add_action( 'init', 'my_rewrite_add_rewrites' );
function my_rewrite_add_rewrites()
{
add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
}
続きを読む: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule