Es will einfach nicht!

Seit ein paar Tagen quält mich ein Problem: Jetzt gebe ich es auf. Worum es geht..? Gut also der Reihe nach: Nico hat mich in den Kommentaren auf die Idee gebracht, ein Plugin zu schreiben, das für bestimmte Seiten ein anderes Theme anzeigt, als für den Rest des Blogs. Gesagt getan, relativ schnell hatte ich folgendes Gerüst:

<?php
$nr_pt_themed_PP = array('page2' => 'Default', 'post5' => 'Constructor');

function nr_pt_get_theme_for($page_or_post)
{
	global $nr_pt_themed_PP;

	if(array_key_exists($page_or_post, $nr_pt_themed_PP))
		return $nr_pt_themed_PP[$page_or_post];
	else
		return '';
}

//Helper. Returns the option from the selected theme, or the default value, if no theme selected
function nr_pt_GetOptionOrDefault($default, $option)
{
	if(is_page() || is_single())
		{
			global $post;
			$theme = nr_pt_get_theme_for($post->post_type . $post->ID);

			if(empty($theme))
				return $default; //no filtering
			else
			{
				$all_themes = get_themes();
				return $all_themes[$theme][$option];
			}
		}
		else
			return $default;
}

function nr_pt_filter_template($template)
{
	return nr_pt_GetOptionORDefault($template, 'Template');
}

function nr_pt_filter_stylesheet($stylesheet)
{
	return nr_pt_GetOptionORDefault($stylesheet, 'Stylesheet');
}

function nr_pt_filter_template_dir($template_dir)
{
	return nr_pt_GetOptionORDefault($template_dir, 'Template Dir');
}

function nr_pt_filter_stylesheet_dir($stylesheet_dir)
{
	return nr_pt_GetOptionORDefault($stylesheet_dir, 'Stylesheet Dir');
}
//Filters
add_filter('template', 'nr_pt_filter_template', 1); //1 is the priority, so this filter is the first!
add_filter('stylesheet', 'nr_pt_filter_stylesheet', 1);
add_filter('stylesheet_directory ', 'nr_pt_filter_stylesheet_dir', 1);
add_filter('template_directory ', 'nr_pt_filter_template_dir', 1);
?>

Nur: Es will nicht so richtig… Ansich reicht es, auf template und stylesheet Filter anzuwenden, und schon sollte ein anderes Theme angezeigt werden. Der PHP Code ist auch in Ordnung, nur scheinbar kommt WordPress damit nicht klar:

Das Standard-Theme ist TwentyTen, und das alte Default Theme ist noch zusätzlich installiert. Auf Seite 2 wird mir aber nur das oben sichtbare angezeigt.

Laut Firebug wird aber das richtige Stylesheet geladen. Es liegt auch nicht an Firefox, der IE macht den gleichen Mist (war ja bei PHP Sachen auch zu erwarten…)

Wenn irgendein WP-Guru den Fehler sieht, wäre ich sehr dankbar, wenn er mir helfen würde… Vermutlich muss ich noch etwas filtern…?!

Ansonsten erkläre ich das Projekt für gescheitert 😀

2 Gedanken zu „Es will einfach nicht!

  1. Schaue dir mal mein Plugin User Theme an, bzw. die Beiträge dazu bei mir. Man muss nur 2 Hooks ansprechen, bzw, wenn es nur das CSS ist nur das Stylesheet und schon geht das. Wenn man also auf der Seite x ist, dann lade css sowieso auf Hook stylesheet.

  2. Danke für den Tipp mit User Theme, damit bin ich dem Fehler näher gekommen:
    Folgender Code produziert den Fehler:
    function fb_user_theme($template = “) {
    if ( is_single() ) {
    $template = ‚constructor‘;
    }
    return $template;
    }
    Wenn ich aber is_single() mit current_user_can(‚manage-options‘) ersetze funktioniert alles. Ich denke, dass der Filter schon aufgerufen wird, wenn is_single() noch nicht gesetzt ist, bzw. später noch mal aufgerufen wird. Dadurch wird das Standart Theme mit dem neuen gemixt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.