web-dev-qa-db-fra.com

Le crochet d'action de raison ne fonctionnera pas avec update_post_meta à partir du formulaire frontal? Alternative?

Le code ci-dessous fonctionne lorsque j'insère un message/j'utilise add_post_meta lors de la soumission d'un formulaire. L'actualisation de la page est sans faille (voir Comment puis-je réparer une redirection lente après l'envoi du formulaire à partir de l'interface (pas de plug-in)? ). Cependant, je ne peux pas sembler avoir le même effet lorsque j'utilise des formulaires que j'ai l'intention de mettre à jour la méta de publication pour mon type de publication personnalisé à l'aide de update_post_meta.

function wpd_check_submission(){
    if( isset( $_POST['start'] ) ) {
        // do your post insertion here
    }
}
add_action( 'init', 'wpd_check_submission' );

Quelqu'un pourrait-il m'aider à me diriger dans la bonne direction? Je ne trouve pas de réponse claire à ce sujet. J'ai essayé d'utiliser le hook save_post, en plaçant les lignes if-isset directement après mon formulaire, en ajoutant les fonctions update_post_meta directement dans la fonction qui fonctionne. J'ai commencé à lire sur les méthodes do_action pour mettre à jour les méta-publications postées par update_post_meta et update_post_meta - je suis vraiment confus.

Voici un exemple: le code qui fonctionne:

   function ty_save_post_data() {

    if( isset( $_POST['start'] ) ) { 

        $post = array(
        'post_title' => $_POST[ 'mfname' ],
        'post_status' => 'publish', 
        'post_type' => 'add-members' 
        );  


        $post_id = wp_insert_post($post); 

        add_post_meta($post_id, 'mfname', sanitize_text_field( $_POST[ 'mfname' ] ), true);
        add_post_meta($post_id, 'mem', sanitize_text_field( $_POST[ 'mem' ] ), true);
        add_post_meta($post_id, 'mpw', esc_attr( $_POST['mpw'] ), true);
        add_post_meta($post_id, 'second-nom', sanitize_text_field( $_POST[ 'second-nom' ] ), true );
    } 
    }

add_action( 'init', 'ty_save_post_data' );

Le code qui échoue:

function ty_save_post_data1() { 
if( isset( $_POST['isecond'] ) ) { 
   update_post_meta( get_the_ID(), 'second-nom', sanitize_text_field( $_POST['second-nom'] ) );
   update_post_meta( get_the_ID(), 'second-nom-date', sanitize_text_field( $_POST['second-nom-date'] ) );
   update_post_meta( get_the_ID(), 'approved', sanitize_text_field( $_POST['approved'] ) );    
}
}

add_action( 'init', 'ty_save_post_data1' );

ICI IS VERSION DE TRAVAIL MISE À JOUR DE L'EXEMPLE DE CODE ÉCHOUÉ

//hidden field added to form that grabs the post ID
<input type="hidden" name="post_id" id="post_id" value="<?php echo get_the_ID(); ?>" />

<?php function ty_save_post_data1() { 
if( isset( $_POST['isecond'] ) ) {

   $post_id1 = $_POST['post_id'];

   update_post_meta( $post_id1, 'second-nom', sanitize_text_field( $_POST['second-nom'] ) );
   update_post_meta( $post_id1, 'second-nom-date', sanitize_text_field( $_POST['second-nom-date'] ) );
   update_post_meta( $post_id1, 'approved', sanitize_text_field( $_POST['approved'] ) );    
}
}

add_action( 'init', 'ty_save_post_data1' );
?>
1
WorkingMan8798

Le contexte de votre code qui échoue n'est pas tout à fait clair, mais il échoue car get_the_ID() ne renvoie pas d'identifiant de publication lorsqu'il est exécuté sur le hook init, car la requête principale n'a pas encore été exécutée.

Si vous consultez la référence de l'action , wp est la première action permettant d'accéder aux données de la requête en cours, si votre code fonctionne actuellement. Vu le post. Si votre code fonctionne sur une publication différente, vous devrez transmettre l'ID de cette publication avec vos autres données de formulaire.

2
Milo