Blättern nur wenn mehr als 1 Post in Category

  • Hallo zusammen!

    Ich habe als Nicht-PHP-Profi ein Problem und finde nirgends eine Lösung. Leider auch nicht hier im Forum.

    Es geht um die Blätterfunktion in meiner single-php...

    Am Ende meiner Seite befindet sich ein Container, wo previous_post_link und next_post_link drinstecken. Ich möchte, daß dieser Container nur dann auftaucht, wenn mehr als 1 Post in der Category steht. Mit anderen Worten: Wenn nur 1 Post in der Category ist, soll der Container mit den Blätter-Links NICHT angezeigt werden. Macht ja auch keinen Sinn, weil nichts zum blättern da ist. Die xxx_post_link´s werden auch korrekterweise nicht angezeigt, aber der Container, wo die Links drinstehen wird angezeigt.

    In meiner Theorie müsste man doch nur eine Abfrage vor dem Container machen, in dem gefragt wird: "Zähle die Posts" und dann "Gibt es mehr als 1 Post" ...

    Ich habe mir schon einiges an Code selber zusammengestrickt, aber es hagelt nur Fehler.

    Kann mir jemand aushelfen?

    Tausend Dank!

    • 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

  • Die Text-Links werden tatsächlich nicht angezeigt, wenn es nichts zu blättern gibt, aber der Container, in dem die Links stehen, wird trotzdem IMMER angezeigt.

    So sieht es bei mir aus:

    PHP
    <div class="navigation">
    <div class="previous">
    <?php previous_post_link('%link', '< Previous in category', TRUE); ?>
    </div>
    <div class="next">
    <?php next_post_link('%link', 'Next in category >', TRUE); ?>
    </div>
    </div>

    In meinem Fall ist der Container "Navigation" ein Kasten mit Umrandung. Dieser Kasten erscheint immer, egal, ob es etwas zu blättern gibt oder nicht. Der Kasten soll aber nur auftauchen, wenn es mehr als einen Post innerhalb einer Kategorie gibt.

  • Die Text-Links werden tatsächlich nicht angezeigt, wenn es nichts zu blättern gibt, aber der Container, in dem die Links stehen, wird trotzdem IMMER angezeigt.


    Das ist dann aber ne ganz andere Frage. ;-)

  • Erst mal wieder DANKE, aber folgende Probleme:

    Mit Deinem Code gibt es die Fehlermeldung:

    Zitat

    Fatal error: Call to undefined function get_next_post_link()

    ich habe daraufhin das get_ weggemacht.

    Mein Code lautet nun:

    PHP
    <?php 
     $next = next_post_link('%link', 'Next in category >', TRUE); 
     $prev = previous_post_link('%link', '< Previous in category', TRUE); 
    ?>
      <?php if(!empty($prev) && !empty($next)) : ?>
      <div class="navigation">
        <div class="previous"><?php echo $prev; ?></div>
        <div class="next"><?php echo $next; ?></div>
      </div>
      <?php endif; ?>

    Damit scheint es zu funktionieren, aber komischerweise werden die Class-Angaben des CSS ignoriert. Also navigation, previous und next. Die Links erscheinen als Standard-Text-Links völlig unformatiert und ohne meinen CSS-Kasten darum.
    Wo kann denn da der Fehler sein?

    So eine kleine Sache und so eine Fummelei ...

    Ich danke Dir aber für die Denkanstöße!

  • kenne jetzt Dein "CSS-Level" nicht, aber es sollte mit

    div.navigation .previous {}
    div.navigation .next {}

    funktionieren. Ich würde aber eine ID für den Navigationsdiv verwenden (# statt .) > div#navigation .previous

  • Mit dem CSS kann es nichts zu tun haben, das ist schon richtig und funktioniert auch.

    Wenn ich mir den Ergebnis-Quellcode im Browser anschaue, sehe ich da als Ergebnis meines obigen PHP-Codes nur:

    Code
    <a href="http://www.domain.de/wordpress/?p=349">Next in category ></a>

    Drumherum sollten aber doch eigentlich die div´s auftauchen ... tun sie aber nicht ...

  • Fatal error: Call to undefined function get_next_post_link()


    Oh, Mist, die gibts ja gar nicht. :neutral: Meist gibts zu den Template-Tags eine "get_*"-Variante ohne direkte Ausgabe. Aber die Funktionen sind wohl eine Ausnahme.

    Zitat

    ich habe daraufhin das get_ weggemacht.


    Ohne "get_*" wirds direkt ausgegeben - daher auch deine weiteren Fehler.

    Versuchs mal so:

    PHP
    <?php 
     $next = get_adjacent_post(true, '', false); 
     $prev = get_adjacent_post(true, '', true); 
    ?>
    <?php if($prev || $next) : ?>
      <div class="navigation">
        <div class="previous"><?php previous_post_link('%link', 'Next in category >', TRUE); ?></div>
        <div class="next"><?php previous_post_link('%link', '< Previous in category', TRUE); ?></div>
      </div>
    <?php endif; ?>

    Intern arbeitet WP ähnlich (vgl. wp-includes/link-template.php, ab Zeile 1166), also müsste es so eigentlich funktionieren. ;-)

  • Jipieh!

    Mal abgesehen von ein paar kleinen Drehern, funktioniert das Ganze jetzt super!

    Hier noch mal die Lösung:

    Vielen lieben Dank!

  • Und da bin ich auch schon wieder mit einem fast ähnlichen Problem... ;)

    Diesmal geht es aber darum, daß die Navigationslinks auf den Kategorie-Seiten nur dann angezeigt werden sollen, wenn es auch etwas zu blättern gibt.

    Also diesmal nicht in der single.php, sondern in der index.php:

    PHP
    <div class="navigation">
        <div class="alignleft">
          <?php next_posts_link(__('&laquo; Older Entries')) ?>
        </div>
        <div class="alignright">
          <?php previous_posts_link(__('Newer Entries &raquo;')) ?>
        </div>
      </div>

    Obige Lösung funktioniert dort natürlich nicht. Ich habe schon alles durch ...

  • Ergänzung: Warum willst Du Links haben, die dann nicht funktionieren (weil sie ja nichts zeigen können. Die Seite ist ja nicht da)? Außerdem, wie viele fiktive Seiten sollen denn angezeigt werden... 1, 2 ... 10? Ich müsste mich jetzt erstmal einlesen, damit ich mir für Dich eine Antwort/Lösung ausdenken kann. Deshalb möchte ich vorab wissen, was das für einen Grund hat.

  • Sei doch bitte so nett und lies den Thread! Da steht, was ich für Gründe habe.

    Wenn keine Links existieren zum Blättern, dann werden trotzdem die Divs gesetzt...

    Ich möchte, daß kein Div gesetzt wird, wenn es keine Links zum Vor- und Rückwärtsblättern gibt.

  • Naja. Das "if" hast Du ja schon. Fehlt nur mehr das "else". Und wenn Du die divs nicht ausgegeben haben willst, dann hängst du ihnen zB beim Ergebnis "else" eine Css-Klasse {display: none;} an.

  • ich verstehe es nicht ...

    ... zeigt auf der index.php gar nichts an ...

  • Zuviele Parameter: ;-)

    Achso, die &&-Abfrage erwartet natürlich beide Links als gefüllt. Besser:


    Template Tags/next posts link WordPress Codex
    Template Tags/previous posts link WordPress Codex

Jetzt mitmachen!

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