Pages mit bestimmten Anfangsbuchstaben anzeigen lassen

  • Hallo,
    ich bin auf der Suche nach einer Möglichkeit Seiten mit einem bestimmten Anfangsbuchstaben auf einer Seite anzeigen zu lassen.
    Zum Beispiel:
    Seite Obst
    hier sollen Obstsorten mit B dargestellt werden.
    In dem Fall die Seiten Banane, Bromberre, Birne

    Lässt sich dieser Basis Code:

    PHP
    <?php wp_list_pages ('child_of=1701&title_li=' ); ?>


    ergänzen um eine Abfrage nach dem Anfangsbuchstaben?

    Bei Beiträgen verwende ich solch eine Abfrage

    PHP
    if (strpos(strtoupper(the_title('','',FALSE)),'B')=== 0) : ?>

    Hat jemand vielleicht einen Tipp für mich?

    • 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

  • Vielen Dank für den Hinweis.
    Habe mir das angeschaut, aber kommt mir offengestanden zu kompliziert vor.
    Geht es nicht vielleicht doch auf eine ähnliche Art:

    PHP
    <?php
    $mypages = get_pages( array( 'child_of' => 1701 ) );
    foreach( $mypages as $page ) :
    if (strpos(strtoupper(the_title('','',FALSE)),'B')=== 0) : ?>
        <div class="discobox"><a href="<?php echo get_page_link( $page->ID ); ?>">
        <?php echo get_the_post_thumbnail( $page->ID, 'thumbnail' ); ?>
        <?php echo $page->post_title; ?></a></div>
    <?php endif; ?>
    <?php endforeach; ?>


    Die Abfrage der Seiten funktioniert, aber es erscheinen alle Seiten. Der Filter mit "B" funktioniert nicht. Bei Beiträgen (posts) verwende ich diesen und da funktioniert es.

  • Die og. Hinweise sind vorgesehene Ansätze von WordPress für Deine Problembeschreibung mit der vorhandenen WordPress API.

    Zum geposteten Code: Dein Aufruf von [FONT=Courier New]the_title()[/FONT] bezieht sich nicht auf Deine [FONT=Courier New]$page[/FONT], da Du keine sog. WordPress Loop über Deine Ergebnisse erstellt hast. Verwende mit Deinem Ansatz z.B. [FONT=Courier New]$page->post_title[/FONT] wie weiter unten in Deinem Code oder eher [FONT=Courier New]get_the_title( $page )[/FONT].

    Wirklich empfehlen kann man diesen Ansatz aber nicht. Die Ergebnismenge sollte vor bzw. durch der Suchabfrage eingeschränkt werden und nicht erst danach.

  • Hallo b3317133,

    vielen Dank für deine erneute Hilfe.
    Ich habe es jetzt mit post_where probiert.
    Eigentlich suchte ich eine Lösung für Pages, aber dein Hinweis auf die Ergebnismenge betrifft auch meine derzeitige Posts Lösung.

    Hier mein Versuch - leider nicht erfolgreich wie gewünscht.

    In der functions.php:

    und in der Page-Test.php:

    Im Ergebnis werden mir auf der Test Page drei Beiträge angezeigt, aber leider funktioniert der Buchstabenfilter noch nicht.
    Ich würde mich freuen, wenn Du mir vielleicht hier noch einen Tipp geben könnten.

  • Versuche es z.B. damit, siehe auch [FONT=Courier New]esc_like()[/FONT] und [FONT=Courier New]posts_where[/FONT] Dokumentation.

    PHP
    add_filter( 'posts_where', 'startswithfilter', 10, 2 );
    function startswithfilter( $sql, $wp_query ) {
       global $wpdb;
       if ( $startswith = $wp_query->get( 'startswith' ) ) {
          $sql .= $wpdb->prepare( " AND $wpdb->posts.post_title LIKE %s ", $wpdb->esc_like( $startswith ) . "%" );
       }
       return $sql;
    }


    Ergänzung: Und am Ende nach der Ausgabe nicht [FONT=Courier New]wp_reset_postdata()[/FONT] vergessen.

    Ergänzung: Vertippte Variable im Code behoben.

    10 Mal editiert, zuletzt von b3317133 (15. August 2022 um 10:56)

Jetzt mitmachen!

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