web-dev-qa-db-ja.com

パーマリンクでadd_query_argを使ってかわいいURLを取得する方法

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

どうすればこれを達成できますか?私は文書を読むのに何時間も費やしました、そして私は解決策を見つけることができませんでした。

8
user3114592

ただ同じ状況に直面し、グーグルしながらこの質問につまずいた。

これは不可能なようです。かなりパーマリンクが有効になっている場合、コア自体が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

4
swissspidy

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

0