If you want the information in english - please have a look on this this page.
In einigen Bereichen ist es erforderlich, dass bestimmte User - identifizierbar über die WordPress-ID oder eine IP-Adresse - eine andere Oberfläche bekommen. Der Zugriff soll also mit einem anderen Theme gestaltet werden.
Ich habe mir dazu eine kleine und einfache, aber wirkungsvolle Lösung überlegt - via Plugin. Dort identifiziere ich die User und lade dann das entsprechende Theme.
Das Plugin ist recht einfach im Code strukturiert und kann von jedem, der es benötigt angepasst werden. Es werden keinerlei Daten in der Datenbank abgelegt, die ID oder die IP des Users muss also im Code des Plugins hinterlegt werden. Für andere Anwendungen ist sicher eine ganze Menge Spielraum verfügbar.
Anforderungen
Das Plugin wurde unter WP 2.3 getestet, sollte aber aber auch Versionen kleiner und größer Version 2.3 laufen.
Was macht das Plugin?
Das Plugin lädt auf Basis der User-ID, Benutzerrechte oder IP ein spezielles Theme. Die Benutzer-ID, das Userlevel (Admin ist 10) oder IP des Benutzers muss im Code hinterlegt werden. Das Theme wird auf Basis des Namens geladen, dabei ist zu beachten, dass WordPress die Leerzeichen im Namen mit _ (underline) ersetzt.
Installation
- Paket downloaden und lokal entpacken
- Datei im Editor öffnen und Theme-Name und Benutzer-ID bzw. IP einpflegen
- Kopiere die Datei in das Plugin-Verzeichnis deiner Installation (
wp-content/plugins/)
- Das Plugin im Admin-Bereich aktivieren
Download:
Ist die Arbeit nicht 1 Euro wert?
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.
Möchtest du mehr oder anders spenden, so besuche meine Wunschliste.
Download als php-Datei: wordpress.org/extend/plugins/user-theme/user-theme.zip - 1 kByte
Du kommst ja auf Ideen! Hoffentlich wollen dann unsere Leser nicht jeder sein eigenes Theme.
Dann müsste man aber das Plugin aufbohren
, aber machbar. Wobei ich dann lieber standardisierte IDs und CLASSs vergeben würde, so dass man mit Userstyles per Browser arbeitet.
Hallo, kann man das Plugin auch so "einstellen", dass es nicht wie hier oben genannt zwischen verschiedenen Themes switcht, sondern zwischen "Admin eingeloggt" = Blogartikelvorschau, d.h. neu erstellte Artikel werden via "Beitragsvorschau" für den eingeloggten Admin dargestellt, und auf der anderen Seite: "ausgeloggte User" = Wartungsmodus (mit deinem hier auch vorgestellten Plugin "Wartungsmodus")?
@Christina: verstehe ich das richtig? Du willst einen Artikel schreiben, speichern, nicht veröffentlichen, dann im Forntend via Vorschau ansehen und das Blog ist aber eigentlich im Wartungsmodus?
Das Plugin Wartungsmodus läßt alle nicht eingeloggten User den Wartungsmodus-Screen sehen, alle user, die Rechte zum Ändern des Themes haben, also Admins, können die Artikel in der Vorschau im Frontend sehen.
Danke, das war ein Fehler meinerseits, habe ich jetzt erst dank Forum entdeckt: ich hatte in WP unterschiedliche URLs angegeben für die WP-Installation und den Blog an sich ... irgendein "Kuddelmuddel" aus Subdomain und Umleitung, darum war das Frontend (mit anderer URL) nie eingeloggt, während es das Backend (mit wieder anderer URL) jedoch war. Das war genau das Problem. Ich hab jetzt in den WP-Einstellungen beide URLs gleich gesetzt und nur in meiner Domain-Konfiguration es anders umgeleitet. Jetzt geht alles einwandfrei: User sehen den Wartungsmodus und ich als eingeloggter Admin kann dennoch meinen Blog ansehen - vorher zeigte es da auch für mich den Wartungsmodus an.
hi there .thanks for plugin:
Does anybody know if tis script is compatible with WordPress 2.5.1 ?
Thanks in advance for any help on this!
regards
Great plugin, but I can't get it work with WP 2.5.1.
Any hopes to get it work with the latest version?
Actually got it work just now. I did a fresh install and now it works.
But one question.
Is there a way to show different theme for different set of users?
If I got it right now you can select what to show to unregistered users, to single user id, to specific ip address or to users above certain level.
What I need to control is which theme to show to different user groups.
Thanks.
@silakka: You can set many user-level or different IDs. I think is it the easy way for user-groups, when you set a theme for a user-level.
@Frank
No, can't get it work right for me. If I do like this:
if (current_user_can('level_10')) {$template = 'default';
}
if (current_user_can('level_0')) {
$template = 'brightness';
}
Users in level 0 are shown the 'brightness' correctly.
Problem is that users in level 10 are shown exactly the same theme, not the chosen 'default' theme.
I have four different groups and I need to show different themes for them.
Group one is user who are not logged in (new visitors). Group two, three and four are registered users who has different user levels. And admins should see their own theme aswell.
I could do it with user id's but it's too time consuming as the groups are changing constantly.
Any ideas?
@silakka: I have update the plugin and write a examblr for your workaround, please downlaod the new version.
if ( current_user_can('level_10') ) { $template = 'classic'; } elseif ( current_user_can('level_5') ) { $template = 'classic'; } elseif ( current_user_can('level_0') ) { $template = 'default'; }Best wishes
@Frank
Thank you very much, works like charm!
mhm, vielleicht ist das ja eine Möglichkeit Themes zu internationalisieren. Das Problem bei Mehrsprachigkeit ist ja nicht nur der geschriebene Inhalt, sondern auch das Theme und dessen Labels an sich. Man müsste zu diesem Zwecke die IP Adresse des Besuchers auslesen und dafür das entsprechende Theme laden. Mit einem Theme-switch könnten dan nauch jene die zB. aus den USA die original fassung sehen möchten "umschalten". Nur so ein Gedanke... würde das gehen?
@Os..: in dem Fall würde ich besser die Sprache des Browsers auslesen und darauf basierend entsprechendes Theme anbieten.
Hallo.
Vor wenigen Minuten hab ich dieses Plugin hier gefunden - eigentlich auf der Suche nach einem WP Plugin, mit dem man verschiedenen Kategorien (anhand der IDs) verschiedene Themes zuordnen kann. Ich denke mal, dass die Code-Änderung des Plugins nicht allzu groß sein würden. Ausprobiert hab ich es auch schon, allerdings hat das nicht so funktioniert, wie es sollte.
Ist das denn überhaupt möglich? Wenn ja, wie?
Danke schon einmal im Voraus.
MfG,
CKOne.
@CKOne: dazu muss man kein Plugin nutzen. Die Kategorie kann per Conditional Tag is_category() abfragen und dann das Theme zuweisen, also einfach den Link zum Stylesheet jeweisl angeben.
Ah, vielen Dank. Das hab ich jetzt schon einmal hinbekommen. Doch ist es eigentlich auch möglich die Einzelansichten von Beiträgen, welche bestimmten Kategorien zugeordnet sind, ebenfalls in den Themes unterscheiden zu lassen (soll heißen, dass diese dann auch ein eigenes Theme haben)?
MfG,
CKOne
@CKOne: auch das geht, man kann die einzelnen Beiträge mit is_single() abfragen, siehe Doku.
Korrektes User-Level für normale "Registrirte User bzw die Gruppe" ist dann welches genau?
Dazu fällt mir dann auch noch gleich ein weitere Frage ein.
Kann man unter WP (aktuell 2.6.1) eine eigene spezielle Gruppe anlegen, die dann zB. "Premium User" heisst, aber im endeffekt die gleichen Recht und Befugnisse haben wie die normalen Registrierten User? Also einfach die selbe Gruppe, nur mit anderem Namen? (Manchmal denke und schreibe ich ein wenig umständlich)
@nastorseriessix: Mit dem Plugin Role Manager geht das. Damit kannst du neue Rollen erstellen und eigenen Namen vergeben - also ein Kopie des Lesers mit anderem Namen.
Noch mal ein extra Plugin, oh man, das wird dann ja immer mehr. Hm, ich versuche es wohl erst mal besser so auf diese einfache Art und beschränke mich auf die Registrierten Leser. Die ID für diese (heisst das überhaupt Gruppe?) ist dann "1" wenn der Admin "10" hat, oder ?
@nastorseriessix: ja, du kannst anhand der Rolle oder User_Level unterscheiden.
Jetzt bin ich ein wenig verwirrt, ehrlich gesagt.
Am einfachsten für mich wäre es, wenn ich diese Funktion für alle Registrierten Leser verwende und natürlich für den Admin. Also nicht jeden User extra einzeln.
ID 10 für den Admin, und welche dann für Registrierte Leser? Weil 1 kann ja nicht sein, weil wenn ich rückwärts von 10 runterzähle lande ich nie "Anhand der Anzahl der verschiedenen Nutzerrollen, bei 1 !
@nastorseriessix: WordPress Codex oder in meinem Buch
, alternativ auch hier im Blog und tabellarisch auch hier im Blog
Och nö, da steig ich doch nie durch, so wie das schon wieder aussieht. Bei solchen Sachen, da merke ich immer wieder wie mühselig es doch ist, wenn man alles per "try and error" macht bei WordPress und vor allem beim Code.
Momentan verstehe ich eh nur mal wieder Bahnhof.
Also ist vielleicht die Variante mit den Zwei Plugins die einfachere Lösung für mich. Denn entweder verstehe ich es einfach nur nicht, oder ich denke grade zu komplziert auf meine Laienhafte weise. Meine Vorstellung von dem was ich wollte war so einfach, aber der Weg zu diesem Ergebnis hin wird immer schwerer...*args*
@nastorseriessix: Du musst nur das user_level abfragen; 10-admin etc. Das war schon richtig. Je nach user_level gibt es dann das entsprechende Theme.
Also doch richtig. *grummel*
Bin wohl schon wieder zu lange an meinem Theme dran am werkeln, das ich den Wald vor lauter Bäumen nicht mehr sehe.
Bleibt für mich aber noch der Punkt, wegen der Abfrage des User_level wie ich das mache um dann dein Plugin richtig nutzen zu können.
@nastorseriessix: ein Beispiel ist im Code des Plugins, schau nach, wie das Level abgefragt wird. Alternativ lese die Beiträge dazu.
Habe jetzt mehrfach mir das alles durchgelesen und rumprobiert. Scheinbar bin ich einfach zu blöd dazu das richtig zu begreifen und zu verstehen bzw. dann umzusetzten. Bekomme das nicht so hin wie ich das möchte, also muss ich entweder einen anderen Lösungsweg für mich finden, oder eben jemanden finden der es mir erklärt. Für Dummies eben!
Danke aber an dich Frank, für die vielen Erklärungen.
Wollte meinen vorherigen Artikel noch ergänzen, aber Zeit war schon abgelaufen.
Also ich verstehe wohl, dass ich erst mal das Userlevel herausfinden muss das "registrierte Nutzer" meines Blogs haben, also genrell und nicht jeder für sich im einzelnen. Verwirren tut mich diese Aussage:
Da muss ich dann also erst noch was an Abfragen hinzufügen, damit ich dann erst mal weiss was für ein Userlevel ein Registrierter Benutzer in meinem Blog hat. Oder?
Entweder habe ich schon zu viel Zeit mit dem ganzen gebracht und sehe den wald wirklich vor lauter Bäumen nicht mehr. Oder ich verstehe oder begreife einfach nicht worum es geht.
Vielleicht habe ich ja auch nur einen Denkfehler bei der ganzen Sache gemacht. Also ich will folgendes erreichen:
1. Alle registrierten User sollen ein spezielles Themen angezeigt bekommen.
2. Um das Plugin nutzen zu können muss ich erst herausfinden, was für ein Userlevel Registrierte Benutzer bekommen, generell und nicht im einzelnen.
3. Registrierte Benutzer werden aber nicht unter "user_level" geführt.
4. Eine extra Abfrage muss man extra einbauen damit das Userlevel für "Registrierte User" augegeben wird.
5. Kein Plan, was ich wo und wie nun einbauen soll.
Ergo wäre es für mich dann doch eher einfacher das Plugin "Role Manager" zu verwenden und eine extra Nutzergruppe anzulegen. Denn die Abfragen bzw. das herausfinden des Userlevels für diese neu erstelle Gruppe, wäre westenlich einfacher als die vorherige Methode. Oder liege ich damit jetzt auch falsch?
Bitte erleute mich mal einer, bin total verwirrt!
(Frank, fasse einfach beide Posts zusammen oder lösche den ersten am besten, und nimm diesen dann hier)!
@nastorseriessix: Das Plugin habe ich schon so weit erweitert, dass du nur die Werte und das Theme anpassen musst. Je nach User_level wird ein Theme vergeben. Leser haben User_Level 0, sollte WP das nicht in die Tabelle einpflegen, dann gehe davon aus, dass alle, die kein User_Level haben das Theme bekommen und alle anderen bekommen die jeweilige Alternative. Die User_Level-Verteilung habe ich hier hinterlegt.
Die Zuordnung im Plugin User_Theme findest du ab Zeile 27.
Ich glaube, jetzt habe ich es verstanden.
Diese Tabelle mit der Verteilung, sorry aber das ist für mich nicht klar erkennbar wer da was genau hat. Zudem muss ich ja nun erst mal nachschauen ob WP das User_Level in meine Tabellen einpflegt oder halt nicht. Also schaue ich dann mal grade in mein DB!
Bei Dir fidnet man einfach immer ein Plugin, was man gerade mal braucht
Habs eingebaut, funktioniert gut.
Es scheint als würde
nach Aktivierung des Plugins nicht mehr korrekt funktionieren...Das Template wird zwar korrekt, nach meinen Bedingungen umgeschaltet, jedoch wird diese Variable nicht aktualisiert.
Konnte jemand ähnliche Phänomene beobachten?
Perfekt, um direkt auf der Live-Seite am neuen Theme zu arbeiten. Thx
Sehe gerade, dass mein Kommentar etwas verstümmelt wurde. Nach Aktivierung des Plugins hat unter anderem ...bloginfo('stylesheet_url');... nicht mehr korrekt funktioniert.
Das Template wird zwar korrekt, nach meinen Bedingungen umgeschaltet, jedoch wird diese Variable nicht aktualisiert.
nice bro.. thanks
Hi Frank,
I'm trying to use your plugin so I can use the default theme ONLY in the category games with ID=25
I mean when people click on the category games the results as well as all the posts under that category should appear with the default theme.
How can I do that? What exactly must I write? Must I comment out something from your code? I want everything else to use my other theme.
Thanx in advance
@marikamitsos: please read my post in english and use the solution, this is exactly what you search
Hi,
bei mir scheint das ganze noch nicht zu funktionieren.
Als erstes habe ich die Dateien runtergeladen und hochgeladen.
Als erstes war das ganze Theme etwas zerschossen, das habe ich aber hinbekommen in dem ich bei jedem if oder elseif mein Theme eingetragen habe, welches Standart ist.
Nun wollte ich den User mit der ID 2 ein seperates Theme einstellen.
ändere also die Datei ab.
Leider klappt es aber nicht... Ideen? Tipps? Vorschläge?
Hello,
Thank you for the plugin. I have a problem though, I want to use it to display different themes for different categories (each category also has a different page) and I cannot get it to work. I have very little knowledge of php coding so, any piece of advice would be highly appreciated. Thank you!
@Florian: maybe you can use the Conditional Tag
in_category()and set the theme for different categories.PLease see my post for this solution: WordPress Theme in Abhängigkeit wechseln, here in english Change your WordPress Theme on Dependency
Example:
Vorbemerkung: Was CSS und php angeht, bin ich Laie.
Ich suche nach einer Möglichkeit, einzelne Seiten innerhalb meines Blogs - abhängig von ihrem Titel - mit jeweils einem eigenem Kopf (Header) sowie eigenen Sidebars zu versehen. Ist sowas möglich und/oder gibt es dafür entsprechende Tools?
@Herbert: dazu muss am einfachsten in der header.php die Seite abgefragt werden oder: bei Seiten können Templates definiert werden, so dass man nicht auf den Namen angewiesen ist; hängt ganz vom Ziel und Umfang ab.
I am using this plugin to send a theme based on IP address. It was working great, but with no updates to anything, it stopped working recently. I verified that the IP address did not change, and I have tried it with other IP addresses and I can no longer get it to work.
I can get it to work if I use User_Level, but not Profil-ID or IP.
Strange. Do you have any advice? I'm not sure how to fix it.
Thanks, and my apologies, I do not speak German.
@David: I have write a update; WP has change the function and an undefined variable; this is the problem and give a error to him. Now i have change this and add more examples and check now via array, so it is possible to check in different values. I hope, this is what you search.
Thank you for the update... when I still could not get it to work, I looked further into a cause. It turns out that we recently installed a SSL cert and the server was going through a proxy, so REMOTE_ADDR was showing the proxy's IP. I changed it to HTTP_X_FORWARDED_FOR and now it works again.
Hey, danke für das coole Plugin. Genau das habe ich gesucht.
lg aus Österreich
Ronny
Hmm, bei mir funktioniert zwar das Plugin auf bestimmte Kategorien (in meinem Fall "10") allerdings wird das sekundäre Theme dabei nicht korrekt geladen. Aktiviere ich das sekundäre Theme als Haupttheme (also ohne Plugin) funktioniert alles.
Eine Idee an was das liegen könnte?
Das ist die besagte Kategorieseite:
http://www.vroniundronny.at/tagebuch/category/fotos/
Das ist das Haupttheme:
http://www.vroniundronny.at/tagebuch/
Danke im Voraus,
lg
Ronny
Hallo,
würde mich auch interessieren das Plugin, aber ich bekomme immer diesem Fehler nach der Aktivierung.
WP 2.9.2 habe schon neu drüberinstalliert, da ich dachte es könnte eine Datei fehlen. Aber leider ohne erfolgt.
Hat jemand eine Idee für mich?
Gruß
Sebastian
Ähm, sag' mal: Wo finde ich die User-IDs?
Gehe mal im Bereich der Benutzer auf den Link bearbeiten, der Mouseover holt die ID in den Link, alternativ gibt es Plugins, die die ID in der Tabelle darstellen.
I am able to get the plugin to work great with 'regular' themes, but when using a framework like Genesis I can't get the child themes to work with this plugin. How can I get them to work? With all of the new frameworks I hope this is something that can be done.
Thank you.
Jason
Hallo Frank,
vielen Dank für das Plugin, ich kann es gut gebrauchen. Leider klappt es mit WordPress 3 noch nicht so richtig. Wenn ich nach Profil-ID filtere, funktioniert es hervorragend (wenn man zusätzlich die Variable blog_id abfragt, klappts auch bei Blog-Netzwerken aka MU-Sites). Wenn ich jedoch nach Kategorie filtern will, kommt ein Kuddelmuddel zwischen dem Hauptthema und dem neuen Thema heraus.
Hast du vielleicht eine Idee, woran es liegen könnte?
Liebe Grüße,
Andreas
@Andreas: Nutzt du ein Framework als Theme bzw. die Child Theme Funktionalität? Dann sind template und stylesheet verschieden. Heist also, du musst darauf achten, das template ist dann in der Regel das Haupttheme und der Hook stylesheet ist das childtheme.
Framework benutze ich keines. Den Begriff "child theme" höre ich heute zum ersten Mal. Wenn ich richtig verstanden habe, ist das ein Theme, welches nicht alle Themedateien selbst zur Verfügung stellt, sondern die fehlenden durch die Standardfiles ersetzen lässt, richtig?
Nun, die Themes, die ich benutze, sind:
Haupttheme: TwentyTen
neues Theme: simplepress-2 / http://wordpress.org/extend/themes/simplepress-2
Weiters habe ich durch Auskommentieren festgestellt, dass die Funktion add_filter('stylesheet', 'fb_user_theme'); dieses Verhalten verursacht. Kannst du mir da etwas auf die Sprünge helfen?
Liebe Grüße,
Andreas
@Andreas: der Hook stylesheet sorgt für die Ausgabe der URL zum CSS-File. Wenn du nur das SimplePress aktiv hast, dann ist es ein klassisches Theme, es wird nicht als Child Theme genutzt. Damit sollte die Umleitung bei diversen Themen auf beiden Hooks klappen. Du kannst parallel mal die wp-admin/options.php aufrufen und die Einträge template und stylesheet anschauen, sind die gleich?
Ja, die Einträge stimmen überein. Ich habe jetzt verschiedene Kombination von Themen ausprobiert, das Verhalten bleibt immer dasselbe.
Und wie gesagt: bei allen anderen Abfragen (Profil-ID, Userlevel, IP-Adresse) klappt das Umschalten mit allen Themekombinationen problemlos.
@Andreas: achte darauf, dass in_category() genutzt wird, je nach Template, welches im Frontend gezogen wird, kann es auch is_category sein. Alternativ kannst du mit dem Plugin Debug Objects die Werte ausgeben, so dass man sieht, was für ein Conditional Tag gezogen wird. Ist schwer von Außen zu prüfen, ich würde auch direkt ausgeben um das Problem zu finden.
Sorry, but your plugin is broken in WP 3.0.1.
When I want to choose the theme based on user-ID it shows a layout that is messed up. Also in the Dashboard it still refers to the other theme's stylesheet.
When I use IP address it works fine.
Any ideas on this?
Thanks
Jim
Hi, gibt es eine Möglichkeit, dass ich Leute an ihrer Sprache des Browser erkenne und dann an eine andere Domain weiterleite oder zumindest einen Text+Link einblende? Gibt es dafür vielleicht bereits ein Plugin?
@klausM: ja dies geht, nutze ich mehrfach; ein Plugin ist mir nicht bekannt; könnte es aber vom Autor DD32 geben, wenn ich mich richtig erinnere
hi,
danke für das plugin!
ich habe allerdings dasselbe problem wie
Andreas (Kommentar vom 9. August 2010 um 14:35).
allerdings möchte ich ein anderes template in Abhängkeit der page_id, z.b. per is_page('123') nutzen.
ich habe als workaround versucht, per
add_filter('template_directory', 'change_theme_root');
add_filter('stylesheet_directory', 'change_theme_root');
die entsprechenden template-dateien zu aktivieren. das funktioniert zwar, leider dann aber gleich global, da in der funktion 'change_theme_root' scheinbar keine conditional tags wie 'is_page()' funktionieren mit deren hilfe
bin am ende meines lateins.
hat jemand einen tipp oder weiß, wie man's lösen könnte.
gruß,
daniel
ok,
hab's jetzt gelöst, indem ich per $_GET['page_id'] die URL auslese...
zwar nicht schön, aber immerhin tut das.
wer's besser weiß, kann sich gerne melden.
Hallo, kann ich dein Plugin auch für den Wechsel eines Themes in Abhängigkeit von der aufgerufenen Kategorie benutzen? Wenn ja, würde mir das das Wochenende retten - ich brauche nur ein bisschen Starthilfe...
Tausend Dank!
@Therase: ja, dazu ist auch ein Bsp. drin.
Hallo. Ich hab das Plugin user-theme angepasst und installiert. Anhand der Benutzer-Rolle sollen 2 Templates abwechselnd geladen werden.
Die verwendeten Templates beinhalten jeweils eigene Funktionen (Kauf-Templates). Das plugin wird aufgerufen, jedoch funktioniert der wechsel des Templates nicht, denn aus dem "nicht mehr aktiven" template werden trotzdem funktionen geladen, die weitere Files anfordern (request_...), allerdings wird der File-URL auf "das nun aktive" Template bezogen, so dass die Aufrufe "auf die Nase landen"...
Ich bin mir nicht sicher, ob meine Erklärungen verständlich genung sind.... Jedoch hoffe ich.....
Vielen Dank im voraus für einen Tipp
@AndreasW: Template und stylesheet aktiv? beide Einträge müssen jeweils passen, da bei Verwendung von Child Themes der stylesheet parameter einen anderen Wert hat.