Formatos de Publicación Personalizados para Tipos de Publicación Personalizados

31 oct 2011, 00:48:12
Vistas: 13.9K
Votos: 4

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?

0
Todas las respuestas a la pregunta 4
3

Tienes varias opciones aquí, así que aclararé lo que puedes hacer.

  1. 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_Hierarchy

  2. Usar 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_Query

  3. Usar una taxonomía para organización en el backend, las taxonomías personalizadas no tienen que ser públicas.

  4. 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.

31 oct 2011 01:21:18
Comentarios

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.

Rothbert Rothbert
31 oct 2011 04:36:38

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

Wyck Wyck
31 oct 2011 05:36:51

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 Rothbert
1 nov 2011 00:51:20
0

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.

4 ene 2012 23:55:50
1

Puedes habilitar el soporte para formatos de entrada en un CPT (Tipo de contenido personalizado). Al registrar el tipo de entrada, establece 'post-formats' en el argumento 'supports'.

8 ene 2014 01:14:47
Comentarios

¿puedes mejorar tu respuesta con algunos ejemplos de código y enlaces a documentación adicional?

Aurovrata Aurovrata
17 abr 2021 17:28:49
0

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:

  1. Crear una taxonomía personalizada y asignarla a las publicaciones.
  2. 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.
  3. Establecer un término de publicación predeterminado.
  4. 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' );
17 abr 2021 17:38:21