Support » Allgemeine Fragen » Alternatives Stylesheets je nach Verlinkung laden
Alternatives Stylesheets je nach Verlinkung laden
-
Hallo zusammen,
ich würde gerne dass je nach Link über den ein Besucher auf meine Webseite kommt ein individuelles Stylesheet geladen wird. Wie kann ich das realisieren?
Gruß,
TaddyWP
-
Hallo,
nach Hinzufügen der schließenden runden Klammer geht meine Seite zumindest wieder :).
Ich habe
$linkpos = 0;
vor die erste if-Anweisung eingefügt, aber es wird immer die Klasse ’standartest‘ vom default-wert geladen. Egal ob ich über google, bing, meine_andere_testseite oder direkt auf die Seite gehe. Es wird also immer rote Schrift und gelber Hintergrund angezeigt.Hier nochmal kurz was ich in der style.css meines Child-Themes ganz am Ende hinterlegt habe:
body { font-family: Arial, sans-serif; font-size: 19px; /*color: #000;*/ background-color: #dae7c8; } body.testseite { color: #1f87ae; background-color: #97f413; } body.google { color: #1fb8a8; background-color: #fd6481; } body.bing { color: #e00; background-color: #32CD32; } body.standardtest { color: red; background-color: yellow; }
Und hier der Teil aus der functions.php meines Child-Themes:
function referer_body_class($classes) { $ref = wp_get_referer(); $linkpos = 0; if (strpos($ref, "www.meine_andere_testseite.") !== false) { $linkpos = 1; } if (strpos($ref, "https://www.google.") !== false) { $linkpos = 2; } if (strpos($ref, "https://www.bing.") !== false) { $linkpos = 3; } switch ($linkpos) { case 1: $classes[] = 'testseite'; break; case 2: $classes[] = 'google'; break; case 3: $classes[] = 'bing'; break; default: $classes[] = 'standardtest'; } return $classes; } add_filter('body_class','referer_body_class');
Der switch-case-Befehl scheint ja zu stimmen. Und dadurch dass die standartest-Klasse aus der style.css geladen wird, dürften die anderen CSS-Regel somit auch nicht an der falschen Stelle hinterlegt worden sein oder?
Hallo,
ich nehme an, der strpos()-Befehl erfordert evtl. noch eine andere Schreibweise.
Ergänze doch mal – nur zum schnellen Test – vor der Anweisung return $classes folgende Zeilen:
$findme = 'https://www.google.'; $pos = strpos($ref, $findme); if ($pos !== false) { $classes[] = 'google-test'; }
Wenn du dann via Google zugreifst, müsste dadurch eigentlich (ganz unabhängig von deiner switch-Anweisung, wie gesagt: nur zur schnellen Fehler-Suche) „google-test“ in deiner body-class erscheinen.
Wenn das klappt, müsste man die entsprechenden Stellen in der switch-Abfrage auf diese
Schreibweise der strpos()-Funktion umschreiben.K
Hallo,
ich habe den Teil hinzugefügt. Wenn ich das jetzt mit Firebug untersuchen möchte, muss ich dann auf der linken Seite (html?) oder auf der rechten Seite (css?) schauen? Ich habe zumindest über das Suchfeld sowohl im Reiter HTML als auch im Reiter CSS google-test nicht finden können.
Gruss
TaddyWPDu solltest mal debuggen, was
wp_get_referer()
zurückliefert.Das ganze kann übrigens auch nicht funktionieren, wenn du ein Cache-Plugin verwendest, weil dann schon unabhängig von irgendwelche Referern die Webseite fertig gerendert ist.
Die Klasse soll im HTML im Body-Tag hinzugefügt werden.
Also im Reiter HTML solltest du in der Body-class zusätzliche Klassen sehen.
Du hattest zuvor geschrieben, dass „body.standardtest“ ja bereits wirkt.Oder geht das nun auch nicht mehr?
Du könntest auch vor „switch ($linkpos) {“ der Variable $linkpos testweise
mal einen statischen Wert, z.B.$linkpos = 2;
zuweisen, nur um zu sehen, ob in der switch-Anweisung zB immer der String „google“ in deine body-class eingefügt wird. Dadurch wüsstest du schon mal, dass der Fehler vor der Switch-Anweisung liegt. Ich nehme an, dass bei deinen strpos()-Abfragen irgend etwas hakt.
K
Hallo,
ein Cache-Plugin verwende ich nicht, zumindest hab ich keines bewußt installiert.
Habe hoffe ich jetzt auch gefunden was ihr meint: Im HTML-Bereich sieht mein body-Tag folgendermaßen aus:
<body class="home page page-id-2 page-template-default logged-in admin-bar custom-background standardtest front-page customize-support">
Und ja: „body.standartest“ wirkt bereits seitdem ich es eingefügt habe, und zwar immer, egal von welcher Seite ich komme.
Lohnt es sich immernoch zu debuggen, da body.standardtest ja funktioniert? Ich lese mich zumindest gleich darin ein wie man debuggt?
Danke und LG
TaddyWPAus irgendeinem Grund, den ich noch nicht verstanden habe, scheint wp_get_referer() doch nicht das gewünschte Ergebnis zu liefern. Probier doch mal folgendes:
function referer_body_class($classes) { $ref = $_SERVER["HTTP_REFERER"]; switch (true) { case (stripos( $ref, 'google' ) !== false ): $classes[] = 'google'; break; case (stripos( $ref, 'bing' ) !== false ): $classes[] = 'bing'; break; default: $classes[] = 'nix'; } return $classes; } add_filter('body_class','referer_body_class');
Hallo,
@karl Silver
deinen Beitrag hab ich gestern entweder übersehen oder wir haben zum gleichen Zeitpunkt gepostet.Habe linkpos wie empfohlen abwechselnd die statischen Werte 1,2 und 3 zugewiesen, und es werden dann korrekterweise die jeweils entsprechenden Klassen zugewiesen und auf meiner Seite folgerichtig die unterschiedlichen Farben angezeigt.
@bego Mario Garde
Juhuu, es klappt :). Ich habe zwar noch nicht ganz verstanden wieso, aber juhuu :). Kann ich die if-Abfragen also draußen lassen und brauche ich wp_get_referer() auch nicht mehr?Gruß,
TaddyWPEdit: Ich merke erst jetzt dass das eine andere Funktion ist. stripos() statt strpos().
Hallo, TaddyWP.
Zu gestern und den Tests mit $linkpos:
Sehr gut, dann hat deine Funktion ja korrekt gearbeitet bzw. hat die einfachere Schreibweise von Bego Mario Garde dir wohl eine schnellere Lösung beschert.Gut zu wissen ist jedenfalls, dass man die wp_get_referer()-Anweisung auch hinterfragen muss.
Daran hatte ich nicht gedacht.Schön, wenn es jetzt klappt.
K
stripos
ist „case insensitive“, unterscheidet also nicht Groß- und Kleinbuchstaben. Vgl. http://nl3.php.net/manual/de/function.stripos.phpHallo,
ich habe der switch-case-Anweisung noch meine Testseite hinzugefügt und bei Besuch über diese Seite wurden immer die Farben der google-Klasse angezeigt. Habe dann alle möglichen Schreibweisen des Links ausprobiert und bin minutenlang verzweifelt. Am Ende lag es am vergessenen break :O. Ich danke euch vielvielmals.
Gruß
TaddyWPHallo, TaddyWP.
Super, dass es klappt.
LG
K
Hallo zusammen,
ich habe eben erst wieder kurz daran testen können. Leider werden die individuellen Angaben für den Referer aus dem Stylesheet verworfen sobald man eine andere Seite in der Domain besucht. Sicherlich werde ich Cookies einsetzen müssen, aber ich wüsste nicht wo ich ansetzen sollte.
Wann bzw. wo muss ich die setcookie-Funktion einsetzen?
Leider werden die individuellen Angaben für den Referer aus dem Stylesheet verworfen sobald man eine andere Seite in der Domain besucht.
Logisch. Dann ändert sich ja auch der Referrer. Deine ursprüngliche Frage war
dass je nach Link über den ein Besucher auf meine Webseite kommt ein individuelles Stylesheet geladen wird
.
Am besten machst du mal einen neuen Thread auf.
- Das Thema „Alternatives Stylesheets je nach Verlinkung laden“ ist für neue Antworten geschlossen.