Globale Variable innerhalb einer Funktion überschreiben

  • Hi,
    das Problem ist folgendes: Ich habe in der functions.php eine Funktion, welche es ermöglicht die 2 Ebene eines Menüs seperat anzeigen zu lassen (Quellcode hier http://christianvarga.com/how-to-get-sub…ent-or-sibling/). Das Funktioniert auch, allerdings ist es aus designtechnischen Gründen nicht möglich, das ganze ohne div-Gerüst drum herum zu bauen. Wenn man jetzt aber in einem Menüpunkt ist, der keine 2 Ebene hat, wird das Gerüst natürlich dennoch angezeigt. Es muss also davor eine if-Abfrage geben, die filtert, ob es ein submenu gibt oder nicht. Die entsprechende Wordpress-Funktion, wp_nav_menu, gibt leider ein echo zurück, was leider verhindert, dass man sie auf Inhalt prüfen kann (oder geht das??).

    Meine Idee war die Funktion, die das Submenu separiert zu benutzen (siehe Link) und in die dortige if-Anweisung eine globale Variable zu setzen. Diese wollte ich dann im Header wieder aufrufen. Leider lässt sich die Variable innerhalb der Funktion nicht nach außen sichtbar überschreiben...

    Hat jemand eine Idee?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Also, falls jemand mal vor dem gleichen Problem stehen sollte, man kann das Gerüst auch über wp_nav_menu direkt erstellen. Siehe die Referenz im Wordpress-Codex.

    Dennoch wüsste ich gerne, wieso das mit der globalen Variable nicht klappt, dafür gibt es globale Variablen schließlich :)

  • Ist jetzt reichlich schwer zu verstehen, wie es mir erscheint. Mein erster Gedanke ist zumindest, wozu ist

    Menu Item CSS Classes

    gut, denn für mich sieht das so aus, dass ein <li>Element</li> nur dann erzeugt wird, wenn ein Item vorhanden ist. Das Grundgerüst besteht doch nur aus einen Div oder Nav-Bereich um diese <ul><li>Element</li><li>Element</li></ul>?

    Da ich es bisher aber nur mit einfachen Menüs und wp_nav_menu($defaults) zu tun hatte, verstehe ich ohnehin nicht viel.
    Wenn Du innerhalb eine if-Abfrage eine globale Variable setzt, dann ist das schon ein Widerspruch in sich. Wie kann die gültig sein, wenn die if sich nicht angesprochen fühlt? Soweit reichen meine Gedanken leider im Augenblick nicht, denke aber, dass die bei false nicht zu sehen ist und somit nicht global sein kann.

    Einmal editiert, zuletzt von Melewo (26. Juni 2014 um 11:09)

  • Die entsprechende Wordpress-Funktion, wp_nav_menu, gibt leider ein echo zurück, was leider verhindert, dass man sie auf Inhalt prüfen kann (oder geht das??).


    Für was ist dieser Parameter gut?

    Zitat


    $echo
    (boolean) (optional) Whether to echo the menu or return it. For returning menu use '0'

    Default: true


    http://codex.wordpress.org/Function_Refer…menu#Parameters

    Eine globale Variable wird eigentlich vor einem if-Statement gleich am Anfang einer Funktion global gemacht. Verhält sich aber auch dann nicht wie eine superglobale Variable, die immer und überall vorhanden ist.

    Einmal editiert, zuletzt von Melewo (26. Juni 2014 um 11:21)

  • Danke für die Antwort.
    Zuallererst mal: Mit 'Gerüst' meinte ich alles was um li und ul kommt. Manchmal brauch man mehrere Container, um etwas zu stylen. Ich hatte zuvor ein Gerüst außerhalb der Funktion erstellt, bis mir auffiel, dass das trotzdem angezeigt wird, auch ohne submenu :)

    Zu der echo und return-Sache: Genau sowas hatte ich gesucht, bin eben nur zuerst auf die Lösung mit dem Gerüst innerhalb der Funktion gekommen. Aber gut zu wissen :D

    Zur globalen Variable: Die habe ich natürlich außerhalb als global definiert und wollte sie dann innhalb der if-Anweisung überschreiben. Hab auch bei beiden Möglichkeiten was überschrieben, so das eine hätte greifen müssen. Das hat aber wie gesagt nicht funktioniert. Was meinst du denn mit 'superglobal'?

  • Was meinst du denn mit 'superglobal'?


    Ich meinte so etwas, die verhält sich wie andere Superglobals, also wie $_SERVER, $_GET oder $_POST und was es noch an Superglobals gibt und die ist überall in einem Script verfügbar.

    PHP
    $GLOBALS["Name"] = ... ;
    Zitat

    Hinweis: Verfügbarkeit der Variablen

    Im Gegensatz zu allen anderen Superglobals ist $GLOBALS notwendigerweise immer in PHP verfügbar.


    http://www.php.net/manual/de/reserved.variables.globals.php

    Zu der echo und return-Sache: Genau sowas hatte ich gesucht, bin eben nur zuerst auf die Lösung mit dem Gerüst innerhalb der Funktion gekommen. Aber gut zu wissen :grin:


    Die eine Hälfte vergisst man wieder und die andere Hälfte versteht man erst nach einem dreitägigen Test. Was man nicht testet und nicht vergisst, das findet man dafür erst nach drei stündigen Suchen wieder, jedoch nur um festzustellen, dass es damit eigentlich auch nicht richtig funktionieren kann.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!