Sortieren Sie Beiträge alphabetisch nach benutzerdefiniertem Feldwert und fügen Sie eine Trennlinie zwischen verschiedenen Buchstaben ein

wordpress.stackexchange https://wordpress.stackexchange.com/questions/10561

  •  16-10-2019
  •  | 
  •  

Frage

Ich liste alle Beiträge meines benutzerdefinierten Beitragstyps „Person“ alphabetisch sortiert nach dem benutzerdefinierten Feld auf last_name auf einer Seite.

Wie würde ich einen Teiler einfügen (z. B.ein Bild des Buchstabens), bevor ein Buchstabenbereich beginnt?

Folgendes versuche ich zu tun:

alphabetical list with dividers

Aktualisieren:
Hier ist der Code, den ich verwende:

<ul class="list-ensemble">
<?php query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC'); 
if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
    <li data-id="<?php the_ID(); ?>">
        <a href="<?php the_permalink(); ?>" class="ensemble-single-link">
            <?php if ( has_post_thumbnail() ) { the_post_thumbnail(thumbnail); } ?>
        </a>
    </li>
<?php endwhile; // end of the loop. ?>
</ul>
War es hilfreich?

Lösung

Versuche dies:

<ul class="list-ensemble">
<?php query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC'); 
$current_letter = '';
if ( have_posts() ) while ( have_posts() ) : the_post();
    $last_name = get_post_meta( $post->ID, 'last_name', true );
    $letter = strtolower( substr( $last_name, 0, 1 ) );
    if ( $letter != $current_letter ) {
        $current_letter = $letter; ?>
        <li class="letter">
            <img src="<?php echo $letter; ?>.jpg" alt="<?php echo $letter; ?>" title="<?php echo $letter; ?>">
        </li>
    <?php } ?>
    <li data-id="<?php the_ID(); ?>">
        <a href="<?php the_permalink(); ?>" class="ensemble-single-link">
            <?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'thumbnail' ); } ?>
        </a>
    </li>
<?php endwhile; // end of the loop. ?>
</ul>

Für jeden Beitrag in der Schleife ruft es die ab last_name Postmeta -Feld (dies fügt der Seite keine Abfragen hinzu, da WordPress die Postmeta zwischengespeichert) und überprüft dann den ersten Buchstaben davon. Wenn es sich um einen neuen Buchstaben handelt, gibt es ein Listenelement mit einem nach dem Buchstaben benannten Bild aus (z. f.jpg).

Andere Tipps

Nun, da die Sortierfunktionen von Wordpress diese Art von Funktionalität nicht bieten, sollten Sie wahrscheinlich Matt Mullenweg fragen ...Haha...

Nein, aber tatsächlich können Sie query_posts() wahrscheinlich für jeden Buchstaben verwenden (mit anderen Worten, die Schleife bis zu 26 Mal aufrufen, einmal für jeden Buchstaben).Fügen Sie dann für jede Schleife Code ein, der prüft, ob der erste Buchstabe des Beitrags „meta_value“ mit dem entsprechenden Buchstaben übereinstimmt.Wenn es keine Beiträge gibt, die diesem Buchstaben entsprechen, überspringen Sie einfach diesen Buchstaben.

Sie haben derzeit nur eine Schleife.Möglicherweise müssen Sie eine for()-Schleife schreiben, die wiederum jede WordPress-Schleife generiert.

Etwas in der Art (nur ein grober Entwurf):

<ul class="list-ensemble">
    <? for ($i=65; $i<91; $i++) : // 65 through 90 represent the uppercase alphabet
        query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC'); 
        //PUT SOME CODE HERE TO CHECK IF THE FIRST LETTER IS EQUAL TO $i
        //Set some variable $letter_matches == true if the letter matches.
    ?>
        <h3 class="letter">
            <?php //ECHO THE LETTER CORRESPONDING TO $i HERE ?>
        </h3>
        <?
        if ( have_posts() and $letter_matches ) while ( have_posts() ) : the_post(); ?>
            <li data-id="<?php the_ID(); ?>">
                <a href="<?php the_permalink(); ?>" class="ensemble-single-link">
                    <?php if ( has_post_thumbnail() ) { the_post_thumbnail(thumbnail); } ?>
                </a>
            </li>
        <?php endwhile; // end of the loop. ?>
<?endfor; ?>
</ul>

Im Wesentlichen haben Sie also bis zu 26 WordPress-Loops auf der Seite.Ich bin mir nicht sicher, wie anstrengend das für den Server ist, aber es sollte funktionieren.Es ist das Erste, woran ich gedacht habe.Lass mich wissen, wie es geht!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top