o/ (FEB13/19:12)

WordPress in Unterverzeichnis: Jahresarchiv Fix


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


Kommentare


Bisher keine Kommentare...
Sei der Erste und leg los indem Du die Felder unten ausfüllst!


Schreibe einen Kommentar


  1. « iOS5 Zeitungskiosk Icon Pfad
  2. Administrator-Rechte in einer Batch-Datei »

OCT1/20:46 - iTunes plays:
The Prodigy - Wild Frontier

Kontakt Impressum Martin Karer 2008-2024