web-dev-qa-db-fra.com

définir une entrée de fichier image choisie en tant qu'image sélectionnée de wp frontend

SCENARIO: J'autorise la création de publications à partir de front-end. Le formulaire comporte également quatre champs de téléchargement d'image. J'utilise le code collé ci-dessous pour les images jointes et la définition de la vignette du message.

//insert attachments
    if ($_FILES) {
    foreach ($_FILES as $file => $array) {
        $newupload = insert_attachment($file,$pid);
        }
        } 


 //attachment helper function   
 function insert_attachment($file_handler,$post_id,$setthumb='false') {
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK){ return __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 );
        //set post thumbnail
        if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
        return $attach_id;
            }

L'image post-vignette/sélectionnée définie par ce code est la DERNIÈRE image téléchargée. J'ai essayé une recherche sur Google pour "définir la vignette de poste de frontpress wordpress" et parcouru de nombreux articles, mais aucun ne s'est approché de ce que je demande ici. La majorité des sujets que j'ai rencontrés chez SE en ce qui concerne la publication frontale, parle de le réglage de l’image sélectionnée ou de plusieurs téléchargements . J'ai également vérifié toutes les questions suggérées, pendant que je rédigeais cette question, juste pour m'assurer qu'elle avait déjà été posée. '

Si cela compte, voici le code HTML utilisé dans le formulaire, assez standard.

<input type="file" name="image-one" id="image-one"/>
<input type="file" name="image-two" id="image-two"/>
<input type="file" name="image-three" id="image-three"/>

REQUEST: Ce serait formidable si je pouvais obtenir une solution permettant d'affecter n'importe quel champ de saisie d'image choisi en tant qu'image sélectionnée, mais pour le moment, du moins ce dont j'ai besoin. pour définir l’entrée PREMIÈRE de l’image comme image sélectionnée/post-vignette. Veuillez suggérer une solution.

L’essentiel ici est que je n’ai pas de problème avec la définition de post-vignette, mais la question concerne le choix de choisir l’une des images téléchargées comme post-vignette ou au moins la première image, au lieu de la dernière image définie par la photo en cours. code.

Note de bas de page: Je viens d’indiquer ici ce qui m’est venu à l’esprit si nécessaire. Si vous voulez plus d'informations, s'il vous plaît faites le moi savoir. Merci d'avance.

1
gurung

Re: définir l'entrée de la PREMIÈRE image comme image sélectionnée/post-vignette

Étant donné que vous savez que input name="image-one" sera votre image sélectionnée, vous pouvez vérifier que image-one est votre valeur $file_handler dans function insert_attachment après l'appel à media_handle_upload, puis définir la vignette. Voir le code suivant.

Notez que j'ai défini image-one comme nom de champ à rechercher et de le transmettre à chaque fois.

<?php
$thumbnail_field = 'image-one';
if ( ! empty( $_FILES ) ) {
    foreach ( $_FILES as $file => $array )
        $newupload = insert_attachment( $file, $pid, $thumbnail_field );
}

//attachment helper function   
function insert_attachment( $file_handler, $post_id, $set_thumb = false ) {
    if ( UPLOAD_ERR_OK !== $_FILES[ $file_handler ]['error'] )
        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 );

    //set post thumbnail (featured)
    if ( $attach_id && $set_thumb )
        update_post_meta( $post_id, '_thumbnail_id', $attach_id );

    return $attach_id;
}
?>

Re: attribuer n'importe quel champ de saisie d'image choisi comme image sélectionnée

Je pense que cette partie n'est pas nécessaire, vous devez simplement étiqueter le premier champ d'image comme "Image en vedette". Il est possible que le déposant ne veuille pas définir une image sélectionnée maintenant.

En regardant le code ci-dessus, remplacez la ligne $thumbnail_field = 'image-one'; par la suivante.

if ( ! empty( $_POST[ 'thumbnail-field' ] ) )
    $thumbnail_field = esc_html( $_POST[ 'thumbnail-field' ] );
else
    $thumbnail_field = 'image-one';

Ceci fait référence à un champ select comme ci-dessous. Radio et jQuery pourraient également être utilisés pour formater et peupler.

<label for="thumbnail-field">
    Thumbnail field
    <select name="thumbnail-field">
        <option value="image-one">1st</option>
        <option value="image-two">2nd</option>
        <option value="image-three">3rd</option>
    </select>
</label>

Enfin, vous pouvez également rafraîchir votre mémoire sur la méthode POST de PHP () et consulter celle de WordPress. normes de codage pour écrire du code plus lisible.

1
Michael Cannon