WordPress cómo actualizar el campo ACF en un tipo de publicación personalizada después de que se haya guardado la publicación

2 minutos de lectura

avatar de usuario de mickdeez
mickdeez

Estoy tratando de establecer el valor de un campo en un custom post type justo después de que se haya creado esa publicación. Aquí está mi código:

add_action('acf/save_post', 'set_coach_email');
function set_coach_email( $post_id ){
    $posttype = get_post_type($post_id);
    if ('team' !== $posttype){
        return;
    }
    $email="test@test.com";
    update_field('coach_email', $email, $post_id);
}

solía ACF fields para crear este tipo de publicación personalizada, pero parece que no puedo hacer que funcione.

  • Intente verificar si su declaración if es correcta. Sugeriría usar != por cierto. Otra opción es insertar una dirección de correo electrónico diferente en la instrucción if y actualizar el campo con esta dirección de correo electrónico. De esta manera, puede ver si el problema no está en la declaración if,

    – Webdever

    2 sep 2021 a las 21:47


Verificaría la verificación condicional opuesta. Además, primero verificaría si el campo está vacío o no, luego solo ejecutaría la actualización si el campo está vacío.

add_action('acf/save_post', 'set_coach_email');

function set_coach_email($post_id)
{
  $posttype = get_post_type($post_id);

  $email_field = get_field('coach_email', $post_id);

  if ('team' == $posttype && empty($email_field)) {

    $email="coachtest@test.com";

    update_field('coach_email', $email, $post_id);

  }
}

Acabo de probar en mi propio tipo de publicación personalizada y funcionó bien. ¡Avísame si también pudiste hacerlo funcionar!

  • Esto funcionó para mí. rápido y efectivo sin pelusa extra. Muchas gracias @Ruvee.

    – Mokhless

    6 de septiembre de 2021 a las 7:48

Encuentro a veces usando acf/save_postal aumentar la prioridad se asegura de que todo lo demás se haya ejecutado antes de ejecutar la función de acción.

Esto podría entrar en juego al pasar un $post_id en el get_field() función, tiendo a no pasar el $post_id cuando usas acf/save_post para asegurarse de que se utilizan los últimos datos de campo actuales. Pero esta teoría podría no ser el caso. Ver comentarios en el código a continuación…

<?php

// save post action with priority 20 (default 10)
add_action('acf/save_post', 'set_coach_email', 20);

/**
 * @param $post_id int|string
 */
function set_coach_email($post_id) {

    // get our current post object
    $post = get_post($post_id);

    // if post is object
    if(is_object($post)) {

        // check we are on the team custom type and post status is either publish or draft
        if($post->post_type === 'team' && ($post->post_status === 'publish' || $post->post_status === 'draft')) {

            // get coach email field
            $coach_email = get_field('coach_email');
            
            // if coach email field returns false
            if(!$coach_email) {

                // coach email default
                $email="coachtest@test.com";

                // update coach email field
                update_field('coach_email', $email, $post->ID);

            }

        }

    }

    // finally return
    return;

}

¿Ha sido útil esta solución?