Da mich der Google Bot durch massives Generieren von 404-Fehlern fleißig darauf aufmerksam gemacht hat, dass meine Jahresarchive im Blog wohl nicht erreichbar sind, bin ich der Sache nachgegangen.
Ich habe mein Blog wie im WordPress Codex beschrieben konfiguriert – funktioniert zwar grundsätzlich, allerdings sind die Jahresarchive nicht erreichbar. Für die eigene Seite „Blog“ werden wie für alle anderen Seiten Rewrite Rules angelegt – das Problem daran ist, dass diese auch beim Aufruf von zB /blog/2011 greifen und somit nie die erste Seite des gewünschten Archivs (blog/([0-9]{4})/?$) angezeigt werden kann. Unterseiten oder Monatsarchive funktionieren weiterhin wie gewünscht, da es dafür eigene Regeln gibt.
Ich habe das Problem über folgenden Code in der functions.php meines Themes gelöst:
/**
* Year-based archive fix [YAF]
*
* My blog is accessable via a subdirectory called /blog
* Permalink structure: /blog/%category%/%postname%/
* Page ID of my blog page: 13
*
* It seem's that if you create a "page" for your blog in a subdirectory as suggested
* by the WordPress Codex (http://codex.wordpress.org/Making_Your_Blog_Appear_in_a_Non-Root_Folder)
* the page-related rewrite rule get's executed first and it bypasses the pattern for
* year-based archives (blog/([0-9]{4})/?$ in my example).
*
* To fix this behavior I changed the slug for my "blog page" to archives and
* added a filter to page_link that changes the link from "archives" to "blog".
*
* DON'T FORGET TO SAVE THE PERMALINK STRUCTURE AT LEAST ONCE!
* DON'T FORGET TO REPLACE THE PAGE ID (13) WITH YOUR BLOG PAGE ID!
*/
$permalink_structure = get_option('permalink_structure');
if (preg_match(':/([^/%]+)/.*:', $permalink_structure, $blog_page)) {
// blog is located in a subdirectory
$sezz_blog_subdirectory = $blog_page[1];
add_filter('rewrite_rules_array', 'sezz_yaf_rewrite_rules');
function sezz_yaf_rewrite_rules( $rewrite_rules ) {
global $sezz_blog_subdirectory;
$new_rules = array(
$sezz_blog_subdirectory.'/?$' => 'index.php?cat=-0',
$sezz_blog_subdirectory.'/page/?([0-9]{1,})/?$' => 'index.php?cat=-0&paged=$matches[1]',
);
$rewrite_rules = $new_rules + $rewrite_rules;
return $rewrite_rules;
}
if (!is_admin()) {
add_filter('page_link', 'sezz_yaf_page_link', 1, 2);
function sezz_yaf_page_link( $link, $id ) {
if ($id == 13) {
global $sezz_blog_subdirectory;
return home_url().'/'.$sezz_blog_subdirectory.'/';
} else {
return $link;
}
}
}
}Update: home_url() anstatt WP_HOME









