web-dev-qa-db-fra.com

Téléchargement d'image personnalisé

J'essaie de configurer l'envoi pour les pièces jointes de mon formulaire de publication personnalisé.

Au début, j'ajoute à ma balise formenctype="multipart/form-data"

À des fins de test, j'ai deux formulaires de téléchargement, mais à l'avenir, je vais implémenter un seul formulaire et utiliser jQuery pour ajouter autant de formulaires que je le souhaite.

    <fieldset class="images">
        <label for="images">Front of the Bottle</label>
        <input type="file" name="image1" id="bottle_front" size="50">
    </fieldset>
    <fieldset class="images">
        <label for="images">Back of the Bottle</label>
        <input type="file" name="image2" id="bottle_rear" size="50">
    </fieldset>

dansPHPj'utilise:

    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            $newupload = insert_attachment($file,$post_id);
            // $newupload returns the attachment id of the file that
            // was just uploaded. Do whatever you want with that now.
        }
    }

et dans functions.php j’ai des fonctions qui devraient gérer ce formulaire.

function insert_attachment($file_handler,$post_id,$setthumb='false') {
 // check to make sure its a successful upload
 if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();

 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
 require_once(ABSPATH . "wp-admin" . '/includes/file.php');
 require_once(ABSPATH . "wp-admin" . '/includes/media.php');

 $attach_id = media_handle_upload( $file_handler, $post_id );

 if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
 return $attach_id;
 }

tout fonctionne parfaitement si je ne télécharge que deux images, mais si je ne souhaite envoyer qu'un seul OR aucun, je reçois une erreur de ma base de données post_meta:

O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:21:"No file was uploaded.";}}s:10:"error_data";a:0:{}}

J'ai essayé d'insérer: if ($ _FILES [$ file_handler] ['error'] === 4) __return_false (); dans functions.php mais cela ne fonctionne pas, comment dire à mon script que mon formulaire est vide?

Credits: pris ce formulaire à partir d’ici

1
CBeTJlu4ok

Peut-être que vous ne revenez pas correctement de votre fonction, essayez ceci,

function insert_attachment($file_handler, $post_id, $setthumb=false) {
    // check to make sure its a successful upload
    // changes start
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) {
        return __return_false();
    }
    // changes end

    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');

    $attach_id = media_handle_upload( $file_handler, $post_id );

    if ($setthumb)
        update_post_meta($post_id, '_thumbnail_id', $attach_id);
    return $attach_id;
}
4
Rajeev Vyas

À mon avis, il est préférable de simplement réutiliser la fonction native existante de Wordpress images en vedette qui vous permettent de télécharger des images dans votre type de message personnalisé.

Vous pouvez l'activer lors de l'enregistrement de votre message personnalisé en ajoutant l'option

'supports' => array('thumbnail')

comme beaucoup d'autres fonctions natives utiles

1
c24b