2010-10-21 26 views
11

वर्डप्रेस में आपको डिफ़ॉल्ट पोस्ट की स्थिति मिलती है: प्रकाशित, ड्राफ्ट और लंबित समीक्षा। क्या सक्रिय विषय की function.php फ़ाइल के माध्यम से उन्हें पंजीकृत करके कुछ और पोस्ट प्रकार जोड़ना संभव है?वर्डप्रेस एक नई पोस्ट स्थिति बनाते हैं?

इसके अलावा यह संभव है प्रकाशित मेटा बॉक्स के lables संपादित करने के लिए? क्या मैं सच में नहीं है प्रकाशन प्रस्तुत करने हूँ ...

भी जोड़ने के लिए मैं केवल जब अपने कस्टम पोस्ट प्रकार में मैं कर दिया है बनाया इन परिवर्तनों चाहते पसंद है।

सधन्यवाद

स्कॉट

+0

इन स्थितियों का गहरा प्रभाव है कि पदों का इलाज और प्रदर्शन कैसे किया जाता है, है ना? मुझे कल्पना नहीं है कि आप कुछ सूची में सिर्फ एक नया जोड़ सकते हैं। आप कौन सी नई स्थिति जोड़ना चाहते हैं? –

+0

मैं केवल अपने कस्टम पोस्ट प्रकारों में नई स्थिति जोड़ना चाहता हूं और उन पदों के साथ जो कस्टम प्रश्नों के माध्यम से पोस्ट प्रदर्शित कर रहा हूं। वर्डप्रेस के साथ आप किस स्थिति के आधार पर पोस्ट प्रदर्शित करने के लिए क्वेरी कर सकते हैं। तो कुछ स्थितियों को जोड़ना जैसे कि सोल्ड और हटाया गया सिस्टम सिस्टम के लिए कोई मुद्दा नहीं होना चाहिए? – Brady

+1

@ ब्रैडी मैं देखता हूं। मुझे नहीं पता कि यह आसानी से संभव है या नहीं। इसके बजाय टैगिंग/श्रेणियों प्रणाली का उपयोग करने के बारे में क्या? –

उत्तर

18

