Mengubah tampilan input taksonomi khusus

14

Saya sedang mengerjakan situs yang akan menggunakan beberapa taksonomi khusus (untuk jenis pos khusus). Saya telah memilih untuk membuat beberapa taksonomi hierarki karena metode memasukkan nilai (kotak centang) lebih diinginkan untuk situs ini daripada input bentuk bebas taksonomi hierarkis. Namun, yang saya benar - benar inginkan adalah dapat menggunakan input tombol radio daripada kotak centang. Selain itu, saya ingin menghapus dropdown yang digunakan untuk memilih item induk dalam taksonomi. tangkapan layar

Apakah saya salah tentang hal ini? Haruskah saya mulai dengan taksonomi non-hierarkis dan memodifikasi metode input pada mereka sebagai gantinya? Saya benar-benar terbuka untuk masukan dan dengan senang hati akan menjawab pertanyaan atau memberikan lebih banyak informasi jika saya bisa.

Travis Northcutt
sumber
+1 Pertanyaan Bagus. Ini juga bagus untuk proyek yang sedang saya kerjakan. Selain itu, buat taksonomi khusus menjadi menu tarik-turun alih-alih daftar "kategori".
Zack
Ya, dropdown juga bagus.
Travis Northcutt
1
Kedua tampaknya berurusan dengan masalah yang sangat mirip: Jenis Posting Kustom - Menu Dropdown Taksonomi? dan Butuh Bantuan dalam Menyimpan Ketentuan Taksonomi
Michal Mau
Alih-alih mencoba memodifikasi metabox yang ada, apa yang mungkin Anda lakukan adalah menghapus metabox default untuk taksonomi yang diberikan, lalu mendaftarkan Anda sendiri untuk memanggil fungsi kustom yang menampilkan istilah-istilah dalam grup radio, dan ini akan terkait dengan dua tautan disediakan di atas oleh maugly.
t31os

Jawaban:

13

Tentu saja, cukup gunakan CSS dan 'admin_head'hook untuk membuatnya menghilang. Saya percaya ini yang Anda cari?

Entri taksonomi hierarkis pada halaman posting WordPress tanpa orangtua
(sumber: mikeschinkel.com )

Cukup tambahkan berikut ini ke functions.phpfile tema Anda atau ke .phpfile plugin yang mungkin Anda tulis. Perhatikan bahwa saya menyertakan sebuah 'init'kait untuk mendefinisikan tipe posting "Home" dan taksonomi "Bath" sehingga orang lain dapat lebih mudah mengikuti contoh. Perhatikan juga bahwa jika taksonomi Anda dinamai Baths " Anda harus mengubah pemilih CSS menjadi #newbaths_parentalih-alih #newbath_parent:

add_action('admin_head','remove_bath_parents');
function remove_bath_parents() {
  global $pagenow;
  if (in_array($pagenow,array('post-new.php','post.php'))) { // Only for the post add & edit pages
    $css=<<<STYLE
<style>
<!--
#newbath_parent {
  display:none;
}
-->
</style>
STYLE;
    echo $css;
  }
}
add_action('init','add_homes_and_baths');
function add_homes_and_baths() {
  register_post_type('home',
    array(
      'label'           => 'Homes',
      'public'          => true,
      'rewrite'         => array('slug' => 'homes'),
      'hierarchical'    => false,
    )
  );
  register_taxonomy('bath', 'home', array(
    'hierarchical'    => true,
    'label'           => 'Baths',
    'rewrite'         => array('slug' => 'baths' ),
    )
  );
}

MEMPERBARUI

Jadi sepertinya saya melewatkan bagian tombol radio dari pertanyaan. Sayangnya WordPress tidak membuat ini mudah, tetapi Anda bisa mewujudkannya dengan menggunakan buffering output PHP (melalui ob_start()dan ob_get_clean()fungsi.) Temukan saja hook sebelum metabox adalah output ( 'add_meta_boxes') dan hook setelah itu adalah output ( 'dbx_post_sidebar') dan kemudian cari yang ditangkap HTML untuk 'checkbox'dan ganti dengan 'radio', gema ke layar dan kamu selesai! Kode berikut:

add_action('add_meta_boxes','mysite_add_meta_boxes',10,2);
function mysite_add_meta_boxes($post_type, $post) {
  ob_start();
}
add_action('dbx_post_sidebar','mysite_dbx_post_sidebar');
function mysite_dbx_post_sidebar() {
  $html = ob_get_clean();
  $html = str_replace('"checkbox"','"radio"',$html);
  echo $html;
}

Dan buktinya:

Cuplikan layar memperlihatkan taksonomi menggunakan tombol radio
(sumber: mikeschinkel.com )

MikeSchinkel
sumber
1
"Lihat Bu, tidak ada bidang orang tua!" Mike, kamu membuatku tertawa! : D
Michal Mau
@ jelek - Itu standar saya. : D
MikeSchinkel
@ haha ​​- Senang Anda menyukainya. :)
MikeSchinkel
Fantastis, seperti biasa.
Travis Northcutt
1
@tnorthcutt - Terus terang, saya akan merekomendasikan pengkodean metabox Anda sendiri Itulah yang saya lakukan dan ini benar-benar tidak sulit untuk ini. Lakukan saja sumber tampilan dan kecocokan <input>dan <select>nama dan Anda bahkan tidak perlu melakukan apa pun untuk menangkap taksonomi; WordPress akan melakukannya untuk Anda. ATAU, gunakan bidang khusus dan pintas taksonomi yang mungkin berlebihan untuk ini.
MikeSchinkel
2

atau, jika Anda malas dapat menggunakan plugin ini: Single Value Taxonomy UI

(Saya lebih suka menambahkan ini sebagai komentar untuk jawaban Mike karena kebanyakan melakukan hal yang sama - tetapi saya belum dapat menambahkan komentar)

pax
sumber
Sayangnya, tidak ada pembaruan dalam 2 tahun :( Ini benar-benar sesuatu yang WP harus tambahkan dukungan inti karena banyak orang akan menggunakan taksonomi satu istilah per objek jika itu pilihan (yaitu menggunakan taksonomi daripada meta ketika kinerja permintaan penting).
jerclarke