Convertir campos personalizados en estándar en la interfaz de administración

4 sept 2010, 03:53:41
Vistas: 1.49K
Votos: 7

He añadido varios custom_post_types a mi instalación de WordPress 3. Todos son un poco diferentes entre sí y deben almacenar información única en custom_fields. Pero mientras uno puede almacenar un product_id, otro no. Uno tendrá un source_url y otro no. En lugar de tener que instruir a mis editores sobre qué campos personalizados deben usarse con qué posts personalizados, ¿cómo puedo hacer que cada post personalizado incluya sus campos personalizados como parte de la UI misma?

Si visitas "daily_cartoon" tendrías una pantalla que solo solicita un título, subtítulo y media.
Si visitas "daily_product" tendrías una pantalla que solo solicita un título, precio, resumen, etc.

3
Comentarios

@Jonathan Sampson: Estaré trabajando todo el fin de semana en un paquete para abordar esto (llevo más de un mes trabajando en ello). Pero tengo un plazo hasta el martes, así que no responderé preguntas de StackExchange este fin de semana. Si esto sigue sin resolverse la próxima semana, definitivamente lo abordaré.

MikeSchinkel MikeSchinkel
4 sept 2010 19:27:34

@MikeSchinkel En realidad todavía estoy trabajando en el proyecto, así que si ya terminaste tu herramienta, estaría encantado de probarla y compartir mi experiencia.

Sampson Sampson
12 sept 2010 04:02:50

Hola @Jonathan Sampson: Todavía no estoy listo para publicarlo, pero puedo trabajar contigo en privado como mi primer beta tester si te parece. Contáctame por correo electrónico, mi dirección está en mi página de perfil de usuario: http://wordpress.stackexchange.com/users/89/mikeschinkel

MikeSchinkel MikeSchinkel
12 sept 2010 06:20:59
Todas las respuestas a la pregunta 3
0

Puedes agregar meta_boxes para tener los datos de campos personalizados almacenados en ellos. Dado que add_meta_box puede configurarse según el post_type, esto te permitirá agregar diferentes meta_box a diferentes tipos de contenido.

Revisa esta publicación para ver un ejemplo completo de cómo modificar la pantalla de nuevo/edición de un tipo de contenido personalizado.

4 sept 2010 04:41:06
2

Hola @Jonathan Sampson:

Existen varios plugins para facilitar la creación de Custom Post Types y algunos permiten definir Custom Fields también, sin un orden en particular:

Como mencioné anteriormente, he estado trabajando en uno que no proporciona una interfaz de usuario como estos, sino una API extensible para tipos de campos complejos (y simples también). Pero después de pasar una hora intentando empaquetarlo, me di cuenta de que aún no está listo para su distribución. Quizás en unas semanas.

Los plugins listados anteriormente deberían cubrir tus necesidades básicas por ahora, y en el futuro intentaré hacer el mío compatible con los datos almacenados por todos estos, en caso de que decidas usar el mío más adelante.

También podrías encontrar útil este post:

12 sept 2010 22:46:56
Comentarios

Voy a marcar como favorita esta pregunta y esperaré tu solución ;)

ariefbayu ariefbayu
12 sept 2010 23:37:12

@silent: ¡Genial!

MikeSchinkel MikeSchinkel
13 sept 2010 01:27:59
0

Recientemente he tenido que abordar un problema muy similar mientras trabajaba en un tema. La base del código provenía de esta publicación y había modificado parte del código.

Lo siguiente es la primera porción del código que había modificado.

    add_action('init', 'limited_post_type');
function my_custom_limited_post_type() 
{
  $labels = array(
    'name' => _x('Tipo de publicación limitada', 'nombre general del tipo de publicación'),
    'singular_name' => _x('Película - DVD', 'nombre singular del tipo de publicación')
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
    'show_in_nav_menus' => true
  ); 
  register_post_type('limited_post_type', $args);
}

Lo siguiente es la segunda porción del código que había modificado.

foreach ( $scope as $scopeItem ) {
       switch ( $scopeItem ) {
           case "post": {
             // Mostrar en cualquier pantalla de publicación
             if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
             $output = true;
             break;}              
            case "page": {
                  // Mostrar en cualquier pantalla de página
                  if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
            $output = true;
            break;}
             case "limited_post_type": {
                                // Mostrar solo en el tipo de publicación limitada
            if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
                   $output = true;
                   break;
                  }

Si lo deseas, envíame un mensaje y con gusto te enviaré mi archivo functions.php como referencia. Definitivamente esta es la forma de hacerlo funcionar, ya que pasé muchas noches de frustración al igual que tú.

14 sept 2010 04:40:52