Home » wordpress » Afficher des images de la Media Library via des metabox
Afficher des images de la Media Library via des metabox
Afficher des images de la Media Library wordpress via des metabox
Après avoir fouillé sur le net, j’ai trouvé une solution pour la création d’un custom field affichant des images depuis la Media Library. Ici on va se créer un custom field ou une métabox contenant l’uploader media de wordpress.
Notre metabox contiendra le javascript nécessaire pour appeler l’uploader de média, ainsi que pour ajouter des champ d’ajout d’images supplémentaires.
Comme d’habitude, cela peut s’avérer bien utile, au cas ou on aurait supprimé l’éditeur par défaut de wordpress, mais qu’on aurait tout de même besoin d’afficher des images dans le corps de nos pages ou post.
La fonction est complexe, et tirée de stackoverflow :
/** * Add custom Meta Box sur les post */ function add_image_cc() { add_meta_box( 'image', 'Images additionnelles', 'image_options_cc', 'post', 'normal', 'core' ); }
/** * Affichage de la metabox */ function image_options_cc() { global $post; $gallery_data = get_post_meta( $post->ID, 'gallery_data', true );
// Nonce pour la verif wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_cc' ); ?>
<script type="text/javascript"> function add_image(obj) { var parent=jQuery(obj).parent().parent('div.field_row'); var inputField = jQuery(parent).find("input.meta_image_url");
function remove_field(obj) { var parent=jQuery(obj).parent().parent(); //console.log(parent) parent.remove(); }
function add_field_row() { var row = jQuery('#master-row').html(); jQuery(row).appendTo('#field_wrap'); } </script> <?php }
/** * Save post action, process fields */ function update_image_cc( $post_id, $post_object ) { // Enregistrement if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// verification des revisions if ( 'revision' == $post_object->post_type ) return;
// le bon post type if ( 'post' != $_POST['post_type'] ) return;
if ( $_POST['gallery'] ) { // construction du tableau pour la sauvegarde des données $gallery_data = array(); for ($i = 0; $i < count( $_POST['gallery']['image_url'] ); $i++ ) { if ( '' != $_POST['gallery']['image_url'][ $i ] ) { $gallery_data['image_url'][] = $_POST['gallery']['image_url'][ $i ]; $gallery_data['image_desc'][] = $_POST['gallery']['image_desc'][ $i ]; } }
if ( $gallery_data ) update_post_meta( $post_id, 'gallery_data', $gallery_data ); else delete_post_meta( $post_id, 'gallery_data' ); } // si rien, supprimer les options else { delete_post_meta( $post_id, 'gallery_data' ); } }
Ce code est à placer dans le fichier functions.php.
Ensuite pour afficher ces images, il va falloir créer une boucle et des conditions pour afficher un titre général au bloc d’image qu’on veut créer, afficher les images uniquement s’il y en a etc.
Dans mon fichier single.php, je récupère les valeurs de ma metabox, que j’insère dans un tableau. Je parcours celui ci pour afficher, s’il y en a, mes images dans des blocs contenant la classe bootstrap col-sm-4.
j’ai mon thumbnail en haut, des custom field pour les données, puis dans les lignes d’en dessous, les images enregistrées depuis mes metabox.
Dans une page où l’on n’a mis aucune image additionnelle, nos conditions nous permettent ici de ne rien afficher :
Même si le code peut sans doute être largement optimisé, je suis parvenu à adapter puis compléter la fonction pour un affichage parfaitement intégré au site.