Modification de l'apparence des entrées de taxonomie personnalisées

14

Je travaille sur un site qui utilisera quelques taxonomies personnalisées (pour les types de publication personnalisés). J'ai choisi de rendre certaines des taxonomies hiérarchiques parce que la méthode de saisie des valeurs (cases à cocher) est plus souhaitable pour ce site que l'entrée de forme libre des taxonomies non hiérarchiques. Cependant, ce que j'aimerais vraiment, c'est pouvoir utiliser les entrées des boutons radio au lieu des cases à cocher. De plus, j'aimerais supprimer la liste déroulante utilisée pour choisir l'élément parent dans la taxonomie. capture d'écran

Suis-je en train de mal faire ça? Dois-je commencer par des taxonomies non hiérarchiques et modifier à la place les méthodes de saisie? Je suis complètement ouvert aux contributions et répondrai avec plaisir à toutes les questions ou fournirai plus d'informations si je le peux.

Travis Northcutt
la source
+1 bonne question. Ce serait également bien pour un projet sur lequel je travaille également. De plus, la taxonomie personnalisée doit être un menu déroulant au lieu d'une liste de "catégories".
Zack
Ouais, une liste déroulante serait bien aussi.
Travis Northcutt
1
Ces deux semblent avoir affaire à un problème très similaire: Type de message personnalisé - Menu déroulant Taxonomie? et besoin d'aide pour sauvegarder les termes de la taxonomie
Michal Mau
Plutôt que d'essayer de modifier la métabox existante, ce que vous pourriez envisager de faire est de supprimer la métabox par défaut pour la taxonomie donnée, puis d'enregistrer la vôtre pour appeler une fonction personnalisée qui affiche les termes dans un groupe de radio, et cela serait lié à la deux liens fournis ci-dessus par maugly.
t31os

Réponses:

13

Bien sûr, utilisez simplement CSS et le 'admin_head'crochet pour le faire disparaître. Je crois que c'est ce que vous cherchez?

Entrée de taxonomie hiérarchique sur la page de publication WordPress sans le parent
(source: mikeschinkel.com )

Ajoutez simplement ce qui suit au functions.phpfichier de votre thème ou au .phpfichier d'un plugin que vous pourriez écrire. Notez que j'ai inclus un 'init'crochet pour définir le type de message "Home" et la taxonomie "Bath" afin que d'autres puissent plus facilement suivre l'exemple. Notez également que si votre taxonomie est nommée Baths ", vous devrez modifier le sélecteur CSS pour qu'il soit #newbaths_parentau lieu de #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' ),
    )
  );
}

MISE À JOUR

Il semble donc que j'ai raté la partie bouton radio de la question. Malheureusement , WordPress ne fait pas facile , mais vous pouvez y arriver en utilisant tampon de sortie PHP (via les ob_start()et ob_get_clean()fonctions). Il suffit de trouver un crochet avant la METABOX est sortie ( 'add_meta_boxes') et un crochet après est sortie ( 'dbx_post_sidebar') et recherche la capture HTML 'checkbox'et remplacez-le par 'radio', faites-le écho à l'écran et c'est fait! Le code suit:

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

Et les preuves:

Capture d'écran montrant les taxonomies à l'aide des boutons radio
(source: mikeschinkel.com )

MikeSchinkel
la source
1
"Regarde maman, pas de champ parent!" Mike, tu m'as fait rire! : D
Michal Mau
@maugly - C'est ma valeur par défaut. : D
MikeSchinkel
@haha - Heureux que vous l'aimiez. :)
MikeSchinkel
Fantastique, comme toujours.
Travis Northcutt
1
@tnorthcutt - Franchement, je recommanderais de coder votre propre métabox. C'est ce que j'ai fait et ce n'est vraiment pas difficile pour ça. Il suffit de faire une vue de la source et de la correspondance <input>et des <select>noms et vous n'aurez même rien à faire pour capturer la taxonomie; WordPress le fera pour vous. OU, utilisez un champ personnalisé et contournez la taxonomie qui pourrait être excessive pour cela.
MikeSchinkel
2

ou, si vous êtes paresseux, vous pouvez utiliser ce plugin: UI de taxonomie à valeur unique

(J'aurais préféré ajouter ceci en tant que commentaire à la réponse de Mike car cela fait principalement la même chose - mais je ne peux pas encore ajouter de commentaires)

pax
la source
Malheureusement, aucune mise à jour dans 2 ans: (C'est vraiment quelque chose que WP devrait ajouter un support de base pour autant de personnes utiliseraient des taxonomies à un terme par objet si c'était une option (c'est-à-dire utiliser des taxonomies plutôt que des méta lorsque les performances des requêtes sont importantes).
jerclarke