¿Cómo acceder al meta meta de una publicación que acaba de publicarse?

2

Estoy usando el gancho publish_post para ejecutar mi código donde necesito la meta de la publicación recién publicada. Pero el valor meta posterior que estoy buscando no está disponible de alguna manera en este punto de ejecución. Al revisar la tabla wp_postmeta , encontré que el valor de mi clave meta no se ha creado todavía. Además, quiero que esto funcione para una publicación publicada por primera vez. ¿Hay algún otro gancho que me permita acceder a él?

function push_notification($post_id) 
{ 
    $ref_ids = get_post_meta($post_id,'ref_id'); 

    if($ref_ids) 
    { 
        //my code goes here 
    } 
} 

add_action('publish_post','push_notification');
    
pregunta Poulomi Nag 19.10.2012 - 13:14

3 respuestas

3

¡Resuelto! Usé save_post para ejecutar push_notification() , así como para ejecutar la función save_post_meta() que guarda mi meta de publicación. El problema ocurrió porque co% push_notification() se dispara antes de save_post_meta() debido a que el meta no se estaba guardando y, por lo tanto, permaneció inaccesible. Acaba de cambiar las prioridades de las funciones para que funcione como tal:

function push_notification($post_id) 
{ 
  $ref_ids = get_post_meta($post_id,'ref_id'); 

  if($ref_ids) 
  { 
    //my code goes here 
   } 
} 
add_action('save_post','push_notification',11,1);

function save_post_meta($post_id,$post)
{
   //check for nonces and current user capabilities

   $ref_id = sanitize_html_class($_POST['ref_id']);
   update_post_meta($post_id,'ref_id',$ref_id);
}
add_action('save_post','save_post_meta',10,2);

function no_notification()
{
  remove_action('save_post','push_notification',11,1);
}
add_action('publish_to_publish','no_notification');

La última función no_notification() se asegura de que push_notification() se active solo cuando se crea una publicación por primera vez y no para actualizaciones.

    
respondido por el Poulomi Nag 20.10.2012 - 09:31
3

Parece que solo te interesan las publicaciones nuevas (ya que las publicaciones creadas anteriormente tendrán la Postmeta adjunta y estarán disponibles cuando se ejecuten las transiciones), y solo quieres hacer notificaciones push en las publicaciones recién creadas un cierto valor postmeta está presente. Correcto?

Crea tu propio gancho en la función que guarda tu postmeta, después de todas tus llamadas a update_postmeta, usando do_action (). El postmeta se habrá guardado en ese momento, y puedes probar.

    
respondido por el stevejohnson 19.10.2012 - 17:05
1

También noté que cuando llamas a get_post_meta() dentro de add_action('publish_post',..) no se devuelve ningún meta posterior.

Esto se debe a que cuando publicas la publicación y llamas a 'publish_post', el meta de la publicación aún no está guardado en la base de datos . update_post_meta() (la función que guarda el meta de publicación en la base de datos) se llama después de 'publish_post'. Es por eso que funciona si primero se guarda como borrador y luego se publica.

Para evitar ese problema, utilizo este tipo de código:

$post_meta_value = get_post_meta($post_id,'meta_key',true);
if($post_meta_value==''){ $post_meta_value = $_POST['meta_key']; }

Esto obtendrá su valor de $ _POST cuando haga clic en el botón Publicar.
El $_POST['meta_key'] puede ser diferente dependiendo de cómo configure su meta de publicación o campo personalizado en su back-end. Estoy usando el complemento ACF (Campos personalizados avanzados) y sería $_POST['fields']['field_52fae7b2b4033'] .

Espero que ayude.

    
respondido por el Ptitsuisse 12.02.2014 - 06:54

Lea otras preguntas en las etiquetas