Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

Custom fields se pierden con los autosaves

Estas en el tema de Custom fields se pierden con los autosaves en el foro de WordPress en Foros del Web. Buenas!!! Estoy creando un tipo de producto (en un custom post type) que requiere de custom fields para ingresar determinada información. Todo funciona perfectamente, pero ...
  #1 (permalink)  
Antiguo 17/09/2011, 12:15
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Custom fields se pierden con los autosaves

Buenas!!!

Estoy creando un tipo de producto (en un custom post type) que requiere de custom fields para ingresar determinada información.

Todo funciona perfectamente, pero cuando hay un autosave se borra el contenido de "tipodeproducto", "precios" y "hotfeatures", mis custom fields.


Código PHP:
Ver original
  1. add_action('init', 'licencias_register');
  2.  
  3. function licencias_register() {
  4.  
  5.     $labels = array(
  6.         'name' => _x('Licencias', 'Post type'),
  7.         'singular_name' => _x('Licencia', 'Nombre singular del post type'),
  8.         'add_new' => _x('Añadir', 'agregar licencia'),
  9.         'add_new_item' => __('Añadir licencia'),
  10.         'edit_item' => __('Editar licencia'),
  11.         'new_item' => __('Nueva licencia'),
  12.         'view_item' => __('Ver licencia'),
  13.         'search_items' => __('Buscar en licencias'),
  14.         'not_found' =>  __('Nada encontrado'),
  15.         'not_found_in_trash' => __('Nada encontrado en la papelera'),
  16.         'parent_item_colon' => ''
  17.     );
  18.  
  19.     $args = array(
  20.         'labels' => $labels,
  21.         'public' => true,
  22.         'publicly_queryable' => true,
  23.         'show_ui' => true,
  24.         'query_var' => true,
  25.         'menu_icon' => get_stylesheet_directory_uri() . '/images/icono.png',
  26.         'rewrite' => true,
  27.         'capability_type' => 'post',
  28.         'hierarchical' => false,
  29.         'menu_position' => null,
  30.         'supports' => array('title','editor','thumbnail')
  31.       );
  32.  
  33.     register_post_type( 'licencia' , $args );
  34. }
  35.  
  36.  
  37. add_action("admin_init", "admin_init");
  38.  
  39. function admin_init(){
  40.   add_meta_box("licencia_meta", "Información adicional", "licencia_meta", "licencia", "normal", "low");
  41. }
  42.  
  43. function licencia_meta() {
  44.   global $post;
  45.   $custom = get_post_custom($post->ID);
  46.   $tipodeproducto = $custom["tipodeproducto"][0];
  47.   $precios = $custom["precios"][0];
  48.   $hotfeatures = $custom["hotfeatures"][0];
  49.   ?>
  50.   <p><label>Tipo de producto:</label><br />
  51.   <textarea cols="50" rows="1" name="tipodeproducto"><?php echo $tipodeproducto; ?></textarea></p>
  52.   <p><label>Precios:</label><br />
  53.   <textarea cols="50" rows="2" name="precios"><?php echo $precios; ?></textarea></p>
  54.   <p><label>Hot features (listas HTML):</label><br />
  55.   <textarea cols="50" rows="5" name="hotfeatures"><?php echo $hotfeatures; ?></textarea></p>
  56.   <?php
  57. }
  58.  
  59.  
  60. add_action('save_post', 'save_details');
  61.  
  62. function save_details(){
  63.   global $post;
  64.   update_post_meta($post->ID, "tipodeproducto", $_POST["tipodeproducto"]);
  65.   update_post_meta($post->ID, "precios", $_POST["precios"]);
  66.   update_post_meta($post->ID, "hotfeatures", $_POST["hotfeatures"]);
  67. }

Leí sobre el problema en varios lados y la única solución que me pareció que podía andar.. no resultó:
http://wordpress.org/support/topic/c...n-disappearing

Así que momentáneamente puse un tiempo de autosave larguiiiiisimo, pero no es una solución aceptable, sino algo para salir del paso.

Alguien tiene alguna idea al respecto?
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP
  #2 (permalink)  
Antiguo 17/09/2011, 15:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Custom fields se pierden con los autosaves

buenas Nekko tengo una gran duda, los temas complicados me dan un poco de ganas de investigar, según lei en todos lados e incluso en el link que colocas tu problema es que el autosave solo guarda el titulo y content y no los custom_fields, entonces porque no desabilitas este?? la otra respuesta que me llamo la atención fue esta
Cita:
I have solved this issue.

You need to add a conditional statement checking to make sure that data is present before actually updating custom fields. This is because the autosave feature does not grab all the data, it only grabs the title and post content so when it autosaves it erases all the other data
ahora no me he metido con custom_fields por lo que no te puedo dar un código realizado, pero estas haciendo la validación que indica el amigo de que esten todos los datos?? espero que te pueda dar una idea lo que te indico, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 17/09/2011, 16:23
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Respuesta: Custom fields se pierden con los autosaves

