Publicación de WordPress guardar/editar gancho de publicación

2 minutos de lectura

avatar de usuario de setcookie
setcookie

Estoy buscando un enlace de administrador para las publicaciones que se activan después de que se ha guardado la publicación. El problema: el save_post no contiene los datos ya modificados en el objeto de publicación. Los nuevos cambios solo se pueden encontrar en el $_POST formación. Pero necesito una forma de actualizar el enlace permanente a una API externa una vez que post_name cambios. Pero no funcionará ya que el $post el objeto sigue siendo el antiguo antes de la acción de guardar.

Debería poder conectarse después de que la publicación se haya actualizado utilizando el argumento de prioridad (establecido en 20 en este ejemplo):

add_action( 'save_post', 'your_function', 20, 1 );
function your_function( $post_id ) {
    // this should be the updated post object 
    $post = get_post( $post_id );
}

Creo que el método más adecuado es consultar los valores antiguos de la base de datos y comparar los valores con $_POST valores de matriz.

Aquí está el enlace que debería ayudarlo a leer los valores de la base de datos.

http://codex.wordpress.org/wpdb#query_-_Run_Any_Query_on_the_Database

PD: Por supuesto, debe hacer esta comparación “antes” de guardar los nuevos valores en la base de datos.

Avatar de usuario de Gleb Kemarsky
Gleb Kemarsky

Desde WordPress 3.0.0 el post_updated el gancho está disponible. Es útil saber qué ha cambiado en la publicación después de la actualización. Puedes usar el ejemplo en el WP Codex como muestra.

add_action( 'post_updated', 'check_updated_post_name', 10, 3 );
function check_updated_post_name( $post_ID, $post_after, $post_before ) {
    if ( $post_after->post_name != $post_before->post_name ) {
        // do what you need
    }
}

Y si se acaba de insertar una publicación, puede usar save_post o save_post_{$post->post_type} manos. Verifique el valor del tercer argumento para asegurarse de que la publicación sea nueva.

add_action( 'save_post', 'check_new_post_name', 10, 3 );
function check_new_post_name( $post_ID, $post, $update ) {
    if ( ! $update ) {
        // do what you need
    }
}

¿Ha sido útil esta solución?