web-dev-qa-db-fra.com

Formulaire de contact 7 à l'image sélectionnée

J'essaie de récupérer un fichier téléchargé dans l'interface frontale avec le formulaire de contact 7 et de l'attribuer à un type de publication personnalisée. Heres est mon code jusqu'à présent:

function form_to_post( $posted_data ) {

    $args = array(
        'post_type' => 'projects',
        'post_status'=> 'draft',
        'post_title'=> wp_strip_all_tags( $posted_data['title'] ),
        'post_content'=> wp_strip_all_tags( $posted_data['pitch'] ),
    );
    $post_id = wp_insert_post($args);

    if( ! is_wp_error( $post_id ) ) {

        if( isset($posted_data['featured']) ){
            $featuredUpload = wp_upload_bits($posted_data['featured']['name'], null, file_get_contents($posted_data['featured']['tmp_name']));

            $filename = $featuredUpload['file'];
            $wp_filetype = wp_check_filetype($filename, null );
            $attachment = array(
                'post_mime_type' => $wp_filetype['type'],
                'post_parent' => $post_id,
                'post_title' => sanitize_file_name($filename),
                'post_content' => '',
                'post_status' => 'inherit'
            );
            $attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );

            if (!is_wp_error($attachment_id)) {
                require_once(ABSPATH . 'wp-admin/includes/image.php');
                $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
                wp_update_attachment_metadata( $attachment_id,  $attachment_data );
                set_post_thumbnail( $post_id, $attachment_id );
            }
        }
    }

    return $posted_data;
}
add_filter( 'wpcf7_posted_data', 'form_to_post' );

Le error_log indique 1 comme valeur de $posted_data['featured'], ce qui signifie que les données du fichier ne sont pas stockées dans cette variable. J'ai consulté le document Formulaire de contact 7 et ils me disent que le fichier est déplacé vers un répertoire temporaire (wp-content/uploads/wpcf7_uploads) avant que le courrier ne soit envoyé. Alors, est-ce que quelqu'un sait comment obtenir les données du fichier?

Merci

1
Pipo

Merci @Judd Franklin pour les instructions. Il me manquait aussi $submission->uploaded_files();.

Voici le code de travail pour ceux qui cherchent la même réponse:

function image_form_to_featured_image( $contact_form ) {

    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();

    // Creating a new post with contact form values
    $args = array(
        'post_type' => 'projects',
        'post_status'=> 'draft',
        'post_title'=> wp_strip_all_tags( $posted_data['title'] ),
        'post_content'=> wp_strip_all_tags( $posted_data['pitch'] ),
    );
    $post_id = wp_insert_post($args);

    // Retrieving and inserting uploaded image as featured image
    $uploadedFiles = $submission->uploaded_files();

    if( isset($posted_data['featured']) ){
        $featuredUpload = wp_upload_bits($posted_data['featured'], null, file_get_contents($uploadedFiles['featured']));


        require_once(ABSPATH . 'wp-admin/includes/admin.php');
        $filename = $featuredUpload['file'];
        $attachment = array(
            'post_mime_type' => $featuredUpload['type'],
            'post_parent' => $post_id,
            'post_title' => sanitize_file_name($filename),
            'post_content' => '',
            'post_status' => 'inherit'
        );

        $attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );

        if (!is_wp_error($attachment_id)) {
            require_once(ABSPATH . 'wp-admin/includes/image.php');
            $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
            wp_update_attachment_metadata( $attachment_id,  $attachment_data );
            set_post_thumbnail( $post_id, $attachment_id );
        }
    }
}
add_action( 'wpcf7_before_send_mail', 'image_form_to_featured_image' );
2
Pipo

Il semble que le filtre auquel vous vous connectez n'a pas accès aux données de publication.

Si vous utilisez l'action wpcf7_before_send_mail, puis accédez aux données de l'instance de soumission, vous aurez accès au nom de fichier de la pièce jointe.

function form_to_post( $posted_data ) {
    $post_id = wp_insert_post($args);
    $submission = WPCF7_Submission::get_instance();
    $postData = $submission->get_posted_data();
    die(var_dump($postData["featured"]));

}
add_action('wpcf7_before_send_mail', 'form_to_post' );

Cela a fonctionné pour moi localement. Ça marche pour toi?

1
Judd Franklin