Ce code permet d’ajouter automatiquement une image miniature pour un post sur WordPress. Le choix se fera en fonction de sa position dans le post (la première image ou video Youtube).
L’avantage de ce code est qu’il permet de mettre une miniature à partir d’une vidéo youtube. Ce qui sera visible dans les pages Archives.php ou Index.php (ou ailleurs selon votre choix ou votre thème)
Dans fonctions.php :
// recherche de l'image sur le post function post_thumbnail( $post_id ){ $post = get_post($post_id); $post_thumbnail = get_post_meta($post_id, '_thumbnail_id', true); if ( has_blocks( $post->post_content ) && empty($post_thumbnail) ) { $blocks = parse_blocks( $post->post_content ); $find = false; $i = 0; $blocks_length = count($blocks); while(!$find && $i < $blocks_length){ $block = $blocks[$i]; if($block['blockName'] === 'core-embed/youtube' || $block['blockName'] === 'core/image' ){ $find = true; } $i++; } if(!$find){ return; }else{ $attributs = $block['attrs']; if($block['blockName'] === 'core/image'){ update_post_meta( $post_id, '_thumbnail_id', $attributs['id'], '' ); }else{ $explode_video_url = explode('v=', $attributs['url']); $video_id = $explode_video_url[1]; $video_thumbnail_url = 'https://img.youtube.com/vi/'. $video_id . '/hqdefault.jpg'; $image_id = crb_insert_attachment_from_url($video_thumbnail_url, $post_id); update_post_meta( $post_id, '_thumbnail_id', $image_id, '' ); } } } } add_action('save_post' ,'post_thumbnail' ,10 ,1); // Fonction qui permet de télécharger une photo de miniature à partir de son URL function crb_insert_attachment_from_url($url, $parent_post_id = null) { if( !class_exists( 'WP_Http' ) ) include_once( ABSPATH . WPINC . '/class-http.php' ); $http = new WP_Http(); $response = $http->request( $url ); if( $response['response']['code'] != 200 ) { return false; } $upload = wp_upload_bits( basename($url), null, $response['body'] ); if( !empty( $upload['error'] ) ) { return false; } $file_path = $upload['file']; $file_name = basename( $file_path ); $file_type = wp_check_filetype( $file_name, null ); $attachment_title = sanitize_file_name( pathinfo( $file_name, PATHINFO_FILENAME ) ); $wp_upload_dir = wp_upload_dir(); $post_info = array( 'guid' => $wp_upload_dir['url'] . '/' . $file_name, 'post_mime_type' => $file_type['type'], 'post_title' => $attachment_title, 'post_content' => '', 'post_status' => 'inherit', ); // Create the attachment $attach_id = wp_insert_attachment( $post_info, $file_path, $parent_post_id ); // Include image.php require_once( ABSPATH . 'wp-admin/includes/image.php' ); // Define attachment metadata $attach_data = wp_generate_attachment_metadata( $attach_id, $file_path ); // Assign metadata to attachment wp_update_attachment_metadata( $attach_id, $attach_data ); return $attach_id; }
Ajouter une image sur le thumbnail qui permettra de faire comprendre à vos visiteurs qu’il s’agit d’un post avec une vidéo.
A placer dans votre thème (ex : archive.php ou index.php)
<picture> <?php the_post_thumbnail('thumbnail'); ?> <?php global $post; if( has_blocks($post->post_content) ){ $blocks = parse_blocks( $post->post_content ); $find = false; $i = 0; $blocks_length = count($blocks); while(!$find && $i < $blocks_length){ $block = $blocks[$i]; if($block['blockName'] === 'core-embed/youtube' || $block['blockName'] === 'core/image' ){ $find = true; } $i++; } if($find){ if($block['blockName'] === 'core-embed/youtube'){ echo '<span class="playbutton"></span>'; } } } ?> </picture>
Toujours pour le bouton ajouter cette image. Ajouter dans votre thème le bouton suivant (ou un autre plus à votre goût)
Dans votre feuille de style (CSS) – à vous de changer le chemin de votre image sur votre feuille des style
.playbutton { background: url('img/bouton-youtube.png') center center no-repeat; position: absolute; top: 25%; left: 50%; width: 74px; height: 74px; margin: -35px 0 0 -35px; z-index: 10; opacity:0.6; } .playbutton:hover { opacity:1.0; }