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.
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_post
al 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;
}
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