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

Metabox no guarda al Publicar

Estas en el tema de Metabox no guarda al Publicar en el foro de WordPress en Foros del Web. Hola a todos! Tengo un metabox que debe unir dos datos, eso lo hace correctamente. El problema es que debo PUBLICAR y luego ACTUALIZAR el ...
  #1 (permalink)  
Antiguo 20/04/2015, 21:29
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Metabox no guarda al Publicar

Hola a todos!
Tengo un metabox que debe unir dos datos, eso lo hace correctamente. El problema es que debo PUBLICAR y luego ACTUALIZAR el mismo post para que me tome los datos.
Si solo PUBLICO no me aparecen los cambios.

Código PHP:
<?php

// Registro metabox
function add_audio_settings_box() {
    
add_meta_box('audio_settings_box'__('Audio Settings''pbpanel'), 'show_audio_settings_box''post''normal''high');
}
add_action('add_meta_boxes''add_audio_settings_box');

// Metabox
function show_audio_settings_box($object) {
    
wp_nonce_field(basename__FILE__ ), 'audio_settings_box_nonce'); ?>
    
    <p>
     <label for="audio_url"><?php echo __('Seleccionar Programa''pbpanel'); ?>:<br></label>
     
    <!-- Programas-->
    <p><input type="radio" name="url" id="url" value="http://miweb.com/programa_1/">Programa 1</p>
    <p><input type="radio" name="url" id="url" value="http://miweb.com/programa_2/">Programa 2</p>
   
    
    <!-- Nombre del programa (por ejemplo  musica.mp3 )  -->
       <p>Ingresar el nombre del archivo de audio (inclido .mp3): <input type="text" name="archivo"  id="archivo"> </p>
      
    <!-- Union de url + archivo (Ejemplo: [url]http://miweb.com/programa_1/musica.mp3[/url] -->
    <?php $all_url=esc_attr(get_post_meta($object->ID'url'true)).esc_attr(get_post_meta($object->ID'archivo'true));    ?>
            
    <!-- Guardo esa variable en audio_url -->   
    <input type="hidden" name="audio_url" id="audio_url" value="<?php echo $all_url ?>">
    </p>
      
    <?php
}

// Guardo los valores del metabox 
function save_audio_settings_box($post_id) {
    
// Verifico nonce 
    
if (!isset($_POST['audio_settings_box_nonce']) || !wp_verify_nonce($_POST['audio_settings_box_nonce'], basename__FILE__ ))) return;
    
// Verifico permisos
    
if (!current_user_can('edit_post')) return;
    
    
// Data
    
foreach ($_POST as $key => $value) {
        
$exist_value get_post_meta($post_id$keytrue);
        if (
$value && $exist_value == '') {
            
add_post_meta($post_id$key$valuetrue);
        } 
        elseif (
$value && $value != $exist_value) {
            
update_post_meta($post_id$key$value$exist_value);
        } 
        elseif (
$value == '' && $exist_value) {
            
delete_post_meta($post_id$key$exist_value);
        }
    }
}
add_action('save_post''save_audio_settings_box');

?>

No puedo detectar que me falta...
GRACIAS

*
__________________
MonaS
  #2 (permalink)  
Antiguo 21/04/2015, 11:45
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

en lugar de $post_id intenta con $post->ID

Código PHP:
Ver original
  1. global $post;
  2. add_post_meta($post->ID, $key, $value, true);
  #3 (permalink)  
Antiguo 21/04/2015, 13:23
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Hola Arturo! Gracias por contestar.

No me funciono.

Revise la base de datos, por supuesto el problema es que al PUBLICAR guarda "url" y "archivo" pero no guarda "audio_url" como resultado de la union de los dos value. Solo lo hace cuando actualizo.

Si a "audio_url" le asigno un valor x (ej. miaudio.mp3), si lo guarda.

Evidentemente el problema esta en la concatenacion de datos de "url" y "archivo"

