web-dev-qa-db-fra.com

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

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

Est-ce que je m'y prends mal? Devrais-je commencer par des taxonomies non hiérarchiques et modifier les méthodes de saisie de celles-ci? Je suis tout à fait ouvert aux suggestions et je me ferai un plaisir de répondre à vos questions ou de fournir plus d'informations si je peux.

14
Travis Northcutt

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

 Hierarchical taxonomy entry on WordPress post page without the parent 
(source: mikeschinkel.com )

Ajoutez simplement ce qui suit au fichier functions.php de votre thème ou au fichier .php d’un plug-in que vous écrivez peut-être. Notez que j'ai inclus un crochet 'init' pour définir le type de message "Home" et la taxonomie "Bath" afin que les autres puissent plus facilement suivre l'exemple. Notez également que si votre taxonomie est nommée Baths ", vous devez modifier le sélecteur CSS en #newbaths_parent au 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' ),
    )
  );
}

METTRE À JOUR

Il semble donc que j'ai raté la partie du bouton radio de la question. Malheureusement, WordPress ne rend pas cela facile, mais vous pouvez y arriver en utilisant PHP buffering de sortie (via les fonctions ob_start() et ob_get_clean().) Il suffit de trouver un hook avant que la metabox soit sortie ('add_meta_boxes') et un hook après qu'elle soit sortie ('dbx_post_sidebar') puis recherchez le code HTML capturé pour 'checkbox' et remplacez-le par 'radio', faites-le afficher à l'écran et vous avez terminé! 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 la preuve:

 Screenshot showing taxonomies using radio buttons 
(source: mikeschinkel.com )

13
MikeSchinkel

ou, si vous êtes paresseux, pouvez utiliser ce plugin: Single Value Taxonomy UI

(J'aurais plutôt ajouté ceci en tant que commentaire à la réponse de Mike car il fait essentiellement la même chose - mais je ne peux pas encore ajouter de commentaires)

2
pax