重写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\' );