WordPress独自の関数を使用して書き換えルールを設定しました。リライトコードは次のようになります。
add_rewrite_rule('^testrule/(.+)?$', 'index.php?p=$matches[1]', 'top');
ルールは機能し、すべてが機能します。そのURLにアクセスするたびにリダイレクトされるため、URLが変更され、そのようなことが起こりたくありません。
任意のヒント?
私の場合、おそらくadd_permastructとadd_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
一部のプラグイン(カスタムパーマリンクなど)はcorrect
URLにリダイレクトできます
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;
}