WP 3.0 के बाद से, आप एक पोस्ट प्रकार के लिए नई स्थितियां जोड़ने के लिए register_post_status() फ़ंक्शन (http://hitchhackerguide.com/2011/02/12/register_post_status/) का उपयोग कर सकते हैं।

WP ही डिफ़ॉल्ट "प्रकाशित", "मसौदा", आदि का उपयोग कर create_initial_post_types init() में समारोह पर स्थितियां WP-शामिल/post.php (http://hitchhackerguide.com/2011/02/11/create_initial_post_types/) रजिस्टर करने के लिए register_post_status() का उपयोग करता है।

उन लिंक्स में कोड को देखें, और आप कैसे समारोह का उपयोग करने के एक विचार प्राप्त कर सकते हैं।

मुझे उम्मीद है कि आपको शुरू करने में मदद मिलेगी!

2

आप एक प्लगइन लिख सकता है अगर आप जानते हैं कैसे। आपको यह एक http://wordpress.org/extend/plugins/edit-flow/ या यह एक http://wordpress.org/extend/plugins/custom-post-type-ui/

"हुक, क्रिया और फिल्टर" के साथ

तरह प्रलेखन या इसी तरह के प्लग-इन में खुदाई करने के लिए है आप व्यवस्थापक इंटरफ़ेस बदल सकते हैं, यहाँ http://codex.wordpress.org/Plugin_API

देख अब तक मैं लिखने है और मैं सटीक चरण आप यह पूरा करने के पालन करने के लिए पता नहीं है सिर्फ एक सरल प्लगइन ...

गुड लक!

+0

आपके सुझाव के लिए धन्यवाद, लेकिन इस पल में मेरे पास एपीआई के चारों ओर खुदाई करने का समय नहीं है, मैं वर्तमान में एक ग्राहक के लिए समय सीमा पर काम कर रहा हूं, इसलिए अब के लिए एक कस्टम फील्ड समाधान में रहना होगा। मैं बस उम्मीद कर रहा था कि कोई यह जानता होगा कि इसे कैसे करें और कैसे करें पर कुछ डेमो कोड प्रस्तुत करें। – Brady

1

आप कस्टम पोस्ट की स्थिति 'register_post_status फंक्शन का उपयोग करके जोड़ सकते हैं। http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/post.php

में create_initial_post_types() का संदर्भ लें, हालांकि यह चेतावनी दी जानी चाहिए कि यह वर्डप्रेस बैकएंड UI में एकीकृत नहीं है।

1
/** 
* PostStatusExtender 
* 
* @author Hyyan Abo Fakher<[email protected]> 
*/ 
class PostStatusExtender 
{ 

    /** 
    * Extend 
    * 
    * Extend the current status list for the given post type 
    * 
    * @global \WP_POST $post 
    * 
    * @param string $postType the post type name , ex: product 
    * @param array $states array of states where key is the id(state id) and value 
    *      is the state array 
    */ 
    public static function extend($postType, $states) 
    { 

     foreach ($states as $id => $state) { 
      register_post_status($id, $state); 
     } 

     add_action('admin_footer-post.php', function() use($postType, $states) { 

      global $post; 
      if (!$post || $post->post_type !== $postType) { 
       return false; 
      } 

      foreach ($states as $id => $state) { 

       printf(
         '<script>' 
         . 'jQuery(document).ready(function($){' 
         . ' $("select#post_status").append("<option value=\"%s\" %s>%s</option>");' 
         . ' $("a.save-post-status").on("click",function(e){' 
         . '  e.preventDefault();' 
         . '  var value = $("select#post_status").val();' 
         . '  $("select#post_status").value = value;' 
         . '  $("select#post_status option").removeAttr("selected", true);' 
         . '  $("select#post_status option[value=\'"+value+"\']").attr("selected", true)' 
         . ' });' 
         . '});' 
         . '</script>' 
         , $id 
         , $post->post_status !== $id ? '' : 'selected=\"selected\"' 
         , $state['label'] 
       ); 

       if ($post->post_status === $id) { 
        printf(
          '<script>' 
          . 'jQuery(document).ready(function($){' 
          . ' $(".misc-pub-section #post-status-display").text("%s");' 
          . '});' 
          . '</script>' 
          , $state['label'] 
        ); 
       } 
      } 
     }); 


     add_action('admin_footer-edit.php', function() use($states, $postType) { 

      global $post; 

      if (!$post || $post->post_type !== $postType) { 
       return false; 
      } 

      foreach ($states as $id => $state) { 
       printf(
         '<script>' 
         . 'jQuery(document).ready(function($){' 
         . " $('select[name=\"_status\"]').append('<option value=\"%s\">%s</option>');" 
         . '});' 
         . '</script>' 
         , $id 
         , $state['label'] 
       ); 
      } 
     }); 

     add_filter('display_post_states', function($states, $post) use($states, $postType) { 

      foreach ($states as $id => $state) { 
       if ($post->post_type == $postType && $post->post_status === $id) { 
        return array($state['label']); 
       } else { 
        if (array_key_exists($id, $states)) { 
         unset($states[$id]); 
        } 
       } 
      } 

      return $states; 
     }, 10, 2); 
    } 

} 

और यहाँ उपयोग करने के लिए कि यह कैसे

add_action('init', function() { 
    PostStatusExtender::extend(self::NAME, array(
     'sold' => array(
      'label' => __('Sold', 'viasit'), 
      'public' => true, 
      'exclude_from_search' => true, 
      'show_in_admin_all_list' => true, 
      'show_in_admin_status_list' => true, 
      'label_count' => _n_noop('Sold <span class="count">(%s)</span>', 'Sold <span class="count">(%s)</span>'), 
     ) 
    )); 
}); 

संपादित करें: कोड में तय टाइपो।

+0

यह सिर्फ मुझे एक सफेद स्क्रीन दिया और कुछ भी नहीं किया ...... – Justin

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