2013-05-07 25 views
8

"Personel" özel bir posta türü var. Bunu, personelin sayfada soyadlarına göre alfabetik olarak göstermesi gerekiyor. Özel bir meta kutusu kullanmak ve ilk ve soyadlarını iki alana ayırmak için bir çalışma yapacağımı biliyorum ama bu durumun, sadece hararetli ve sadece başlık alanını kullanacak kadar temiz olmadığı için kaçınmaya çalışıyorum.WordPress Orderby Son Söz Başlığı içinde

İstenilen personel "tür" taksonomisi özelliği ile özel posta türünü gösterecek bir kısa kod çalışma var. "Bob ve Cindy Smith":

[staff type="local"] 

Sadece bazı personel çiftler vardır ve adlarını ikisi gibi listelenmiş olacağından istediğim başlığında ikinci kelime kabul edemeyiz: İşte bir örnek .

Şimdiye dek sahip olduğum kısa kod.

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'); 

Bu, harika çalışıyor ancak soyadlarına göre alfabetik olarak eksik. Sunduğunuz herhangi bir yardım için teşekkürler. Bu, ayrıntılı bir kısa koddaki ilk gerçek girişimimdir, lütfen cevabınıza biraz özel olun.

cevap

13

Bunu deneyin. İlk

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

functions.php

aşağıdaki orderby filter ekleyebilir ve daha sonra bu yüzden

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

gibi sorguda kullanmak ve döngü sonrasında Mükemmel çalışıyor filtreyi

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

kaldırın. İlk işlevi function.php dosyasından başka bir yere yerleştirmenin bir yolu var mı? Taşınabilirlik için özel posta türleri eklentilerimi yapıyorum ve gelecekte müşterim temalarını değiştirirse bu durum bozulur. Yardım ettiğin için teşekkür ederim. –

+0

Bu makaleyi, http://plugintutorials.blogspot.com/2011/04/wordpress-plugin-tutorial-part-iv-lets.html - ekleme ekleyebileceğiniz bir örneği gösteren eklenti geliştirme hakkında buldum. eklenti dosyasında. – user850010

+0

Tatlı, orada da çalışıyor. Tekrar teşekkürler! –