WordPress : Enregistrement des données d’image du plug-in d’extension CF7 « Images Optimize and Upload CF7 » dans le champ d’image ACF de CPT

Publié par Jean-Michel le

Nous avons créé un formulaire avec cf7 et créé un champ d’image avec le plugin « Images Optimize and Upload CF7 » et maintenant nous voulons enregistrer les données de chaque fichier dans cpt mais nous n’avons pas pu enregistrer l’image cf7 dans le champ d’image acf de ce cpt particulier voici mon code :

function save_posted_data( $posted_data ) {


       $args = array(
         'post_type' => 'prescriptions',
         'post_status'=>'draft',
         'post_title'=>$posted_data['phonenumber'],
       );
       $post_id = wp_insert_post($args);

       if(!is_wp_error($post_id)){
         if( isset($posted_data['location']) ){
           update_post_meta($post_id, 'location', $posted_data['location']);
         }
         if( isset($posted_data['phonenumber']) ){
           update_post_meta($post_id, 'contact_number', $posted_data['phonenumber']);
         }

         if( isset($posted_data['prescriptiontext']) ){
           update_post_meta($post_id, 'prescription_description', $posted_data['prescriptiontext']);
         }

         if ( !function_exists('wp_handle_upload') ) {
require_once(ABSPATH . 'wp-admin/includes/file.php');
}

// Move file to media library
$movefile = wp_handle_upload( $_FILES[$posted_data['prescriptionimage']], array('test_form' => false) );

// If move was successful, insert WordPress attachment
if ( $movefile && !isset($movefile['error']) ) {
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($movefile['file']),
'post_mime_type' => $movefile['type'],
'post_title' => preg_replace( '/.[^.]+$/', "", basename($movefile['file']) ),
'post_content' => "",
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $movefile['file']);
update_field('prescription_image', $attach_id, $post_id);

}
      //and so on ...
      return $posted_data;
     }
 }

add_filter( 'wpcf7_posted_data', 'save_posted_data' );

Ceci est mon code et $posted_data[‘prescriptionimage’] est le nom du champ image dans cf7 et l’image enregistrée sous 1191566397/ID_file_download.png comme ceci. Nous ne savions pas ce qui ne va pas dans le code quelqu’un pourrait-il m’aider

Lire également:  Comment fusionner deux menus gérés séparément dans wordpress pour les afficher comme un seul dans le thème frontal ?

Solution n°1 trouvée

J’ai un bout de code qui pourrait t’aider. Sans que je réponde spécifiquement à votre question, je pense que cela vous orientera dans la bonne direction. Vous ne devriez pas accrocher wpcf7_posted_datamais plutôt accrocher wpcf7_before_send_mailoù vous pouvez recevoir les données publiées. Dans mon cas, j’ai ajouté une pièce jointe et inclus les métadonnées de l’auteur. Mais je crois qu’avec cela, vous pouvez comprendre comment ajouter à votre champ ACF ? J’ai fait $posted_datarevenir ce que vous avez dessus.

<?php

add_action( 'wpcf7_before_send_mail', 'he_cf7_process_form', 10, 1);
/**
 * @param object $contact_form The UserID of the Poster
 */
function he_cf7_process_form($contact_form) {
    // check to make sure it only fires on your contact form
    if ( $contact_form->id() == integer_of_your_contact_form ) return;

    // Get the contact form submitted data
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $posted_data = $submission->get_posted_data();
        $uploaded_files = $submission->uploaded_files();
    } else {
        return;
    }
    // Your field name of the file goes here
    $files = $_FILES['field-name'];

    if (empty($uploaded_files)) {
        return 0;
    } else {
        $image_name = basename($uploaded_files['field-name']);
        $image_location = $uploaded_files['field-name'];
        $image_content = file_get_contents($image_location);

        $wp_upload_dir = wp_upload_dir();

        $upload = wp_upload_bits($image_name, null, $image_content);

        $filename = $upload['file'];

        $attachment = array(
            'guid' => $wp_upload_dir['url'] . '/' . basename($filename),
            'post_mime_type' => $files['type'],
            'post_title' => preg_replace('/.[^.]+$/', '', basename($filename)),
            'post_content' => '',
            'post_status' => 'inherit'
        );

        $attach_id = wp_insert_attachment($attachment, $filename);

        // Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
        require_once(ABSPATH . 'wp-admin/includes/image.php');

        // Generate the metadata for the attachment, and update the database record.
        $attach_data = wp_generate_attachment_metadata($attach_id, $filename);
        wp_update_attachment_metadata($attach_id, $attach_data);

        $arg = array(
            'ID' => $attach_id,
            'post_author' => $userid,
        );

        wp_update_post($arg);

    }
}
Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *