wp_list_pages ohne Links

  • Hi,

    ich habe ein Drop-Downmenü mit superfish gemacht. Die notwendige Liste meiner Seiten generiere ich per wp_list_pages().

    Ich hätte gerne, dass die oberste Ebene des Menüs nicht verlinkt ist.
    So meine ich das:

    Hier soll's mal eingesetzt werden: http://annettes.alfahosting.org/MLI/
    Bisher verbergen sich hinter der obersten Ebene des Menüs leere Seiten. btw ich will das Menü nicht statisch machen.

    Hat jemand ne Idee? Danke.

    Graveto

    • 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

  • Spontane doofe Idee: Die unerwünschten Links mit jQuery entfernen. Etwa so:

    Code
    jQuery('.menu ul li > a').each(function(){
      jQuery(this).after(jQuery(this).text()).remove();

    Die leeren Seiten gibt es natürlich trotzdem, die man dann per Suche oder Google z.B. finden kann.

  • Ammaletu: Bin kein Js-Profi, aber entfernt das nicht den gesamten Link (incl. Text). Weil wenn ja, wäre es genauso einfach das nur per css: display: none; auszublenden. Ein php: str_replace könnte lediglich das <a href=""> und das </a> entfernen. Aber: Auch nicht schön.

  • Danke für die Idee. Ich werd's mal versuchen. Die leeren Seiten werde ich wohl nicht los. Schliesslich will ich das Menü dynamisch erzeugen können.

    Wie funktioniert das mit dem str_replace?
    Der Text soll schon sichtbar sein.

  • Bin schlecht mit Java und schaff's einfach nicht.
    So erzeuge ich mein Menü:

    HTML
    <ul id='page-menu' class='sf-menu'>  
        <?php wp_list_pages('sort_column=menu_order&title_li=&exclude=5'); ?>
    </ul>

    So habe ich versucht die Links loszuwerden:

    PHP
    <script type="text/javascript">
        jQuery('.sf-menu ul li > a').each(function(){
        jQuery(this).after(jQuery(this).text()).remove();
    </script>

    Da tut sich leider gar nix. Kann mir jemand helfen und evtl. gleich die unwrap() Funktion einbauen?

    DANKE

  • Morris hat auf jeden Fall schon mal Recht, unwrap() ist da einfacher.

    kaiser: Um den Text zu erhalten war in meinem ersten Versuch die after()-Methode gedacht, welche den Text dahinter einfügen sollte ehe der Link entfernt wird.

    So, noch mal umgebaut und Selektor berichtigt. Geht das jetzt?

    Code
    <script type="text/javascript">
        jQuery('ul#page-menu > li > a').text().unwrap();
    </script>

    Du musst mal schauen, ob der Selektor so jetzt schon stimmt. Erklärung: Mit ">" wird das direkte Kind angesprochen. Das soll verhindern, dass die inneren Links auch entfernt werden. Ich hoffe, unwrap() nach text() geht auch.

  • Ich meinte schon JavaScript. Aber ich kann leider beides kaum :D
    Das ist was mir der web-develpper ausgibt für einen der obersten Menüpunkte.

    html > body > div#top > div#content > div.shell > div.wrapper > div #menu > ul #page-menu sf-menu > li .page_item page-item-7 > a

    Stimmt doch dann. Oder nicht?!

    Das Problem mit dem unwrap()-Beispiel ist, dass die Funktion dort von einem Button aufgerufen wird. Ich hab kein Button und sollte die Funktion vermutl. beim laden der Seite ausführen.
    Keine Ahnung wie die entsprechenden Methoden heißen.

  • Code
    <script type="text/javascript">
        jQuery('ul#page-menu > li > a').text().unwrap();
    </script>

    Du musst mal schauen, ob der Selektor so jetzt schon stimmt. Erklärung: Mit ">" wird das direkte Kind angesprochen. Das soll verhindern, dass die inneren Links auch entfernt werden. Ich hoffe, unwrap() nach text() geht auch.

    Ne, klappt leider nicht! Danke für die Erklärung des >. Das war mir ein Rätsel. Und danke für euer Hilfe überhaupt...

  • Ach so, ja, ausführen wenn die Seite geladen wird. Dann so:

    Code
    <script type="text/javascript">
    jQuery(document).ready(function() {
      jQuery('ul#page-menu > li > a').text().unwrap();
    });
    </script>

    Mit dem text().unwrap() bin ich mir nicht ganz sicher. Falls das so nicht geht, probiere das hier:

    Code
    <script type="text/javascript">
    jQuery(document).ready(function() {
      jQuery('ul#page-menu > li > a').wrapInner('<span></span>').find('span').unwrap();
    });
     </script>
  • mmmm. klappt nicht...
    Ich binde jquery so ein:

    HTML
    <script src="http://code.jquery.com/jquery-latest.js"></script>

    Wo ich die Funktionen dann ausführe spielt keine Rolle? oder doch?

  • Hab mir eben mal ein Beispiel gebaut. Und es hat funktioniert. Das File findet ihr im Anhang.

    Jetzt muss es nur noch in der echten Umgebung klappen. Das sollte allerdings machbar sein. Danke nochmal für eure Hilfe! Das war super!!!

    Einmal editiert, zuletzt von Graveto (10. Februar 2010 um 18:15)

  • Leider klappt es nicht mit dem superfish-menü.
    Ich hab keine Ahnung warum :confused:.

    Hat noch jemand ne Idee?

    Wenn ich den generierten Quellcode aus dem Browser neheme und daraus ein eine neue Seite baue funktioniert es:

    Einmal editiert, zuletzt von Graveto (26. Februar 2010 um 13:24)

  • Auf Deiner Seite sind hoverIntent.js und super-fish.js *vor* der jQuery-Lib eingebunden. Das ist vermutlich falsch, jQuery muss zuerst. jQuery solltest Du im übrigen nicht von jquery.com einbinden, sondern besser die komprimierte Variante, die bei WP eh schon dabei ist. Das sollte so hier aussehen:

    PHP
    <?php wp_enqueue_script('jquery'); ?>
  • In erster Linie klappt es nicht, weil Du jQuery immer noch nach den jQuery-Plugins lädst. Das kann nicht gehen. Setze die beiden genannten JS-Dateien bitte mal unter den wp-head-Aufruf. Da müssten die enqueue-Anweisungen die JavaScripte einfügen, denke ich. Zur Sicherheit, den document-ready-Schnipsel am besten auch gleich darunter.

  • mmm. Ich habe doch folgendes da stehen und es funktioniert nicht:

    Is doch dann die richtige Reihenfolge?!?

  • Nein, wie Du ja selber am Quelltext Deiner Seite siehst.[COLOR=Black] ;-) [/COLOR][COLOR=#000080][COLOR=Black]wp_enqueue_script sagt WP nur, dass es das Script laden soll. Das fügt nichts in die Seite ein. WP sammelt alle diese Aufrufe und fügt sie an der Stelle ein, an der wp_head() definiert ist. Deshalb, wie oben schon geschrieben, die Scripte mal unter wp_head() rücken. Mit etwas Glück geht es dann.[/COLOR]
    [/COLOR]

  • Oh. Das hatte ich falsch verstanden. Leider klappt's immer noch nicht. Vielleicht sollte ich das Menü doch statisch aufbauen.
    Danke für deine Hilfe!

Jetzt mitmachen!

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