Actualizar datos de una publicación con un Hook después de metadatos en WordPress

Aprende cómo utilizar el hook wp_insert_post de forma fácil en WordPress para actualizar metadatos en el último paso al crear o actualizar una publicación

Con un cliente me tocó que necesitaba actualizar unos datos una vez que una publicación (en este caso una publicación personalizada) se terminaba de guardar usando WordPress, normalmente al ser personalizada podríamos usar el hook de save_post-$post->type o simplemente save_post como hook (lo siento, traducir hook por gancho no me da mucho sentido ☹️ pero luego les publico qué es un hook) pero, el dilema era que un plugin guardaba después de este hook, al parecer reusaba este y su prioridad era “posterior”.

Al final, encontré otro hook que se ejecuta una vez que todos los metadatos y toda la ejecución final terminó, wp_insert_post el nombre no es como que muy descriptivo porque uno pensaría “ahí dice insertar publicación” pero, este hook se ejecuta al final de todo y funciona tanto para nuevos casos como casos de actualización.

Si vamos a la documentación:

Podemos observar que menciona Fires once a post has been saved. así que podemos corroborar que funciona en ambos casos.

Los 3 parámetros que se tienen son:

  • $post_ID el ID de la publicación que está guardándose (ya sea al crear una publicación o al actualizarla)
  • $post que es la información de la publicación general (esta no traerá metadatos ni nada adicional, simplemente está basada en WP_Post como objeto)
  • $update Si fue una edición o no (por si se llega a necesitar hacer acciones diferentes si es creación o edición)

Ahora, ¿por qué dice do_action ? Esto lo explicaré aquí pero quizá haga una publicación solo de ello… A grandes rasgos, nosotros podemos hacer que este hook se ejecute forzando los parámetros pero, tanto do_action como add_action básicamente son “primos”, uno es “haz esta acción” (para emularla/ejecutarla) y el otro “agrega esta acción cuando suceda el do_action vinculante)…

Entonces, veamos un ejemplo de cómo usar esta función:

add_action('wp_insert_post', 'cambiar_valor', 10, 3);
function cambiar_valor($post_id, $post, $esActualizacion) {
    if ($post->post_type === 'mi_tipo_de_publicacion_personalizada') {
        if (!$esActualizacion) {
           update_post_meta($post_id, 'mostrar_en_home', 1);
        } else {
           $esImportante = get_post_meta($post_id, 'es_importante', true);
           update_post_meta($post_id, 'mostrar_en_home', $esImportante === '1' ? 1 : 0);
        }
    }
}

El ejemplo es un poco burdo pero vamos a explicarlo un poco.

Primero agregamos el hook, llamando la función cambiar_valor el 10 es la prioridad y el 3 significa la cantidad de parámetros que va a recibir la función (en este caso si se fijan son 3 por ende, se pone 3)

Ahora, si el tipo de publicación es uno personalizado, como en este caso mi_tipo_de_publicacion_personalizada ejecutará el código, si es una publicación normal no hará nada.

Después, si no es una actualización a la publicación, entonces, vamos a marcar nuestro parámetro de “mostrar_en_home” como 1, es decir, algo así como si ese metadato nos permitiera mostrar un nuevo evento en la página principal. Y cada que lo creamos es obligatorio que aparezca ahí.

Por último, vamos a usar el ID de la publicación para ir a encontrar si tiene un metadato llamado es_importante este metadato lo pone un plugin externo así que por eso es el sentido de esta publicación 🙂 ya que este parámetro se marcará previamente, si no, podríamos bien usar save_post o su respectivo para publicaciones personalizadas como se mencionaba. Y si en este caso ese plugin nos marcó el parámetro, entonces vamos a actualizar respecto a si decidimos o no seguir mostrando ese evento (o publicación en sí) en la página principal.

¡Listo!, así es más o menos como se utiliza este hook y un ejemplo práctico.

¿Cuál es tu reacción?
+1
0
+1
0
+1
0
+1
0
+1
1
Total
0
Shares
Publicación anterior

Estrellas estrelladas, un sistema de valoración no tan útil

Siguiente Publicación

¿Qué es UX?, ¿cómo empezar? y ejemplos…

Publicaciones Relacionadas