it-swarm.com.de

Beiträge alphabetisch nach benutzerdefiniertem Feldwert sortieren, Trennlinie zwischen verschiedenen Buchstaben einfügen

ich liste alle Beiträge meines benutzerdefinierten Beitragstyps "Person" alphabetisch sortiert nach dem benutzerdefinierten Feld last_name auf einer Seite auf.

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

Folgendes versuche ich zu tun:

alphabetical list with dividers

Update:
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>
3
Christoph

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 wird das Feld last_name postmeta abgerufen (dies fügt der Seite keine Abfragen hinzu, da WordPress das Postmeta zwischenspeichert) und dann der erste Buchstabe davon überprüft. Wenn es sich um einen neuen Buchstaben handelt, wird ein Listenelement mit einem Bild ausgegeben, das nach dem Buchstaben benannt ist (z. B. f.jpg).

5

Nun, da die Sortierfunktionen von Wordpress diese Art von Funktionalität nicht enthalten, sollten Sie sich wahrscheinlich an Matt Mullenweg wenden ... haha ​​...

Nein, aber in Wirklichkeit können Sie wahrscheinlich query_posts () für jeden Buchstaben verwenden (mit anderen Worten, rufen Sie die Schleife bis zu 26 Mal einmal für jeden Buchstaben auf. Geben Sie dann für jede Schleife einen Code ein, der prüft, ob der Der erste Buchstabe des Beitrags meta_value passt zum entsprechenden Buchstaben. Wenn es keine Beiträge gibt, die zu diesem Buchstaben passen, überspringen Sie einfach diesen Buchstaben.

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

So etwas (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 nicht sicher, wie anstrengend das auf dem Server ist, aber es sollte funktionieren. Es ist das erste, woran ich dachte. Ich muss wissen, wie es geht!

0
trusktr