]*title\s*=\s*[\""\']?([^\""\'>]*)/i', $post_content, $matchesTitle); if (count($matchesTitle) && isset($matchesTitle[1])) { if ( isset($matchesTitle[1][$key]) ) $imageTitle = $matchesTitle[1][$key]; } //処理のためのURL取得 $imageUrl = $matches[1][$key]; // _v($imageUrl); //ファイル名の取得 $filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1); // _v($filename); if (!(($uploads = wp_upload_dir(current_time('mysql')) ) && false === $uploads['error'])){ return null; } //ユニーク(一意)ファイル名を生成 $filename = wp_unique_filename( $uploads['path'], $filename ); // _v($filename); //ファイルをアップロードディレクトリに移動 $new_file = $uploads['path'] . "/$filename"; if (!ini_get('allow_url_fopen')) { return null; } else { $file_data = @wp_filesystem_get_contents($imageUrl, true); } if (!$file_data) { return null; } wp_filesystem_put_contents($new_file, $file_data); //ファイルのパーミッションを正しく設定 $stat = stat( dirname( $new_file )); $perms = $stat['mode'] & 0000666; @ chmod( $new_file, $perms ); //ファイルタイプの取得。サムネイルにそれを利用 $mimes = null; $wp_filetype = wp_check_filetype( $filename, $mimes ); extract( $wp_filetype ); //ファイルタイプがない場合、これ以上進めない if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) { return null; } //URLを作成 $url = $uploads['url'] . "/$filename"; //添付(attachment)配列を構成 $attachment = array( 'post_mime_type' => $type, 'guid' => $url, 'post_parent' => null, 'post_title' => $imageTitle ? $imageTitle : get_basename($filename), 'post_content' => '', ); $file = false; $thumb_id = wp_insert_attachment($attachment, $file, $post_id); if ( !is_wp_error($thumb_id) ) { //attachmentのアップデート wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $new_file ) ); update_attached_file( $thumb_id, $new_file ); return $thumb_id; } return null; } endif; //投稿内の最初の画像をアイキャッチに設定する(Auto Post Thumnailプラグイン的な機能) if ( is_auto_post_thumbnail_enable() && !( isset($_POST['generate_featured_image_from_title']) && (intval($_POST['generate_featured_image_from_title']) === 1) ) ) { //新しい投稿で自動設定する場合 //add_action( 'transition_post_status', 'auto_post_thumbnail_image'); add_action('save_post', 'auto_post_thumbnail_image'); add_action('draft_to_publish', 'auto_post_thumbnail_image'); add_action('new_to_publish', 'auto_post_thumbnail_image'); add_action('pending_to_publish', 'auto_post_thumbnail_image'); add_action('future_to_publish', 'auto_post_thumbnail_image'); //add_action('xmlrpc_publish_post', 'auto_post_thumbnail_image'); add_action('publish_post', 'auto_post_thumbnail_image'); } if ( !function_exists( 'auto_post_thumbnail_image' ) ): function auto_post_thumbnail_image($post_id) { global $wpdb; global $post; if (!$post_id && isset($post->id)) { $post_id = $post->id; } if (is_object($post_id) && isset($post_id->ID)) { $post_id = $post_id->ID; } if (!$post) { return; } //アイキャッチが既に設定されているかチェック if (get_post_meta($post_id, '_thumbnail_id', true) || get_post_meta($post_id, 'skip_post_thumb', true)) { return; } if (has_post_thumbnail()) { return; } $the_post = $wpdb->get_results($wpdb->prepare("SELECT * FROM `{$wpdb->posts}` WHERE id = %d", $post_id)); //正規表現にマッチしたイメージのリストを格納する変数の初期化 $matches = array(); //投稿本文からすべての画像を取得 preg_match_all('/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*).+?\/?>/i', $the_post[0]->post_content, $matches); //YouTubeのサムネイルを取得(画像がなかった場合) if (empty($matches[0])) { preg_match('%(?:youtube\.com/(?:user/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $the_post[0]->post_content, $match); if (!empty($match[1])) { $matches = array(); $matches[0] = $matches[1] = array('https://i.ytimg.com/vi/'.$match[1].'/maxresdefault.jpg'); } } if (count($matches)) { foreach ($matches[0] as $key => $image) { $thumb_id = null; //画像がイメージギャラリーにあったなら、サムネイルIDをCSSクラスに追加(イメージタグからIDを探す) preg_match('/wp-image-([\d]*)/i', $image, $thumb_id); if ( isset($thumb_id[1]) ) $thumb_id = $thumb_id[1]; //サムネイルが見つからなかったら、データベースから探す if (!$thumb_id && //画像のパスにホームアドレスが含まれているとき ( strpos($image, home_url()) !== false ) ) { preg_match('/src *= *"([^"]+)/i', $image, $m); $image = $m[1]; if ( isset($m[1]) ) { //wp_postsテーブルからguidがファイルパスのものを検索してIDを取得 $result = $wpdb->get_results($wpdb->prepare("SELECT ID FROM `{$wpdb->posts}` WHERE guid = %s", $image)); //IDをサムネイルをIDにセットする if ( isset($result[0]) ) $thumb_id = $result[0]->ID; } //サムネイルなどで存在しないときはフルサイズのものをセットする if ( !$thumb_id ) { //ファイルパスの分割 $path_parts = pathinfo($image); //サムネイルの追加文字列(-680x400など)を取得 preg_match('/-\d+x\d+$/i', $path_parts["filename"], $m); //画像のアドレスにサイト名が入っていてサムネイル文字列が入っているとき if ( isset($m[0]) ) { //サムネイルの追加文字列(-680x400など)をファイル名から削除 $new_filename = str_replace($m[0], '', $path_parts["filename"]); //新しいファイル名を利用してファイルパスを結語 $new_filepath = $path_parts["dirname"].'/'.$new_filename.'.'.$path_parts["extension"]; //wp_postsテーブルからguidがファイルパスのものを検索してIDを取得 $result = $wpdb->get_results($wpdb->prepare("SELECT ID FROM `{$wpdb->posts}` WHERE guid = %s", $new_filepath)); //IDをサムネイルをIDにセットする if ( isset($result[0]) ) $thumb_id = $result[0]->ID; } } } //それでもサムネイルIDが見つからなかったら、画像をURLから取得する if (!$thumb_id) { // _v($matches); $thumb_id = fetch_thumbnail_image($matches, $key, $the_post[0]->post_content, $post_id); } //サムネイルの取得に成功したらPost Metaをアップデート if ($thumb_id) { update_post_meta( $post_id, '_thumbnail_id', $thumb_id ); break; } } } } endif;