Ändern des Erscheinungsbilds benutzerdefinierter Taxonomieeingaben

14

Ich arbeite an einer Site, die einige benutzerdefinierte Taxonomien verwendet (für benutzerdefinierte Beitragstypen). Ich habe mich dafür entschieden, einige Taxonomien hierarchisch zu gestalten, da die Methode zur Eingabe von Werten (Kontrollkästchen) für diese Site wünschenswerter ist als die formlose Eingabe von nicht hierarchischen Taxonomien. Was ich jedoch wirklich möchte, ist die Möglichkeit, Optionsfelder anstelle von Kontrollkästchen zu verwenden. Außerdem möchte ich das Dropdown-Menü entfernen, mit dem das übergeordnete Element in der Taxonomie ausgewählt wird. Bildschirmfoto

Gehe ich das falsch an? Sollte ich mit nicht hierarchischen Taxonomien beginnen und stattdessen die Eingabemethoden für diese ändern? Ich bin völlig offen für Beiträge und werde gerne alle Fragen beantworten oder weitere Informationen liefern, wenn ich kann.

Travis Northcutt
quelle
+1 Gute Frage. Das wäre auch schön für ein Projekt, an dem ich auch arbeite. Darüber hinaus muss die benutzerdefinierte Taxonomie ein Dropdown-Menü anstelle einer Liste von "Kategorien" sein.
Zack
Ja, ein Dropdown wäre auch toll.
Travis Northcutt
Anstatt zu versuchen, die vorhandene Metabox zu ändern, müssen Sie möglicherweise die Standardmetabox für die angegebene Taxonomie entfernen und Ihre eigene registrieren, um eine benutzerdefinierte Funktion aufzurufen, die die Begriffe in einer Radiogruppe anzeigt zwei links oben per maugly zur verfügung gestellt.
22.

Antworten:

13

Klar, benutze einfach CSS und den 'admin_head'Haken, damit es verschwindet. Ich glaube, das ist was Sie suchen?

Hierarchischer Taxonomie-Eintrag auf der WordPress-Post-Seite ohne das übergeordnete Element
(Quelle: mikeschinkel.com )

Fügen Sie einfach Folgendes zur functions.phpDatei Ihres Themas oder zu einer .phpDatei eines Plugins hinzu, das Sie möglicherweise schreiben. Beachten Sie, dass ich einen 'init'Haken eingefügt habe, um den Post-Typ "Home" und die Taxonomie "Bath" zu definieren, damit andere dem Beispiel leichter folgen können. Beachten Sie auch , dass , wenn Ihre Taxonomie genannt wird Baths“ Sie werden die CSS - Selektor ändern müssen #newbaths_parentstatt #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' ),
    )
  );
}

AKTUALISIEREN

Ich habe also anscheinend den Radioknopf-Teil der Frage verpasst . Leider macht WordPress dies nicht einfach, aber Sie können es durch die Verwendung der PHP-Ausgabepufferung (über die ob_start()und ob_get_clean()-Funktionen) erreichen. Suchen Sie einfach einen Hook, bevor die Metabox ausgegeben wird ( 'add_meta_boxes'), und einen Hook, nachdem sie ausgegeben wurde ( 'dbx_post_sidebar'), und durchsuchen Sie dann die erfassten HTML für 'checkbox'und ersetzen mit 'radio', Echo auf den Bildschirm und fertig! Code folgt:

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

Und die Beweise:

Screenshot mit Taxonomien über Optionsfelder
(Quelle: mikeschinkel.com )

MikeSchinkel
quelle
1
"Schau Ma, kein Elternfeld!" Mike, du hast mich zum Lachen gebracht! : D
Michal Mau
@ maugly - Das ist meine Standardeinstellung. : D
MikeSchinkel
@ haha ​​- Schön, dass es dir gefällt. :)
MikeSchinkel
Wie immer fantastisch.
Travis Northcutt
1
@ tnorthcutt - Ehrlich gesagt würde ich empfehlen, Ihre eigene Metabox zu codieren. Das habe ich getan und es ist wirklich nicht schwer dafür. Erstellen Sie einfach eine Ansichtsquelle, eine Übereinstimmung <input>und <select>Namen, und Sie müssen nicht einmal etwas tun, um die Taxonomie zu erfassen. WordPress erledigt das für Sie. ODER Verwenden Sie ein benutzerdefiniertes Feld und eine Bypass-Taxonomie, die möglicherweise zu hoch ist.
MikeSchinkel
2

oder, wenn Sie faul sind, können Sie dieses Plugin verwenden: Single Value Taxonomy UI

(Ich hätte das lieber als Kommentar zu Mikes Antwort hinzugefügt, da es meistens dasselbe tut - aber ich kann noch keine Kommentare hinzufügen.)

pax
quelle
Leider kein Update in 2 Jahren :( Dies ist wirklich etwas, das WP zusätzlich unterstützen sollte, da viele Benutzer Taxonomien mit einem Begriff pro Objekt verwenden würden, wenn dies eine Option wäre (dh Taxonomien anstelle von Meta verwenden, wenn die Abfrageleistung wichtig ist).
Jerclarke