Rufen Sie das erste Bild im Beitrag ab und legen Sie es als ausgewähltes Bild fest, wenn der Beitrag gespeichert / aktualisiert wird

Ich muss für jeden Post, den ich veröffentliche, ein vordefiniertes Bild erstellen. Wenn also ein Beitrag veröffentlicht / aktualisiert wird, scannt das Skript den Post für das erste Bild mit einem Skript wie diesem:

// Get URL of first image in a post function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('//i', $post->post_content, $matches); $first_img = $matches [1] [0]; // no image found display default image instead if(empty($first_img)){ $first_img = "/images/default.jpg"; } return $first_img; } 

Also würde es dieses Bild bekommen und es als ein vorgestellten Bild für diesen Beitrag setzen. Wenn es kein Bild gibt, dann tu nichts. Ich habe mir viele Skripte und Plugins angeschaut, aber keiner tut es so, wie ich es möchte.

Solutions Collecting From Web of "Rufen Sie das erste Bild im Beitrag ab und legen Sie es als ausgewähltes Bild fest, wenn der Beitrag gespeichert / aktualisiert wird"

Dies könnte auch für Sie funktionieren. Er scannt den Post und zieht dann das Bildset als “Featured” ein. Wenn dies nicht der Fall ist, wird das erste an den Post angehängte Bild zurückgegeben. Wenn es keins gibt, sucht es nach irgendeinem Bild in dem Beitrag; Wenn das nicht da ist, schnappt es sich einen YouTube-Screenshot. Setze dies in die functions.php Datei deines Themes:

 // Note that your theme must support post thumbnails for this function to work. // If you are getting an error try adding add_theme_support('post-thumbnails'); to your functions. php file function vp_get_thumb_url($text, $size){ global $post; $imageurl=""; // Check to see which image is set as "Featured Image" $featuredimg = get_post_thumbnail_id($post->ID); // Get source for featured image $img_src = wp_get_attachment_image_src($featuredimg, $size); // Set $imageurl to Featured Image $imageurl=$img_src[0]; // If there is no "Featured Image" set, move on and get the first image attached to the post if (!$imageurl) { // Extract the thumbnail from the first attached imaged $allimages =&get_children('post_type=attachment&post_mime_type=image&post_parent=' . $post->ID ); foreach ($allimages as $img){ $img_src = wp_get_attachment_image_src($img->ID, $size); break; } // Set $imageurl to first attached image $imageurl=$img_src[0]; } // If there is no image attached to the post, look for anything that looks like an image and get that if (!$imageurl) { preg_match('/< \s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*)/i' , $text, $matches); $imageurl=$matches[1]; } // If there's no image attached or inserted in the post, look for a YouTube video if (!$imageurl){ // look for traditional youtube.com url from address bar preg_match("/([a-zA-Z0-9\-\_]+\.|)youtube\.com\/watch(\?v\=|\/v\/)([a-zA-Z0-9\-\_]{11})([^< \s]*)/", $text, $matches2); $youtubeurl = $matches2[0]; $videokey = $matches2[3]; if (!$youtubeurl) { // look for youtu.be 'embed' url preg_match("/([a-zA-Z0-9\-\_]+\.|)youtu\.be\/([a-zA-Z0-9\-\_]{11})([^<\s]*)/", $text, $matches2); $youtubeurl = $matches2[0]; $videokey = $matches2[2]; } if ($youtubeurl) // Get the thumbnail YouTube automatically generates // '0' is the biggest version, use 1 2 or 3 for smaller versions $imageurl = "http://i.ytimg.com/vi/{$videokey}/0.jpg"; } // Spit out the image path return $imageurl; } 

Um dies in Ihren Motivdateien anzuzeigen, fügen Sie zunächst Folgendes ein:

 < ?php if (function_exists('vp_get_thumb_url')) { // Set the desired image size. Swap out 'thumbnail' for 'medium', 'large', or custom size $thumb=vp_get_thumb_url($post->post_content, 'large-feature'); } ?> 

und irgendwo danach, um das tatsächliche Bild anzuzeigen, in diesem Fall mit einem Link zum Post verpackt:

 < ?php if ($thumb!='') { ?> < ?php get_the_title(); ?> < ?php } ?> 

Suchen Sie auf Google nach dem functionsnamen vp_get_thumb_url für andere Artikel zur Implementierung. Viel Glück!

Verwenden Sie Ihre function mit diesen beiden functionen, um die Kommentare im Code zu verstehen

 /** * If the the image is an attachment we just set the id as the post thumbnail, * if not then we get the first image from the post content , upload it using media_sideload_image and then we set the thumbnail * * @param (int) $post_id post id * * @return Void */ function set_featured_image_on_save($post_id){ $attachments = get_posts(array('numberposts' => '1', 'post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC')); if(sizeof($attachments) > 0){ set_post_thumbnail($post_id, $attachments[0]->ID); }else{ // not loaded the we upload it as an attachment // required libraries for media_sideload_image require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/media.php'); require_once(ABSPATH . 'wp-admin/includes/image.php'); // load the image $img = catch_that_image(); if ("/images/default.jpg" != $img){ $result = media_sideload_image($img, $post_id); $attachments = get_posts(array('numberposts' => '1', 'post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC')); if(sizeof($attachments) > 0) set_post_thumbnail($post_id, $attachments[0]->ID); }else{ //no images found return; } } } add_action( 'save_post', 'auto_set_post_image' ); /** * runs on post save and check's if we already have a post thumbnail, if not it gets one * * @param (int) $post_id * @return Void */ function auto_set_post_image( $post_id ) { // verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // Check permissions if ( 'page' == $_POST['post_type'] ){ if ( !current_user_can( 'edit_page', $post_id ) ) return; }else{ if ( !current_user_can( 'edit_post', $post_id ) ) return; } // OK, we're authenticated: we need to find and save the data //check if we have a post thumnail set already $attch = get_post_meta($post_id,"_thumbnail_id",true); if (empty($attch)){ set_featured_image_on_save($post_id); } }