Deshabilité el autosave mientras estoy construyendo el sitio e insertando contenidos, pero no me parece que sea una solución definitiva ya que el autosave me parece necesario.

Si te fijás en ese hilo, al final de todo dan un código como parte de la solución para guardar los custom fields. Lo adapté, renombrando los nombres de los campos acorde fue necesario entre otras cosas, pero seguía sin funcionarme.

La verdad es que me tiene desorientada, no me queda claro cual sería la función para que el auto-save funcione con mis custom fields.
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP
  #4 (permalink)  
Antiguo 17/09/2011, 16:43
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Custom fields se pierden con los autosaves

Cita:
Iniciado por Nekko Ver Mensaje
Deshabilité el autosave mientras estoy construyendo el sitio e insertando contenidos, pero no me parece que sea una solución definitiva ya que el autosave me parece necesario.

Si te fijás en ese hilo, al final de todo dan un código como parte de la solución para guardar los custom fields. Lo adapté, renombrando los nombres de los campos acorde fue necesario entre otras cosas, pero seguía sin funcionarme.

La verdad es que me tiene desorientada, no me queda claro cual sería la función para que el auto-save funcione con mis custom fields.
fijate que ese ultimo código lo que hacen es justamente lo que indico la cita anterior hacer la validación antes de hacer el update_post_meta, que el lo hace con un ciclo porque porque se le hace mas sencillo que estar escribiendo lo mismo para cada custom entonces prueba de esta manera
Código PHP:
Ver original
  1. function save_details() {
  2.     global $post;  
  3.     $custom_meta_fields = array(
  4.           'tipodeproducto',
  5.           'precios',
  6.           'hotfeatures'
  7.      );
  8.     foreach( $custom_meta_fields as $custom_meta_field ) {
  9.         if(isset($_POST[$custom_meta_field]) && !empty($_POST[$custom_meta_field])) {
  10.             update_post_meta($post->ID, $custom_meta_field, $_POST[$custom_meta_field]);
  11.     }
  12.     }    
  13. }
tomando en cuenta la funcion que dejo el amigo, pruebala y nos comentas a ver si te funciono.

P.D: Concejo de desarrollador, valida todo los campos que tengas que ingresar que no esten vacios al menos que tu lo desees y que sean del tipo de dato que tu necesitas, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 19/09/2011, 07:08
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Respuesta: Custom fields se pierden con los autosaves

Había utilizado esa misma función y seguía borrando los campos. Cuando publicaste el código dije "por lo menos voy a darle otra oportunidad y vamos con un copy&paste de lo de Carlos...."

Y funcionó!!! Evidentemente la primera vez había metido la pata en algo. Gracias che!
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP
  #6 (permalink)  
Antiguo 19/09/2011, 08:02
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 11 meses
Puntos: 193
Respuesta: Custom fields se pierden con los autosaves

Esa validación no la veo bien, ¿que pasa si quiero dejar en blanco el campo? no lo hara.

Para evitar guardar el valor de los custom fields en el autosave hago esta comprobación:

Código PHP:
Ver original
  1. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
  2.     return;

Cuando hace el autosave no hago nada..

Y para seguridad uso wp_verify_nonce en tu metabox agregas un campo

Código PHP:
Ver original
  1. wp_nonce_field( plugin_basename( __FILE__ ), 'check_field' );

Y lo compruebas:

Código PHP:
Ver original
  1. if ( !wp_verify_nonce( $_POST['check_nonce'], plugin_basename( __FILE__ ) ) )
  2.     return;

Y así la funcion para salvar los custom fields queda mas o menos así:

Código PHP:
Ver original
  1. function save_postdata($post_id)
  2.     {
  3.         if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
  4.             return;
  5.  
  6.         if ( !wp_verify_nonce( $_POST['check_field'], plugin_basename( __FILE__ ) ) )
  7.             return;
  8.        
  9.         if ( $_POST['post_type'] != "Tu_custom_post" )         
  10.             return;
  11.  
  12.         #Haces el update.....
  13. }


Saludos!!
  #7 (permalink)  
Antiguo 19/09/2011, 08:31
Avatar de Nekko
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 3.141
Antigüedad: 16 años, 8 meses
Puntos: 656
Respuesta: Custom fields se pierden con los autosaves

Gracias TMeister. En este theme en particular no me iba a dar cuenta (necesito que los custom fields siempre tengan contenido), pero eventualmente iba a reutilizar el código y a saltar el error de no guardar los campos en blanco.
__________________
Taller para crear themes wordpress desde cero | Presupuestos para trabajos particulares vía MP

Etiquetas: custom, fields, php, post
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:33.