Yalnızca desteğe dayalı yayın türleri alın


9

Yerleşik ve özel yazı türleri de dahil olmak üzere bir liste almaya çalışıyorum:

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

Yukarıdaki neredeyse çalışır, ancak ben hariç tutmak istediğiniz attachmentsadece gibi spesifik desteğiyle yazılan tipleri dönen, bu listeden editor, titleve thumbnail. Mümkün mü?

Yanıtlar:


9

Ben öğrendim get_post_types_by_support()istenilen sonucu elde etmek için çözüm gibi görünüyor:

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

Yukarıdaki irade dönüş post, pageve herhangi bir özel yayın türü olduğunu destekler title, editorve thumbnail.

Bu ayrıca özel gönderi türlerini de döndüreceğinden, liste içinde döngü yapabilir ve türün ön uçta görüntülenebilir olup olmadığını kontrol edebiliriz. Bu, aşağıdaki is_post_type_viewable()işlev kullanılarak yapılabilir :

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

Sadece bir not: bu çoğu durumda işe yarar.
cybmeta

4

get_post_types()bir yazı türü nesnesinin alanlarıyla eşleşecek bir dizi argümanı kabul eder . Yani, böyle bir şey yapabilirsiniz (test edilmedi):

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

Ne yazık ki, bu işlevde "hariç tut" gibi bir şey ayarlayamazsınız ve yalnızca tam olarak destekleyen 'editor', 'title', 'thumbnail', daha fazla veya daha az desteklemeyen yazı türlerini alırsınız .

Ya da kullanabilirsiniz get_post_types_by_support()(yalnızca WP 4.5 ve üstü için. Ayrıca, bu işlevle belirli gönderi türlerini de hariç tutamayacağınızı unutmayın, ancak belirli bir destek durumunda editor, title, thumbnail, ek sonrası türü çoğu durumda hariç tutulacaktır ).

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

Her durumda işe yarayacak bir şey istiyorsanız, daha geniş bir ölçütlere dayalı yazı türlerini almaya çalışın, sonra kendi dizinizi oluşturun, şöyle bir şey:

$_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;
    }
}

Kullanmak supportsişe yaramıyor gibi görünüyor mu? Destekleyen özel bir yazı türüm var editorve kullanırsam supports => array('editor')boş bir sonuç mu alıyorum? İkinci yaklaşımınız işe yarıyor gibi görünüyor.
Cyclonecode

2
Bunu get_post_types_by_support()başarmak için destek kullanabiliriz .
Siklon kodu

0

OP'nin sorusu için en basit yaklaşım, 'eki' döndürülen diziden ayırmak olacaktır;

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

Diğer çözümler kadar zarif olmasa da, en az ek yüke sahiptir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.