私は(functions.phpで)このルールを設定しました
function custom_rewrite_basic() {
add_rewrite_rule(
'episode/([^/]+)/transcript',
'index.php?post_type=episodes&episodes=$matches[1]&page=2',
'top');
}
add_action('init', 'custom_rewrite_basic');
www.domain.com/episode/postname/transcript/にwww.domain.com/episode/postname/2/をリダイレクトすることを期待していますそれでもまだ/ 2 /になるでしょう。
おもしろいことに、私がwww.domain.com/episode/postname/transcript/とタイプしてもそれでもうまくいくが、/ 2 /にリダイレクトする。
Rewrite Analyzerプラグインをインストールしましたが、エラーが発生しません。投稿タイプは "episodes"、スラッグ/ URLは "episode"です。
誰かが私を案内してくれる?永遠に感謝します...サラ
書き換えAPIはリダイレクトされません - URL構造をクエリ文字列に「マップ」するだけです - これを自分で行う必要があります。
まず最初に、書き換え規則を修正します。
'episode/([^/]+)/transcript'; // Matches anything that follows transcript, not what we want!
'episode/([^/]+)/transcript/?$'; // Matches only "episode/name/transcript", optionally with a trailing slash
それではヘルパー関数を取り込んでください。
/**
* Get transcript URL.
*
* @param int $post_id
* @return string
*/
function wpse_180990_get_transcript_url( $post_id ) {
return trailingslashit( get_permalink( $post_id ) ) . user_trailingslashit( 'transcript' );
}
そしてリダイレクトを実行する:
/**
* Force "episode/postname/2" to canonicalize as "episode/postname/transcript".
*/
function wpse_180990_redirect_transcript() {
global $wp;
if ( is_singular( 'episodes' ) && get_query_var( 'page' ) === 2 && $wp->matched_rule !== 'episode/([^/]+)/transcript/?$' ) {
$url = wpse_180990_get_transcript_url( get_queried_object_id() );
wp_redirect( $url );
exit;
}
}
add_action( 'template_redirect', 'wpse_180990_redirect_transcript' );
それが単一のエピソードの2ページ目であるが、私たちのカスタムリライトがリクエストURIではなかったならば、それらを/transcript
への途中で送ってください。
今リダイレクトに対処するために、あなたは現時点で得ています(/transcript
から/2
)。 WordPressには便利な関数redirect_canonical()
があり、これはすべてのリクエストを可能な限り「単数形」(標準形)に保つことを試みます。問題は、自分の利益のために時々賢いことです。
あなたの場合、それは同じ条件が当てはまることを検出します(単一のエピソードの2ページ目)が、単に現在の要求を「間違った」ものとみなし、「正しい」ものにリダイレクトします。
それをしないように伝えましょう。
/**
* Override {@see redirect_canonical()}.
*
* @see wpse_180990_force_transcript()
*
* @param string $url
* @return string
*/
function wpse_180990_transcript_canonical( $url ) {
if ( is_singular( 'episodes' ) && get_query_var( 'page' ) === 2 )
$url = wpse_180990_get_transcript_url( get_queried_object_id() );
return $url;
}
add_filter( 'redirect_canonical', 'wpse_180990_transcript_canonical' );