2013-05-07 33 views
8

Tôi có loại bài đăng tùy chỉnh là "nhân viên". Tôi cần để có được điều này để hiển thị các nhân viên theo thứ tự bảng chữ cái theo tên cuối cùng trên trang. Tôi biết một công việc xung quanh sẽ là sử dụng hộp meta tùy chỉnh và chia nhỏ tên và họ thành hai trường nhưng tôi đang cố gắng tránh điều đó vì điều đó có vẻ rất đáng sợ và không sạch sẽ như chỉ sử dụng trường tiêu đề.Thứ tự WordPress từ cuối cùng trong tiêu đề

Tôi có một mã vạch làm việc sẽ hiển thị loại bài đăng tùy chỉnh với thuộc tính phân loại "loại" của nhân viên được yêu cầu. Dưới đây là ví dụ:

[staff type="local"] 

Tôi không thể cho rằng đó là từ thứ hai trong tiêu đề mà tôi muốn vì một số nhân viên là cặp đôi và sẽ có cả hai tên của họ được liệt kê như: "Bob và Cindy Smith" .

Đây là shortcode mà tôi có cho đến nay.

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

Điều này rất hữu ích nhưng thiếu chữ cái theo họ. Cảm ơn vì những giúp đỡ của bạn. Đây là nỗ lực thực sự đầu tiên của tôi tại một shortcode phức tạp vì vậy hãy có một chút cụ thể với câu trả lời của bạn.

Trả lời

13

Hãy thử điều này. Đầu tiên thêm orderby filter sau trong functions.php

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

và sau đó sử dụng nó trong truy vấn của bạn như vậy

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

và sau khi vòng loại bỏ bộ lọc

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

Nó hoạt động một cách hoàn hảo. Có cách nào để đặt chức năng đầu tiên ở đâu đó khác ngoài tệp functions.php không? Tôi đang làm cho các loại bài đăng tùy chỉnh của tôi bổ sung cho tính di động và trong tương lai nếu khách hàng của tôi thay đổi chủ đề của họ, điều này sẽ phá vỡ. Cảm ơn bạn đã giúp đỡ. –

+0

Tôi tìm thấy bài viết này về phát triển plugin trong đó cho thấy một ví dụ về việc thêm một hành động http://plugintutorials.blogspot.com/2011/04/wordpress-plugin-tutorial-part-iv-lets.html - Tôi đoán bạn chỉ có thể thêm nó trong tệp plugin của bạn. – user850010

+0

Ngọt, nó cũng hoạt động ở đó. Cảm ơn một lần nữa! –

Các vấn đề liên quan