J'utilise le hook publish_post
pour exécuter mon code là où j'ai besoin de la méta de publication de la publication qui vient d'être publiée. Mais le post meta value que je recherche n’est pas disponible à ce stade de l’exécution. En vérifiant la table wp_postmeta
, j'ai constaté que la valeur de ma clé méta n'avait pas encore été créée. Aussi, je veux que cela fonctionne pour un poste publié pour la première fois. Y a-t-il un autre crochet qui peut me permettre d'y accéder?
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');
Résolu! Utilisé save_post
pour exécuter Push_notification()
ainsi que pour exécuter la fonction save_post_meta()
qui enregistre mon méta de publication. Le problème est survenu, car Push_notification()
est renvoyé avant save_post_meta()
en raison duquel la méta n'a pas été sauvegardée et est donc restée inaccessible. Juste changé les priorités des fonctions pour le faire fonctionner comme suit:
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 dernière fonction no_notification()
s'assure que Push_notification()
est activé uniquement lors de la création initiale d'un message et non pour les mises à jour.
Vous semblez ne vous préoccuper que de new posts (car les posts créés précédemment auront le postmeta attaché et disponible lorsque les transitions sont exécutées), et souhaitez effectuer Push_notification sur les posts nouvellement créés uniquement si une certaine valeur postmeta est présente . Correct?
Créez votre propre hook dans la fonction qui enregistre votre postmeta, après tous vos appels update_postmeta, à l’aide de do_action (). Le postmeta aura été sauvegardé à ce moment-là et vous pourrez tester.
J'ai également remarqué que lorsque vous appelez get_post_meta()
dans add_action('publish_post',..)
, aucune méta-message n'est renvoyée.
En effet, lorsque vous publiez le message et que 'publish_post' est appelé, la méta de ce message n'est pas encore enregistrée dans la base de données . update_post_meta()
(la fonction qui enregistre la méta de la publication dans la base de données) est appelée après 'publish_post'. C'est pourquoi cela fonctionne si vous enregistrez d'abord en tant que brouillon, puis publiez.
Pour éviter ce problème, j'utilise ce type de code:
$post_meta_value = get_post_meta($post_id,'meta_key',true);
if($post_meta_value==''){ $post_meta_value = $_POST['meta_key']; }
Cela obtiendra votre valeur du $ _POST lorsque vous cliquerez sur le bouton Publier.
Le $_POST['meta_key']
peut être différent en fonction de la manière dont vous définissez votre méta de publication ou votre champ personnalisé dans votre back-end. J'utilise le plugin ACF (Advanced Custom Fields) et ce serait $_POST['fields']['field_52fae7b2b4033']
.
J'espère que cela pourra aider.