Ordinare i messaggi in ordine alfabetico in base al valore di campo personalizzato, inserto divisorio tra le diverse lettere

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

  •  16-10-2019
  •  | 
  •  

Domanda

sto messa in vendita di tutti i messaggi della mia misura Tipo post "persona" in ordine alfabetico dal last_name campo personalizzato in una pagina.

Come potrei inserto un divisore (ad esempio l'immagine della lettera) prima di un intervallo di lettere inizia?

Ecco quello che sto cercando di fare:

elenco alfabetico con divisori

Aggiornamento:
Ecco il codice che sto utilizzando:

<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>
È stato utile?

Soluzione

Prova questo:

<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>

Per ogni post nel loop, recupera il campo last_name postmeta (questo non aggiungerà qualsiasi query alla pagina perché WordPress memorizza nella cache il postmeta), quindi controlla la prima lettera di esso. Se si tratta di una nuova lettera, viene emesso un elemento di lista con un'immagine denominata dopo la lettera (ad esempio f.jpg).

Altri suggerimenti

Beh visto le caratteristiche di ordinamento di Wordpress non includono questo tipo di funzionalità, probabilmente si dovrebbe chiedere a Matt Mullenweg ... haha ??...

No, ma in realtà, probabilmente si può utilizzare query_posts () per ogni lettera (in altre parole chiamano il loop fino a 26 volte, una per ogni lettera. Poi, per ogni ciclo, make includere un codice che controlleremo vedere se la prima lettera dei adatta postali meta_value con la lettera corrispondente. Se non vi sono messaggi che hanno tale lettera, quindi far saltare quella lettera.

Al momento è solo un anello. Potrebbe capitare di dover scrivere un for () ciclo che a sua volta genera ogni ciclo wordpress.

Qualcosa di simile (solo un progetto di massima):

<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>

Quindi, in sostanza si avrà fino a 26 loop wordpress nella pagina. Io non sono sicuro di come sforzare che si trova sul server, ma dovrebbe funzionare. E 'la prima cosa che ho pensato. Fammi sapere come va!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top