2013-05-07 8 views
8

Ho un tipo di post personalizzato di "personale". Ho bisogno di ottenere questo per visualizzare lo staff in ordine alfabetico per cognome sulla pagina. So che una soluzione potrebbe essere quella di usare i meta box personalizzati e suddividere il nome e il cognome in due campi, ma sto cercando di evitarlo, visto che sembra molto logico e non così pulito come solo usando il campo del titolo.WordPress Orderby Ultima parola nel titolo

Ho uno shortcode funzionante che mostrerà il tipo di post personalizzato con l'attributo di tassonomia "tipo" del personale richiesto. Ecco un esempio:

[staff type="local"] 

non posso solo supporre che è la seconda parola nel titolo che voglio da quando alcuni membri del personale sono le coppie ed avrà entrambi i loro nomi elencati come: "Bob e Cindy Smith" .

Ecco lo shortcode che ho finora.

function get_staff($atts) { 
    extract(shortcode_atts(array('type' => 'international'), $atts)); 
    $loop = new WP_Query(
     array (
      'post_type' => 'staff', 
      'orderby' => 'title', 
      'staff-type' => $type 
     ) 
    ); 

if ($loop->have_posts()) { 
    $output = '<div class="staff">'; 

    while($loop->have_posts()){ 
     $loop->the_post(); 
     $meta = get_post_meta(get_the_id()); 

     $output .= ' 
      <div class="staff" style="float: left; display: block; border: 1px solid #CCC; margin: 10px; padding: 12px; background-color: #eee;"> 
       <a href="' . get_permalink() . '"> 
        ' . get_the_post_thumbnail($post->ID, 'thumbnail') . '<br /> 
       ' . get_the_title() . '</a><br /> 
       ' . get_the_excerpt() . ' 
      </div> 
     '; 
    } 
    $output .= "</div>"; 
} else { 
    $output = 'No Staff Meet This Criteria Yet.'; 
} 

return $output; 
}; 

add_shortcode('staff', 'get_staff'); 

Questo funziona benissimo ma manca l'alfabetizzazione in base al cognome. Grazie per l'aiuto che puoi offrire. Questo è il mio primo vero tentativo di uno shortcode elaborato quindi per favore sii un po 'specifico con la tua risposta.

risposta

13

Prova questo. In primo luogo aggiungere il seguente orderby filter in functions.php

function posts_orderby_lastname ($orderby_statement) 
{ 
    $orderby_statement = "RIGHT(post_title, LOCATE(' ', REVERSE(post_title)) - 1) DESC"; 
    return $orderby_statement; 
} 

e poi utilizzarlo nella query in questo modo

add_filter('posts_orderby' , 'posts_orderby_lastname'); 
    $loop = new WP_Query(
     array (
      'post_type' => 'staff', 
      'staff-type' => $type 
     ) 
    ); 

e dopo il ciclo rimuovere il filtro

remove_filter('posts_orderby' , 'posts_orderby_lastname'); 
+0

Funziona perfettamente. C'è un modo per mettere la prima funzione in un altro posto diverso dal file functions.php? Sto creando i miei plugin personalizzati per la portabilità dei tipi di post e in futuro se il mio cliente cambierà il tema questo si interromperà. Grazie per l'aiuto. –

+0

Ho trovato questo articolo sullo sviluppo di plugin che mostra un esempio di aggiunta di un'azione http://plugintutorials.blogspot.com/2011/04/wordpress-plugin-tutorial-part-iv-lets.html - Suppongo che tu possa semplicemente aggiungere nel tuo file di plugin. – user850010

+0

Dolce, funziona anche lì. Grazie ancora! –