4

WordPress独自の関数を使用して書き換えルールを設定しました。リライトコードは次のようになります。

add_rewrite_rule('^testrule/(.+)?$', 'index.php?p=$matches[1]', 'top');

ルールは機能し、すべてが機能します。そのURLにアクセスするたびにリダイレクトされるため、URLが変更され、そのようなことが起こりたくありません。

任意のヒント?

4

2 に答える 2

3

私の場合、おそらくadd_permastructadd_rewrite_tag関数を使用する必要があります。少し状況は異なりましたが、考え方は似ています。

「ガイド」という名前のカスタム投稿タイプがあり、そのためのカスタム URL (カスタム投稿名とは異なる) が必要でした。さらに、URL で投稿スラッグを使用していました。これが私の解決策です。

add_action('init', 'custom_permastruct_rewrite');
function custom_permastruct_rewrite() {
    global $wp_rewrite;

    $wp_rewrite->add_rewrite_tag("%guide_slug%", '([^/]+)', "post_type=guide&name=");
    $wp_rewrite->add_permastruct('my_rule', '/my_custom_name/%guide_slug%', false);
}

したがって 、上記の URL の下のアドレス http://example.com/my_custom_name/my_post_slug にアクセスすると、次のコンテンツが表示されます: http://example.com/?post_type=guide&name=my_post_slug ( 最後のアドレスにリダイレクトせずに)

"post_type=guide&name=" を必要に応じて調整できます。たとえば、ID で投稿を探すことができます。つまり、そこに "p=" を入れると、http: //example.com/my_custom_name/24からhttp: //example.com/?p=24

于 2017-04-26T12:32:21.377 に答える
1

一部のプラグイン(カスタムパーマリンクなど)はcorrectURLにリダイレクトできます

add_rewrite_rule('^testrule/(.+)?$', 'index.php?disable_redirect=1&p=$matches[1]', 'top');

add_filter('query_vars', 'my_public_query_vars');
function my_public_query_vars($qv)
{
    $qv[] = 'disable_redirect';
    return $qv;
}

add_filter('wp_redirect', 'my_disable_redirect');
function my_disable_redirect($location)
{
    //var_dump(debug_backtrace());//if you want know who call redirect
    $disable_redirect = get_query_var('disable_redirect');
    if(!empty($disable_redirect)) return false;
    return $location;
}
于 2012-12-13T15:06:55.383 に答える