Cómo mostrar Metaboxes de acuerdo con el formato de publicación actual

Hoy me gustaría mostrarle cómo ir más lejos con metaboxes personalizados y específicamente cómo usarlos de acuerdo con los formatos de publicación..

No veremos cómo crear metaboxes personalizados reutilizables, ya que se ha tratado en un tema anterior, así que consulte este artículo si tiene algún problema con esto..


Introducción

Lo primero es lo primero, si nunca ha oído hablar de ellos, los formatos de publicación le permiten mostrar una publicación de muchas maneras, según el "formato" de la publicación que haya establecido (imagen, enlace, galería, etc.).

Para asegurarse de que su tema está listo para "publicar formatos", verifique que acepte diferentes formatos buscando esta función:

 add_theme_support ('post-format', array ('link', 'quote'));

Ahora con este ejemplo, podrás usar dos formatos de publicación: 'enlace' y 'cita'.

La idea es mostrar un metabox solo si se marca el botón de opción de formato correcto. Para esto, vamos a utilizar hooks (PHP) y jQuery (JavaScript)..


Paso 1 Agregar Metabox personalizados

Definiremos una matriz de metaboxes aplicables solo a las publicaciones (puede escribirla dentro del funciones.php archivo de su tema). Existen diferentes opciones predeterminadas (ubicación, prioridad) en las que no nos centraremos (de nuevo, consulte el artículo sobre metaboxes personalizados reutilizables).

Definir metaboxes

junto al campos Estamos definiendo, lo que es importante tener en cuenta en el código de abajo es la display_condition Variable que se usará para mostrar / ocultar metaboxes de acuerdo con el formato de publicación actual. Coincide con la ID del botón de radio de formato posterior.

 $ metaboxes = array ('link_url' => array ('title' => __ ('link information', 'twentyeleven'), 'applicableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-link', 'prioridad' => 'low', 'fields' => array ('l_url' => array ('title' => __ ('link url:', 'twentyeleven') , 'type' => 'text', 'description' => ", 'size' => 60))), 'quote_author' => array ('title' => __ ('quote author', 'twentyeleven') , 'applicableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-quote', 'priority' => 'low', 'fields' => array ('q_author '=> array (' title '=> __ (' quote author: ',' twentyeleven '),' type '=>' text ',' description '=> ",' size '=> 20))));

Para este tutorial, solo agregaremos una entrada de texto básico para cada metabox. Asegúrate de revisar la clave de campo es única o no funcionará correctamente.

Ahora crearemos tres funciones para agregar, actualizar / guardar y mostrar los metaboxes.

Crear Metaboxes

 add_action ('admin_init', 'add_post_format_metabox'); function add_post_format_metabox () global $ metaboxes; if (! empty ($ metaboxes)) foreach ($ metaboxes as $ id => $ metabox) add_meta_box ($ id, $ metabox ['title'], 'show_metaboxes', $ metabox ['applicableto'], $ metabox ['ubicación'], $ metabox ['prioridad'], $ id); 

Básicamente, solo estamos usando nuestras opciones previamente definidas para agregar estos metaboxes.

Mostrar metaboxes

 función show_metaboxes ($ post, $ args) global $ metaboxes; $ custom = get_post_custom ($ post-> ID); $ fields = $ tabs = $ metaboxes [$ args ['id']] ['fields']; / ** Nonce ** / $ output = ''; if (sizeof ($ fields)) foreach ($ fields as $ id => $ field) switch ($ field ['type']) default: case "text": $ output. = ''; descanso;  echo $ output; 

Hasta ahora, esto es lo que deberíamos tener en una nueva pantalla de administración de publicaciones:

Guardar metaboxes

 add_action ('save_post', 'save_metaboxes'); function save_metaboxes ($ post_id) global $ metaboxes; // verifique nonce if (! wp_verify_nonce ($ _POST ['post_format_meta_box_nonce'], basename (__FILE__))) return $ post_id; // marcar autoguardar si (definido ('DOING_AUTOSAVE') && DOING_AUTOSAVE) devuelve $ post_id; // verifique los permisos si ('page' == $ _POST ['post_type']) if (! current_user_can ('edit_page', $ post_id)) devuelve $ post_id;  elseif (! current_user_can ('edit_post', $ post_id)) return $ post_id;  $ post_type = get_post_type (); // recorra los campos y guarde los datos para cada ($ metaboxes como $ id => $ metabox) // verifique si metabox es aplicable para el tipo de publicación actual if ($ metabox ['applicableto'] == $ post_type) $ fields = $ metaboxes [$ id] ['fields']; foreach ($ fields as $ id => $ field) $ old = get_post_meta ($ post_id, $ id, true); $ nuevo = $ _POST [$ id]; if ($ new && $ new! = $ old) update_post_meta ($ post_id, $ id, $ new);  elseif ("== $ new && $ old ||! isset ($ _POST [$ id])) delete_post_meta ($ post_id, $ id, $ old);

Bien, ahora estamos listos y podemos agregar y actualizar metas de publicaciones para cada artículo y mostrarlas dentro de los metaboxes. Ahora podemos profundizar en nuestro problema: mostrar el metabox correcto para que coincida con el formato de publicación actual.


Paso 2 Muestra el Metabox correcto en el momento correcto

Para ello utilizaremos jQuery Manejar eventos de show, hide y radio change..

Para agregar JavaScript en línea solo en la sección de administración, podemos usar este gancho de acción:

 add_action ('admin_print_scripts', 'display_metaboxes', 1000);

La prioridad se establece en 1000 para garantizar que jQuery se haya cargado primero.

Podríamos poner un gancho más preciso como admin_print_scripts-post o admin_print_scripts-post-new, pero por alguna razón, si lo hace, se llama a jQuery después de que se imprime nuestro script.

Además, si tuviéramos que agregar formatos de publicación a tipos de publicación personalizados, no sería muy conveniente agregar todas las configuraciones posibles.

Lo que haremos es crear (a través de PHP) una cadena de JavaScript que contenga una lista de ID (la clave de campo que se ve arriba) separada con una coma. Se utilizará para ocultar todos los metaboxes pero el que coincida con el formato de publicación actual.

También vamos a construir (aún a través de PHP) un objeto JavaScript que usaremos para vincular la identificación de un botón de opción de formato posterior a la identificación de un metabox.

 function display_metaboxes () global $ metaboxes; if (get_post_type () == "post"):?>   

¡Y voilá! Ahora puede alternar entre formatos de publicación y siempre tendrá el metabox correcto mostrado.


Conclusión

Los formatos de publicación pueden ser muy útiles para personalizar el diseño de cualquier tipo de publicación y, por lo tanto, mostrar metaboxes es una excelente manera de mejorar la facilidad de uso..

Además, ahorra espacio en una pantalla de administración ya bien abarrotada. Con un poco más de CSS y varios campos, realmente puede mejorar la forma en que escribe las publicaciones y obtener una interfaz realmente intuitiva..