केवल समर्थन के आधार पर पोस्ट प्रकार प्राप्त करें


9

मैं एक सूची बनाने की कोशिश कर रहा हूं जिसमें बिलिन और कस्टम पोस्ट दोनों प्रकार शामिल हैं:

$post_types = get_post_types(array(
  'public' => TRUE,
), 'objects');

उपरोक्त लगभग काम करता है, लेकिन मैं attachmentइस सूची से बाहर करना चाहूंगा , केवल विशिष्ट प्रकार के साथ पोस्ट प्रकार वापस कर रहा हूं editor, titleऔर thumbnail। क्या यह संभव है?

जवाबों:


9

मुझे पता चला कि get_post_types_by_support()वांछित परिणाम प्राप्त करने के लिए समाधान प्रतीत होता है:

$post_types = get_post_types_by_support(array('title', 'editor', 'thumbnail'));

उपरोक्त वापस आ जाएगा post, pageऔर कोई भी कस्टम पोस्ट प्रकार जो समर्थन करता है title,editor और thumbnail

चूंकि यह निजी पोस्ट प्रकारों को भी लौटाएगा, इसलिए हम सूची के माध्यम से लूप कर सकते हैं और जांच सकते हैं कि क्या दृश्यपटल पर प्रकार देखा जा सकता है। यह is_post_type_viewable()फ़ंक्शन का उपयोग करके किया जा सकता है :

foreach ($post_types as $key => $post_type) {
  if (!is_post_type_viewable($post_type)) {
    unset($post_types[$post_type]);
  }
}

बस एक नोट: यह ज्यादातर मामलों में काम करेगा ।
साइबरमेट

4

get_post_types()पोस्ट प्रकार के ऑब्जेक्ट के फ़ील्ड से मिलान करने के लिए तर्कों की एक सरणी को स्वीकार करता है । तो, आप ऐसा कुछ कर सकते हैं (परीक्षण नहीं):

$post_types = get_post_types(array(
  'public'   => true,
  'supports' => array( 'editor', 'title', 'thumbnail' )
), 'objects');

दुर्भाग्य से, आप इस फ़ंक्शन में "बहिष्कृत" जैसे कुछ सेट नहीं कर सकते हैं, और आपको केवल पोस्ट प्रकार भी मिलते हैं जो बिल्कुल समर्थन करते हैं'editor', 'title', 'thumbnail' , अधिक नहीं और कम नहीं।

या आप get_post_types_by_support()(केवल WP 4.5 और अधिक के लिए) का उपयोग कर सकते हैं । इसके अलावा, ध्यान दें कि आप इस फ़ंक्शन के साथ विशिष्ट पोस्ट प्रकारों को बाहर नहीं कर सकते हैं, लेकिन समर्थन के विशिष्ट मामले के लिए editor, title, thumbnail, अधिकांश मामलों में अनुलग्नक पोस्ट प्रकार को बाहर रखा जाएगा )।

$post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );

यदि आप ऐसा कुछ चाहते हैं जो किसी भी मामले में काम करेगा, तो मैं पोस्ट के प्रकारों को व्यापक मानदंडों के आधार पर प्राप्त करने की कोशिश करूंगा, फिर अपनी खुद की सरणी बनाएं, इसके लिए कुछ:

$_post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );

$post_types = [];

foreach($_post_types as $post_type) {
    // In most cases, attachment post type won't be here, but it can be
    if( $post_type->name !== 'attachment' ) {
        $post_types[] = $post_type;
    }
}

उपयोग supportsकरने से काम नहीं लगता है? मेरे पास एक कस्टम पोस्ट प्रकार है जो समर्थन करता है editorऔर अगर मैं उपयोग करता supports => array('editor')हूं तो मुझे एक खाली परिणाम मिलता है? आप दूसरे दृष्टिकोण हालांकि काम करने के लिए लगता है।
साइक्लोनोस्कोप

2
ऐसा लगता है कि हम get_post_types_by_support()इसे प्राप्त करने के लिए समर्थन का उपयोग कर सकते हैं ।
साइक्लोनोस्कोप

0

ओपी के प्रश्न के लिए सबसे सरल तरीका होगा कि लौटे हुए ऐरे से सिर्फ 'अटैचमेंट' को हटाना;

$post_types = get_post_types(array('public' => TRUE,), 'objects');
unset($post_types['attachment']);

जबकि अन्य समाधानों की तरह सुरुचिपूर्ण नहीं है, इसमें कम से कम ओवरहेड है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.