Zmiana wyglądu niestandardowych danych taksonomicznych

14

Pracuję nad witryną, która będzie korzystać z kilku niestandardowych systematyk (dla niestandardowych typów postów). Wybrałem, aby niektóre taksonomie były hierarchiczne, ponieważ metoda wprowadzania wartości (pól wyboru) jest bardziej pożądana dla tej witryny niż swobodne wprowadzanie taksonomii niehierarchicznych. Jednak tak naprawdę chciałbym móc używać przycisków przycisków radiowych zamiast pól wyboru. Ponadto chciałbym usunąć menu rozwijane, które służy do wybierania elementu nadrzędnego w taksonomii. zrzut ekranu

Czy robię to w niewłaściwy sposób? Czy powinienem zacząć od niehierarchicznych taksonomii i zamiast tego zmodyfikować metody wprowadzania? Jestem całkowicie otwarty na informacje i chętnie odpowiem na wszelkie pytania lub dostarczę więcej informacji, jeśli będę mógł.

Travis Northcutt
źródło
+1 dobre pytanie. Byłoby to również miłe dla projektu, nad którym również pracuję. Ponadto niech niestandardowa systematyka będzie rozwijanym menu zamiast listy „kategorii”.
Zack
Tak, dropdown również byłby świetny.
Travis Northcutt
1
Te dwa wydają się mieć do czynienia z bardzo podobnym problemem: niestandardowy typ postu - menu rozwijane systematyki? i potrzebuję pomocy w oszczędzaniu warunków taksonomii
Michał Mau
Zamiast próbować modyfikować istniejący metaboks, możesz spróbować usunąć domyślny metaboks dla danej taksonomii, a następnie zarejestrować własną, aby wywołać niestandardową funkcję, która wyświetla warunki w grupie radiowej, a to wiązałoby się z dwa linki podane powyżej przez maugly.
t31os

Odpowiedzi:

13

Jasne, po prostu użyj CSS i 'admin_head'haka, aby zniknął. Wierzę, że tego właśnie szukasz?

Hierarchiczna pozycja taksonomiczna na stronie postów WordPress bez elementu nadrzędnego
(źródło: mikeschinkel.com )

Po prostu dodaj następujące elementy do functions.phppliku motywu lub .phppliku wtyczki, który możesz pisać. Zauważ, że załączyłem 'init'hak, aby zdefiniować typ postu „Home” i taksonomię „Bath”, aby inni mogli łatwiej podążać za przykładem. Należy również pamiętać, że jeśli taksonomia jest nazwany Wanny” trzeba zmienić selektor CSS być #newbaths_parentzamiast #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' ),
    )
  );
}

AKTUALIZACJA

Wygląda na to, że przegapiłem część pytania dotyczącą przycisku opcji. Niestety WordPress nie ułatwia tego, ale możesz to zrobić za pomocą buforowania danych wyjściowych PHP (za pomocą funkcji ob_start()i ob_get_clean()). Po prostu znajdź zaczep przed wyjściem metaboxa ( 'add_meta_boxes') i zaczep po wyjściu ( 'dbx_post_sidebar'), a następnie wyszukaj przechwycone HTML dla 'checkbox'i zamień na 'radio', wyświetl go na ekranie i gotowe! Kod następuje:

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

I dowody:

Zrzut ekranu przedstawiający taksonomie za pomocą przycisków opcji
(źródło: mikeschinkel.com )

MikeSchinkel
źródło
1
„Spójrz Ma, nie ma pola nadrzędnego!” Mike, rozśmieszyłeś mnie! : D
Michał Mau
@maugly - To moje domyślne. : D
MikeSchinkel
@haha - Cieszę się, że ci się podoba. :)
MikeSchinkel
Fantastycznie jak zawsze.
Travis Northcutt,
1
@tnorthcutt - Szczerze mówiąc, polecam kodowanie własnego metaboxa. Tak właśnie zrobiłem i naprawdę nie jest to trudne. Po prostu zrób źródło widoku, dopasuj <input>i <select>nazwy, a nawet nie będziesz musiał nic robić, aby uchwycić taksonomię; WordPress zrobi to za Ciebie. LUB użyj niestandardowego pola i ominąć taksonomię, która może być do tego nadmierna.
MikeSchinkel
2

lub, jeśli jesteś leniwy, możesz użyć tej wtyczki: Single Value Taxonomy UI

(Wolałbym dodać to jako komentarz do odpowiedzi Mike'a, ponieważ w większości robi to samo - ale nie mogę jeszcze dodawać komentarzy)

patena
źródło
Brak aktualizacji za 2 lata niestety :( To jest naprawdę coś, co WP powinno dodać podstawową obsługę, ponieważ wiele osób użyłoby taksonomii jednego terminu na obiekt, gdyby to była opcja (tj. Używa taksonomii zamiast meta, gdy ważna jest wydajność zapytania).
jerclarke