Intente con un boton (submit) para que guarde primero la variable $all_url, pero al presionalo me aparece "Abandonar pagina" - "Permanecer en pagina"
__________________
MonaS
  #4 (permalink)  
Antiguo 21/04/2015, 13:43
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

Lo pase desapercibido a primera vista pero ahora que lo reviso veo esto

Código PHP:
Ver original
  1. <!-- Union de url + archivo (Ejemplo: [url]http://miweb.com/programa_1/musica.mp3[/url] -->
  2.     <?php $all_url=esc_attr(get_post_meta($object->ID, 'url', true)).esc_attr(get_post_meta($object->ID, 'archivo', true));    ?>
  3.            
  4.     <!-- Guardo esa variable en audio_url -->  
  5.     <input type="hidden" name="audio_url" id="audio_url" value="<?php echo $all_url ?>">

Resulta bastante obvio y evidente que jamas consegiras guardar esos valores unidos al publicar ya que aun no existen en la base de datos, al actualizar ya existen y por eso funciona la union.

Tienes dos opciones
1.- usa javascript para unir los campos y asignarlo al tercer campo donde los quieres guardar unidos.
2.- deja de usar esto
Código PHP:
Ver original
  1. foreach ($_POST as $key => $value) {
  2.         $exist_value = get_post_meta($post_id, $key, true);
  3.         if ($value && $exist_value == '') {
  4.             add_post_meta($post_id, $key, $value, true);
  5.         }
  6.         elseif ($value && $value != $exist_value) {
  7.             update_post_meta($post_id, $key, $value, $exist_value);
  8.         }
  9.         elseif ($value == '' && $exist_value) {
  10.             delete_post_meta($post_id, $key, $exist_value);
  11.         }
  12.     }

En su lugar usa algo como
Código PHP:
Ver original
  1. if(isset($_POST['campo']) && !empty($_POST['campo'])){
  2. // guardas el valor que este en el tercer campo, este caso seria cuando actualizas un post
  3. }else{
  4. // haces la union de los dos primeros campos y lo guardas en el tercer campo ** esto seria para cuando crear un post
  5. }
  #5 (permalink)  
Antiguo 21/04/2015, 14:09
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Ups!

El primer caso, no tengo idea como hacerlo, no se casi nada de Javascript.

En el segundo caso, no entendi muy bien...

Intente usar algo asi pero no resulto

Código PHP:
     <?php 
        
if(isset($_POST['audio_url']) && !empty($_POST['audio_url'])){?>
        
            <input type="text" class="large-text event-src-field" name="audio_url" id="audio_url" value="audio_url" >
   
     <?php }else{
        
        
$all_url=esc_attr(get_post_meta($object->ID'programa'true)).esc_attr(get_post_meta($object->ID'nombre'true));?>    
        
        <input type="text" class="large-text event-src-field" name="audio_url" id="audio_url" value="<?php echo $all_url?>    " >
    
     <?php }?>
Guarda el campo audio_url vacio al publicar y al actualizar
__________________
MonaS

Última edición por ss007; 21/04/2015 a las 14:42
  #6 (permalink)  
Antiguo 21/04/2015, 14:47
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

Amigo lo que pasa es que caes en lo mismo, el campo que estas enviando esta vacio..... tienes esto en tu html
Código PHP:
Ver original
  1. <input type="hidden" name="audio_url" id="audio_url" value="<?php echo $all_url ?>">
Código PHP:
Ver original
  1. $all_url=esc_attr(get_post_meta($object->ID, 'programa', true)).esc_attr(get_post_meta($object->ID, 'nombre', true));?>

Si ves de donde viene $all_url veras que esta consultando datos de la base de datos pero como aun no has creado dicha publicacion aun no existe esa ID ni mucho menos los valores que intentas llamar.

para aque salgas de dudas en lugar de usar un campo del tipo hidden uso uno de texto, asi te daras cuenta que esta vacio, por mas que le busques no puedes guardar ese campo.

Por eso te decia que al guardar hagas una comprobacion de si el campo esta vacio, si esta vacio en lugar de llamar a la base de datos usa los equivalentes que estas enviando en el $_POST

es decir
Código PHP:
Ver original
  1. $all_url = $_POST['campo'] . $_POST['campo2'];
  #7 (permalink)  
Antiguo 21/04/2015, 15:11
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Ahora hice esto:

Código PHP:
     <?php 
        
if(isset($_POST['audio_url']) && !empty($_POST['audio_url'])){?>
        
            <input type="text" name="audio_url" id="audio_url" value="audio_url" >
   
     <?php }else{
        
        
$all_url=$_POST['url'] . $_POST['archivo'];?>    
        
        <input type="text" name="audio_url" id="audio_url" value="<?php echo $all_url?>" >
    
     <?php }?>
Guarda "audio_url" en la base pero continua sin recoger los datos...
__________________
MonaS
  #8 (permalink)  
Antiguo 21/04/2015, 15:29
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

Vamos men, no me referia al momento de imprimirlo en pantalla sino al momento en que se guardan los datos.... en la funcion save_audio_settings_box

Esa funcion es la encargada de hacer todo el procedimiento para guardar los datos, es evidente que si lo aplicas para imprimir en pantalla los valores que llamas por $_POST aun no existe, estos se generan al precionar en guardar y se reciben en la funcion de guardado no en la de impresion.
  #9 (permalink)  
Antiguo 21/04/2015, 15:56
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Cita:
Iniciado por ArturoGallegos Ver Mensaje
Vamos men, no me referia al momento de imprimirlo en pantalla sino al momento en que se guardan los datos.... en la funcion save_audio_settings_box
Arturo, perdón por mi ignoracia pero no se dónde deberia colocarlo dentro de esa función...
__________________
MonaS
  #10 (permalink)  
Antiguo 21/04/2015, 16:21
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

Lee tu propio codigo que tienes en la funcion save_audio_settings_box

Si tienes duda acude al codex de wordpress para que veas como funciona.
  #11 (permalink)  
Antiguo 22/04/2015, 17:30
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Ok Arturo, gracias por todo.
No esperaba que lo hicieras por mi, solo un poco mas de orientación.
Estoy trabajando sobre un codigo que no es mio, trato de adaptar un theme, por eso me cuesta entenderlo.
__________________
MonaS
  #12 (permalink)  
Antiguo 22/04/2015, 18:51
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: Metabox no guarda al Publicar

El problema no es que yo u otro usuario no te pueda dar mas orientacion, sino como tu lo haz dicho
Cita:
Estoy trabajando sobre un codigo que no es mio, trato de adaptar un theme, por eso me cuesta entenderlo.
Si no entiendes el codigo es evidente que por mucho que te explique no podras resolverlo... si conocieras un poco o te tomaras la molestia de leer el codex de wordpress te darias cuenta que con la poca ayuda que te di, resolvias tu problema facilmente (suponiendo que si sabes PHP)
  #13 (permalink)  
Antiguo 22/04/2015, 21:39
Avatar de ss007  
Fecha de Ingreso: marzo-2002
Mensajes: 205
Antigüedad: 22 años, 9 meses
Puntos: 0
Respuesta: Metabox no guarda al Publicar

Arturo, entiendo q la idea de este foro es ayudar, no juzgar lo que saben o no saben quienes consultan.
Si alguien pide ayuda, basta con eso y ser claro en las respuestas, no dar todo por sobrentendido como si cualquiera que consulta obligatoriamente debe tener un conocimiento profundo. Y si no es así que?
No me interesa entrar en ninguna discusion, llevo mucho tiempo en este foro, y la mayoria de las veces han tenido buena predisposición.
Disculpa por no entenderte, disculpa por saber menos.
__________________
MonaS

Etiquetas: post, publicar
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 07:46.