Alterar la apariencia de entradas de taxonomía personalizadas

14

Estoy trabajando en un sitio que utilizará algunas taxonomías personalizadas (para tipos de publicaciones personalizadas). Elegí hacer algunas de las taxonomías jerárquicas porque el método de ingresar valores (casillas de verificación) es más deseable para este sitio que la entrada de forma libre de taxonomías no jerárquicas. Sin embargo, lo que realmente me gustaría es poder usar entradas de botón de radio en lugar de casillas de verificación. Además, me gustaría eliminar el menú desplegable que se utiliza para elegir el elemento principal en la taxonomía. captura de pantalla

¿Voy por esto de la manera incorrecta? ¿Debería comenzar con taxonomías no jerárquicas y modificar los métodos de entrada en ellas? Estoy completamente abierto a la entrada y con gusto responderé cualquier pregunta o proporcionaré más información si puedo.

Travis Northcutt
fuente
+1 Buena pregunta. Esto también sería bueno para un proyecto en el que estoy trabajando también. Además, haga que la taxonomía personalizada sea un menú desplegable en lugar de una lista de "categorías".
Zack
Sí, un menú desplegable también sería genial.
Travis Northcutt
En lugar de intentar modificar el metabox existente, lo que podría considerar hacer es eliminar el metabox predeterminado para la taxonomía dada, luego registrar el suyo propio para llamar a una función personalizada que muestre los términos en un grupo de radio, y esto se vincularía con el dos enlaces proporcionados anteriormente por maugly.
t31os

Respuestas:

13

Claro, solo usa CSS y el 'admin_head'gancho para hacerlo desaparecer. ¿Creo que esto es lo que estás buscando?

Entrada de taxonomía jerárquica en la página de publicación de WordPress sin el padre
(fuente: mikeschinkel.com )

Simplemente agregue lo siguiente al functions.phparchivo de su tema o al .phparchivo de un complemento que podría estar escribiendo. Tenga en cuenta que incluí un 'init'gancho para definir el tipo de publicación "Inicio" y la taxonomía "Baño" para que otros puedan seguir más fácilmente el ejemplo. También tenga en cuenta que si su taxonomía se llama Baños " , deberá cambiar el selector CSS para que sea en #newbaths_parentlugar 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' ),
    )
  );
}

ACTUALIZAR

Parece que me perdí la parte del botón de radio de la pregunta. Desafortunadamente, WordPress no lo hace fácil, pero puede hacerlo usando el almacenamiento en búfer de salida de PHP (a través de las funciones ob_start()y ob_get_clean()). Simplemente encuentre un gancho antes de que se meta el metabox ( 'add_meta_boxes') y un gancho después de que se emita ( 'dbx_post_sidebar') y luego busque el capturado HTML para 'checkbox'y reemplazar con 'radio', hacer eco en la pantalla y listo! El código sigue:

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

Y la evidencia:

Captura de pantalla que muestra taxonomías usando botones de radio
(fuente: mikeschinkel.com )

MikeSchinkel
fuente
1
"¡Mira mamá, no hay campo padre!" Mike, me tienes riendo! : D
Michal Mau
@maugly: ese es mi valor predeterminado. : D
MikeSchinkel
@ jaja - Me alegro de que te guste. :)
MikeSchinkel
Fantástico, como siempre.
Travis Northcutt
1
@tnorthcutt - Francamente, recomendaría codificar su propio metabox. Eso es lo que hice y realmente no es difícil para esto. Simplemente haga una vista de fuente y coincidencia <input>y <select>nombres y ni siquiera tendrá que hacer nada para capturar la taxonomía; WordPress lo hará por ti. O, use un campo personalizado y omita la taxonomía, lo que podría ser excesivo para esto.
MikeSchinkel
2

o, si eres flojo, puedes usar este plugin: Single Value Taxonomy UI

(Preferiría agregar esto como un comentario a la respuesta de Mike, ya que generalmente hace lo mismo, pero aún no puedo agregar comentarios)

paz
fuente
Desafortunadamente, no hay actualización en 2 años :( Esto es realmente algo que WP debería agregar soporte básico para que muchas personas usarían taxonomías de un término por objeto si fuera una opción (es decir, usar taxonomías en lugar de meta cuando el rendimiento de la consulta es importante).
jerclarke