Dadurch werden jedoch ALLE Kontrollkästchen für Begriffe zu Optionsfeldern.
Nicht nur das, es wird jedes Kontrollkästchen in einem Meta-Feld aktivieren - nicht ideal!
Lassen Sie uns stattdessen gezielt auf die wp_terms_checklist()
Funktion abzielen , mit der die Liste der Kontrollkästchen im gesamten Administrator generiert wird (einschließlich der schnellen Bearbeitung).
/**
* Use radio inputs instead of checkboxes for term checklists in specified taxonomies.
*
* @param array $args
* @return array
*/
function wpse_139269_term_radio_checklist( $args ) {
if ( ! empty( $args['taxonomy'] ) && $args['taxonomy'] === 'category' /* <== Change to your required taxonomy */ ) {
if ( empty( $args['walker'] ) || is_a( $args['walker'], 'Walker' ) ) { // Don't override 3rd party walkers.
if ( ! class_exists( 'WPSE_139269_Walker_Category_Radio_Checklist' ) ) {
/**
* Custom walker for switching checkbox inputs to radio.
*
* @see Walker_Category_Checklist
*/
class WPSE_139269_Walker_Category_Radio_Checklist extends Walker_Category_Checklist {
function walk( $elements, $max_depth, ...$args ) {
$output = parent::walk( $elements, $max_depth, ...$args );
$output = str_replace(
array( 'type="checkbox"', "type='checkbox'" ),
array( 'type="radio"', "type='radio'" ),
$output
);
return $output;
}
}
}
$args['walker'] = new WPSE_139269_Walker_Category_Radio_Checklist;
}
}
return $args;
}
add_filter( 'wp_terms_checklist_args', 'wpse_139269_term_radio_checklist' );
Wir schließen uns dem wp_terms_checklist_args
Filter an und implementieren dann unseren eigenen benutzerdefinierten "Walker" (eine Klassenfamilie, die zum Generieren hierarchischer Listen verwendet wird). Von dort aus ist es eine einfache Zeichenfolge, die type="checkbox"
durch ersetzt wird, type="radio"
wenn die Taxonomie so ist, wie wir sie konfiguriert haben (in diesem Fall "Kategorie").
function walk( $elements, $max_depth, ...$args ) {
$output = parent::walk( $elements, $max_depth, ...$args );
diesen beiden Zeilen müssen die Ellipsen vor dem platziert werden, sonst$args
wird ein Fehler ausgegeben . Ich werde versuchen, die Antwort oben zu bearbeiten ...Das Folgende macht ziemlich genau das, was @TheDeadMedic bei seiner Antwort getan hat. Gute Antwort, hat mich auf halbem Weg dorthin gebracht, also ist dies nur eine Art Ergänzung dazu. Aus persönlichen Gründen habe ich mich dafür entschieden
start_el
.→ Stellen Sie sicher, dass Sie IHRE TAXONOMIE im folgenden Code entsprechend Ihren Anforderungen ersetzen
Nun, wie @ Howdy_McGee in seinem Kommentar richtig angegeben hat, funktioniert dies nicht gut, richtig mit der Schnell- / Inline-Bearbeitung. Der obige Code behandelt das Speichern korrekt, aber das Radio bei der Inline-Bearbeitung wird nicht aktiviert. Natürlich wollen wir das, dafür habe ich folgendes getan:
→ Schreiben Sie einen JQuery-Code, um den überprüften Status zu verarbeiten.
→ Dateiname: editphp-inline-edit-tax-radio-hack.js - wird unten für die Warteschlange verwendet
→ Wir benötigen eine AJAX-Aktion - wie im obigen Codeblock gezeigt
→ Warteschlange über dem Skript
→ Ändern Sie die Pfadinformationen entsprechend Ihren Anforderungen
Dies funktioniert bisher recht gut, aber nur zum ersten Mal, wenn wir die Inline-Bearbeitung ein zweites Mal öffnen, haben wir den aktivierten Status wieder verloren. Das wollen wir natürlich nicht. Um das zu umgehen, habe ich eine Methode verwendet, die ich hier von @brasofilo gefunden habe. Der aktualisierte Inline-Bearbeitungsabschnitt wird neu geladen. Dies führt dazu, dass das Radio-Kontrollkästchen korrekt angezeigt wird, unabhängig davon, wie oft es geändert wird.
→ Stellen Sie sicher, dass IHR POST-TYP im folgenden Code entsprechend Ihren Anforderungen ersetzt wird
Hinweis: Nicht ausführlich getestet, funktioniert aber bisher gut
quelle
Mit dem
meta_box_cb
Parameter derregister_taxonomy
Funktion können Sie Ihre eigene Funktion für die definierenmeta_box
. Mit Hilfe dieses Artikels habe ich dieses Snippet erstellt:Um diese meta_box nutzen zu können, müssen Sie diesen Parameter an die
register_taxonomy
Funktion übergeben:Das Schöne an diesem Code ist, dass Sie überhaupt keine Parameter übergeben müssen, da er sich auf die von der
register_taxonomy
Funktion an ihn übergebenen Parameter stützt . Dies sind daspost
Objekt und ein Array, das Informationen zur Metabox selbst enthält.quelle
Wenn Sie es lieber mit einem Plugin zum Laufen bringen möchten, schauen Sie sich vielleicht https://wordpress.org/plugins/radio-buttons-for-taxonomies/ an.
Mit diesem Plugin können Sie die Standardtaxonomiefelder durch eine benutzerdefinierte Metabox ersetzen, die Optionsfelder verwendet. Dadurch wird jeder Beitrag effektiv auf einen einzelnen Begriff in dieser Taxonomie beschränkt.
quelle