Hanya dapatkan jenis posting berdasarkan dukungan


9

Saya mencoba mengambil daftar termasuk tipe pos bawaan dan kustom:

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

Di atas hampir berfungsi, tetapi saya ingin mengecualikan attachmentdari daftar ini, hanya mengembalikan jenis posting dengan dukungan spesifik seperti editor, titledan thumbnail. Apakah ini mungkin?

Jawaban:


9

Saya menemukan itu get_post_types_by_support()tampaknya menjadi solusi untuk mendapatkan hasil yang diinginkan:

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

Di atas akan kembali post, pagedan setiap jenis pos khusus yang mendukung title, editordan thumbnail.

Karena ini juga akan mengembalikan jenis posting pribadi, kami dapat mengulang daftar dan memeriksa apakah jenisnya dapat dilihat di frontend. Ini dapat dilakukan dengan menggunakan is_post_type_viewable()fungsi:

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

Hanya sebuah catatan: ini akan berfungsi dalam banyak kasus.
cybmeta

4

get_post_types()menerima larik argumen untuk mencocokkan bidang objek jenis posting . Jadi, Anda dapat melakukan sesuatu seperti ini (tidak diuji):

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

Sayangnya, Anda tidak dapat mengatur sesuatu seperti "kecualikan" dalam fungsi ini, dan Anda hanya mendapatkan jenis posting yang mendukung dengan tepat 'editor', 'title', 'thumbnail' , tidak lebih dan tidak kurang.

Atau Anda dapat menggunakan get_post_types_by_support()(hanya untuk WP 4.5 dan lebih tinggi. Juga, perhatikan bahwa Anda juga tidak dapat mengecualikan jenis posting tertentu dengan fungsi ini, tetapi untuk kasus dukungan khusus untuk editor, title, thumbnail, tipe posting lampiran akan dikecualikan dalam kebanyakan kasus).

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

Jika Anda menginginkan sesuatu yang akan berfungsi dalam hal apa pun, saya akan mencoba untuk mendapatkan tipe posting berdasarkan kriteria yang lebih luas, kemudian membangun array Anda sendiri, sesuatu seperti ini:

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

Menggunakan supportstampaknya tidak bekerja? Saya memiliki jenis posting khusus yang mendukung editordan jika saya menggunakan supports => array('editor')saya mendapatkan hasil kosong? Pendekatan Anda yang kedua tampaknya berhasil.
Cyclonecode

2
Sepertinya kita bisa menggunakan get_post_types_by_support()dukungan untuk mencapai ini.
Cyclonecode

0

Pendekatan paling sederhana untuk pertanyaan OP adalah dengan menghapus 'lampiran' dari array yang dikembalikan;

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

Meskipun tidak seanggun solusi lain, ia memiliki overhead yang paling sedikit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.