2013-05-07 6 views
8

मेरे पास "स्टाफ" का एक कस्टम पोस्ट प्रकार है। मुझे पृष्ठ पर अंतिम नाम से वर्णमाला के अनुसार कर्मचारियों को प्रदर्शित करने की आवश्यकता है। मुझे पता है कि चारों ओर एक काम कस्टम मेटा बक्से का उपयोग करना होगा और पहले और आखिरी नामों को दो क्षेत्रों में तोड़ना होगा, लेकिन मैं इससे बचने की कोशिश कर रहा हूं क्योंकि यह बहुत ही हैकिश लगता है और शीर्षक क्षेत्र का उपयोग करने के रूप में उतना ही साफ नहीं है।वर्डप्रेस ऑर्डरबी शीर्षक में अंतिम शब्द

मेरे पास एक शोर्ट काम कर रहा है जो कस्टम प्रकार के प्रकार को "प्रकार" वर्गीकरण विशेषता के साथ दिखाएगा।

[staff type="local"] 

मैं सिर्फ कल्पना नहीं कर सकते कि यह शीर्षक है कि मैं चाहता हूँ के बाद से कुछ कर्मचारियों जोड़ों कर रहे हैं और उनके नाम के दोनों तरह सूचीबद्ध होगा के दूसरे शब्द है: "बॉब और सिंडी स्मिथ" यहाँ एक उदाहरण है ।

यहां मेरे पास अब तक का शोर्ट है।

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

यह बहुत अच्छा काम करता है लेकिन अंतिम नाम से वर्णमाला को याद कर रहा है। आप जो भी सहायताकर सकें, उसके लिए धन्यवाद। यह एक विस्तृत शोर्ट पर मेरा पहला वास्तविक प्रयास है, इसलिए कृपया अपने उत्तर के साथ थोड़ा विशिष्ट बनें।

उत्तर

13

इसे आजमाएं। सबसे पहले functions.php

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

में निम्नलिखित orderby filter जोड़ने और फिर तो

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

की तरह अपने प्रश्न में इसका इस्तेमाल करते हैं और पाश के बाद फिल्टर

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

यह पूरी तरह से काम करता है को हटा दें। क्या function.php फ़ाइल के अलावा किसी अन्य जगह को पहले स्थान पर रखने का कोई तरीका है? मैं पोर्टेबिलिटी के लिए अपने कस्टम पोस्ट प्रकार प्लगइन्स बना रहा हूं और भविष्य में यदि मेरा ग्राहक अपनी थीम बदलता है तो यह टूट जाएगा। आपकी सहायता के लिए धन्यवाद. –

+0

मुझे यह आलेख प्लगइन विकास के बारे में मिला जो एक क्रिया जोड़ने का एक उदाहरण दिखाता है http://plugintutorials.blogspot.com/2011/04/wordpress-plugin-tutorial-part-iv-lets.html - मुझे लगता है कि आप बस जोड़ सकते हैं यह आपकी प्लगइन फ़ाइल में है। – user850010

+0

मीठा, यह भी वहां काम करता है। एक बार फिर धन्यवाद! –

संबंधित मुद्दे