После большого количества регистрации и отладки я обнаружил, что функция, которая вызывала бесконечное перенаправление, была function the_posts($posts)
. Если вы закомментируете все от if (is_single () && count ($posts) > 0)
до remove_filter ('the_posts', array (&$this, 'the_posts'));
, оно прекратит бесконечное перенаправление и, кажется, все еще работает нормально! Единственным побочным эффектом является то, что если вы перейдете на /jim/
, он перенаправит вас обратно на /people/jim/
(а не просто даст вам 404). Для меня это было достаточно хорошо, так как это решило эту проблему.
Итак, снова, внутри advanced-permalinks.php
, найдите function the_posts
, а затем прокомментируйте его так, чтобы он выглядел как код ниже.
Почему это ломает это? Поскольку пользовательский тип записи is_single и не соответствует никаким правилам, очевидно, что заставляет APL отправлять его обратно для перенаправления ... бесконечно. Мля. Возможно, есть более умный способ сделать это, проверить, является ли это пользовательский тип записи, или что-то в этом роде, но мне просто показалось, что просто отключить его.
/**
* Hook that is called when a post is ready to be displayed. We check if the permalink that generated this post is the
* correct one. This prevents people accessing posts on other permalink structures. A 301 is issued back to the original post
*
* @return void
**/
function the_posts ($posts)
{
/* DISABLED CODE BELOW:
// Only validate the permalink on single-page posts
if (is_single () && count ($posts) > 0)
{
global $wp, $wp_rewrite;
$id = $posts[0]->ID; // Single page => only one post
// Is this a migrated rule?
$migrate = get_option ('advanced_permalinks_migration_rule');
if ($migrate)
{
if (isset ($migrate[$wp->matched_rule]) && substr (get_permalink ($id), strlen (get_bloginfo ('home'))) != $_SERVER['REQUEST_URI'])
{
wp_redirect (get_permalink ($id));
die ();
}
}
else
{
// Get the permalink for the post
$permalink = $this->get_full_permalink ($id);
// Generate rewrite rules for this permalink
$rules = $wp_rewrite->generate_rewrite_rules ($permalink);
// THIS IS ESPECIALLY PROBLEMATIC PART FOR CUSTOM POSTTYPES
// If the post's permalink structure is not in the rewrite rules then we redirect to the correct URL
if ($wp->matched_rule && !isset ($rules[$wp->matched_rule]))
{
wp_redirect ( get_permalink ($id));
die ();
}
}
}
DISABLED CODE ABOVE */
remove_filter ('the_posts', array (&$this, 'the_posts'));
return $posts;
}