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

Modificar base de datos tras publicar post wordpress

Estas en el tema de Modificar base de datos tras publicar post wordpress en el foro de WordPress en Foros del Web. Estoy trabajando con Custom Post Type, creando clases y cursos. Cuando el curso está programado como borrador no me deja seleccionarlo como padre de las ...
  #1 (permalink)  
Antiguo 27/12/2018, 01:56
 
Fecha de Ingreso: agosto-2007
Mensajes: 70
Antigüedad: 11 años, 7 meses
Puntos: 1
Modificar base de datos tras publicar post wordpress

Estoy trabajando con Custom Post Type, creando clases y cursos. Cuando el curso está programado como borrador no me deja seleccionarlo como padre de las clases.

¿Cómo puedo hacer un UPDATE para especificarle el padre a nivel de ID?

Es decir, al pulsar en "Programar clase", automáticamente se modifique en la BBDD el ID de su curso padre.
  #2 (permalink)  
Antiguo 27/12/2018, 08:12
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.277
Antigüedad: 11 años
Puntos: 1033
Respuesta: Modificar base de datos tras publicar post wordpress

documentación hermano, documentación

-> hierarchical
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 27/12/2018, 08:43
 
Fecha de Ingreso: agosto-2007
Mensajes: 70
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Modificar base de datos tras publicar post wordpress

Cita:
Iniciado por ArturoGallegos Ver Mensaje
documentación hermano, documentación

-> hierarchical
Estuve buscando documentación en el codex, y al final, uniendo varias cosas, he conseguido el siguiente código:

Código PHP:
function save_curso_parent$post_id$post$update ) {

    
$post_type get_post_type($post_id);
     
    if ( 
"curso" != $post_type ) return;
    
$new_post_id=get_field(pertenece);
    
//if (!(isset($new_post_id) && ($new_post_id>0)  )){
        
remove_action'save_post','save_curso_parent');
   
    
            
wp_update_post(
                array(
                
'ID' => $post_id
                
'post_parent' => $new_post_id
        
)
        );
        
add_action'save_post''save_curso_parent',10,3);
    
//}


}
add_action'save_post''save_curso_parent',10,3); 
Funciona, aunque las clases que ya estaban asignadas a un padre me las ha quitado. Y cuando publico una nueva clase, tengo que actualizar un par de veces para que me coja bien el ID. Por más vueltas que le doy, no soy capaz de afinarla.
  #4 (permalink)  
Antiguo 27/12/2018, 09:04
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.277
Antigüedad: 11 años
Puntos: 1033
Respuesta: Modificar base de datos tras publicar post wordpress

Por un lado, puedes explicar el motivo de remover la accion save post -> remove_action y des pues la agregas add_action dentro de la propia función???
eso para mi es puro código basura y dara como resultado eventos imprevistos.

get_field(pertenece); esta mal implementado, pertenece no es una constante

get_post_type($post_id); es redundante y haces que tu sistema trabaje extra, lo que intentas obtener ya lo tienes disponible en $post->post_type

Hasta donde se, el campo post_parent esta destinado a post del mismo tipo, si quieres agregar relación con post de otro tipo mejor usa post_meta, de lo contrario estarías reinventando la rueda, si son post del mismo tipo tomate la molestia en leer el link que te deje previamente y no reinventes lo que ya existe.
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #5 (permalink)  
Antiguo 28/12/2018, 00:48
 
Fecha de Ingreso: agosto-2007
Mensajes: 70
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Modificar base de datos tras publicar post wordpress

Respecto a get_field(pertenece), se trata de un Custom Field que se llama así, tal cual, pertenece. Es un campo que el usuario introduce al redactar una clase, para indicar el ID del padre (curso), para solucionar el tema de que cuando un curso aún no esté publicado, admita ese campo.

Lo de remover y añadir la acción dentro de la función fue una solución que encontré buscando por la red. Es la única solución que encuentro para que una vez que actualizo una clase, WordPress no me entre en un bucle infinito. Si lo dejo así:

Código PHP:
function save_curso_parent($post_id,$post,$update){
    
$post_type get_post_type($post_id);
    if (
"curso" != $post_type) return;
    
$new_post_id=get_field(pertenece);
    
wp_update_post(
        array(
            
'ID' => $post_id,
            
'post_parent' => $new_post_id
        
)
    );
}
add_action'save_post''save_curso_parent',10,3); 
me quedo dentro de ese bucle infinito que te comento.

Gracias por tu ayuda, @ArturoGallegos.
  #6 (permalink)  
Antiguo 28/12/2018, 08:21
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.277
Antigüedad: 11 años
Puntos: 1033
Respuesta: Modificar base de datos tras publicar post wordpress

como te dije, get_field(pertenece); esta mal implementado, lee la documentación.

la acción save_post cuando se trata de post_type distintos no tendría que entrar en loop, por lo que asumo que se trata de post del mismo tipo.

Dado el caso te vuelvo a remitir a esta documentación, no reinventes la rueda hermano.
-> hierarchical

Si quieres seguir marcando una relación manualmente, usa un campo post_meta como ya te he mencionado antes
https://codex.wordpress.org/Function...date_post_meta
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #7 (permalink)  
Antiguo 29/12/2018, 11:27
 
Fecha de Ingreso: agosto-2007
Mensajes: 70
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Modificar base de datos tras publicar post wordpress

Lo siento, ArturoGallegos. Pero no consigo dar con la tecla. Por más que pruebe un código u otro, o se me queda en un bucle infinito o da problemas.
  #8 (permalink)  
Antiguo 29/12/2018, 20:20
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.277
Antigüedad: 11 años
Puntos: 1033
Respuesta: Modificar base de datos tras publicar post wordpress

Muestra como te ha quedado el código tras implementar lo que te dije -> hierarchical
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #9 (permalink)  
Antiguo 30/12/2018, 09:29
 
Fecha de Ingreso: agosto-2007
Mensajes: 70
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Modificar base de datos tras publicar post wordpress

Cita:
Iniciado por ArturoGallegos Ver Mensaje
Muestra como te ha quedado el código tras implementar lo que te dije -> hierarchical
Al final, he optado por una solución más sencilla:

Código PHP:
function sacar_programados($dropdown_args){
    
$dropdown_args['post_status'] = array('publish','draft','future');
    return 
$dropdown_args;
}

add_filter('page_attributes_dropdown_pages_args','sacar_programados',1,1); 
Así evito código innecesario, amén de que el usuario que publica la clase tenga que conocer el ID del curso programado.

Aún así, muchísimas gracias por tu atención y paciencia.



La zona horaria es GMT -6. Ahora son las 17:49.