Formatos de Publicación Personalizados para Tipos de Publicación Personalizados
La opinión predominante parece favorecer el uso de tipos de publicación personalizados en lugar de formatos de publicación personalizados.
Tengo varios tipos de publicación personalizados que quiero estilizar en 4 formatos diferentes de una manera que no sea pública, es decir, que no sea una categoría, etiqueta o taxonomía personalizada.
Los formatos de publicación personalizados parecerían ofrecer una solución ideal para esto: son funcionalidades integradas, fácilmente implementables, vienen con un cuadro meta práctico, se aplican fácilmente con declaraciones condicionales, etc.
El mayor inconveniente es que no son fácilmente personalizables: podría renombrarlos para mayor claridad.
Así que, dada la opinión predominante, ¿cuál sería un mejor enfoque para crear la misma funcionalidad?

Tienes varias opciones aquí, así que aclararé lo que puedes hacer.
Crear una plantilla de página para el tipo de contenido personalizado usando algo como
single-customposttype.php
y aprovechar la jerarquía de plantillas, http://codex.wordpress.org/Template_HierarchyUsar una consulta condicional para tu estilo en el bucle (o lo que estés utilizando), algo como
if (post type= your custom one) style it this way;
. O usar otros condicionales de WordPress. http://codex.wordpress.org/Class_Reference/WP_QueryUsar una taxonomía para organización en el backend, las taxonomías personalizadas no tienen que ser públicas.
Usar formatos de entrada para tu tipo de contenido personalizado, los CPT pueden soportar
post-formats
, http://codex.wordpress.org/Function_Reference/register_post_type
La mayoría de las personas eligen la primera opción, pero depende de lo que estés intentando hacer.

Gracias por tu respuesta Wyck. Tengo 3 CPT que quiero formatear según 4 subtipos como lo harían los formatos de entrada. Puede que use plantillas más adelante, pero en este momento estoy buscando una forma de aplicar el formato sin usar taxonomías que sean visibles en el front-end. Así que necesito encontrar una manera de restringir la visibilidad de la taxonomía personalizada solo al back-end o usar formatos de entrada renombrados para mayor claridad, que ya están restringidos al back-end. Agradecería cualquier indicación sobre cómo lograr taxonomías solo para el back-end, ya que probablemente sea la mejor opción.

Cuando registras una taxonomía tienes muchas opciones, algunas de las cuales son para no hacerlas públicas, http://codex.wordpress.org/Function_Reference/register_taxonomy

Gracias Wyck - OK, había visto la opción public => false y la probé, pero seguía viendo la taxonomía en el pie de página de mi entrada, pero me di cuenta de que esa opción solo la elimina de las nubes de etiquetas, etc. Veo que tendré que encontrar una manera de excluir taxonomías personalizadas específicas de la función que genera el pie de página de la entrada. Empezaré una nueva pregunta.

Rothbert, eliminas la visibilidad de las taxonomías en los archivos de tu tema.
La diferencia crucial entre "Custom Post Types" y "Post Formats" es la palabra 'custom' (personalizado).
En otras palabras, no puedes cambiar el nombre de los formatos de entrada personalizados. Estás limitado a los 10 predeterminados nativos de WordPress. No puedes añadir nuevos formatos de entrada. Y no puedes cambiar los nombres de los existentes.

Encontré este interesante artículo de blog de Nathan Swartz que básicamente crea formatos de publicación personalizados para cualquier tipo de publicación utilizando una taxonomía personalizada. Estoy reproduciendo su código aquí para que, en caso de que su blog desaparezca, su solución persista aquí.
Los pasos básicos involucrados son:
- Crear una taxonomía personalizada y asignarla a las publicaciones.
- Crear programáticamente los términos en esa taxonomía personalizada, de modo que los no administradores no puedan crear, editar o eliminar nuevos, pero sí puedan asignarlos a publicaciones.
- Establecer un término de publicación predeterminado.
- Cambiar la forma en que se muestra la taxonomía personalizada en la página del editor de publicaciones, para que solo se pueda elegir un formato.
Aquí está el código:
// Enganchar a la acción init y llamar a custom_post_formats_taxonomies cuando se dispare
add_action( 'init', 'custom_post_formats_taxonomies', 0 );
// crear una nueva taxonomía llamada 'format'
function custom_post_formats_taxonomies() {
// Añadir nueva taxonomía, hacerla jerárquica (como categorías)
$labels = array(
'name' => _x( 'Formatos', 'taxonomy general name', 'textdomain' ),
'singular_name' => _x( 'Formato', 'taxonomy singular name', 'textdomain' ),
'search_items' => __( 'Buscar Formatos', 'textdomain' ),
'all_items' => __( 'Todos los Formatos', 'textdomain' ),
'parent_item' => __( 'Formato Padre', 'textdomain' ),
'parent_item_colon' => __( 'Formato Padre:', 'textdomain' ),
'edit_item' => __( 'Editar Formato', 'textdomain' ),
'update_item' => __( 'Actualizar Formato', 'textdomain' ),
'add_new_item' => __( 'Añadir Nuevo Formato', 'textdomain' ),
'new_item_name' => __( 'Nombre del Nuevo Formato', 'textdomain' ),
'menu_name' => __( 'Formato', 'textdomain' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'format' ),
'capabilities' => array(
'manage_terms' => '',
'edit_terms' => '',
'delete_terms' => '',
'assign_terms' => 'edit_posts'
),
'public' => true,
'show_in_nav_menus' => false,
'show_tagcloud' => false,
);
register_taxonomy( 'format', array( 'post' ), $args ); // nuestra nueva taxonomía 'format'
}
// crear programáticamente algunos términos de formato
function example_insert_default_format() { // luego definiremos esto como nuestro predeterminado, así todas las publicaciones deben tener al menos un formato
wp_insert_term(
'Predeterminado',
'format',
array(
'description' => '',
'slug' => 'default'
)
);
}
add_action( 'init', 'example_insert_default_format' );
// repetir las siguientes 11 líneas para cada formato que desees
function example_insert_map_format() {
wp_insert_term(
'Mapa', // cambiar esto a
'format',
array(
'description' => 'Añade un mapa grande en la parte superior de tu publicación.',
'slug' => 'map'
)
);
}
add_action( 'init', 'example_insert_map_format' );
// asegurarse de que haya un tipo de Formato predeterminado y que esté seleccionado si no eligieron uno
function moseyhome_default_format_term( $post_id, $post ) {
if ( 'publish' === $post->post_status ) {
$defaults = array(
'format' => 'default' // cambiar 'default' por el slug del término que creaste arriba y que quieras como predeterminado
);
$taxonomies = get_object_taxonomies( $post->post_type );
foreach ( (array) $taxonomies as $taxonomy ) {
$terms = wp_get_post_terms( $post_id, $taxonomy );
if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
}
}
}
}
add_action( 'save_post', 'moseyhome_default_format_term', 100, 2 );
// reemplazar casillas de verificación por botones de radio para la taxonomía format y una meta caja personalizada
function wpse_139269_term_radio_checklist( $args ) {
if ( ! empty( $args['taxonomy'] ) && $args['taxonomy'] === 'format' ) {
if ( empty( $args['walker'] ) || is_a( $args['walker'], 'Walker' ) ) { // No sobrescribir walkers de terceros.
if ( ! class_exists( 'WPSE_139269_Walker_Category_Radio_Checklist' ) ) {
class WPSE_139269_Walker_Category_Radio_Checklist extends Walker_Category_Checklist {
function walk( $elements, $max_depth, $args = array() ) {
$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' );
