HTML,CSS,PHP,ワードプレスカスタマイズ 技術情報資料

アイキャッチの自動挿入

スポンサーリンク

アイキャッチの自動挿入が欲しかった。
最新ソース

テスト用画像(楽天アフィリリンクタグ)


量産用のアフィリエイト記事を書くときアフィリリンク画像をいちいちダウンロードするのが面倒。
ってことで、探すと通常は、Auto Post Thumbnail にたどり着く。

でもね、でもさ、Auto Post Thumbnail って書いておいて、アイキャッチ取り込み~~って一括処理なんよ。
ね?面倒くせーべ?したら、記事作ったらプレビューして画像ダウンロードした方が早いってばよ。

んで、探していたら、こちらにたどり着きました。感謝(-人-
http://nelog.jp/auto-post-thumbnail-custum

プラグインには、なっていないんだけど、function.php にペタと張り付ければオケ。
が・・・当然のことながら、楽天のタグは、そのままでは取り込めない。

それともう一つ、ワードプレスのファイルシステムに対応している。
そのためか知らないけど、画像読み込みできない。

散々しらべたんだけど、ファイルシステムそのものを使おうとおもった時点でおかしい。
もう少し大人になってからにしようとおもって Auto Post Thumbnail のパーツをそのまま持ってきた。

寝ログさんからの変更点は、以下の通り。
・楽天の画像タグに対応。
・ファイルシステムを Auto Post Thumbnail のものを使用。

んで、寝ログさんのパーツでいいのは、ユーチューブのサムネイルでもオケってこと。
逆にこのパーツを Auto Post Thumbnail に入れてあげるのもナイスなアイディアだとおもう。
あちしは、ヤフショ、アマゾンのリンクタグもひろえるようになったら、Auto Post Thumbnail に書き戻そうかと思ってる。


以下がソースです。これをそのままペタッと function.php に張り込めばオケ。
記事を投稿した時点でアイキャッチを自動挿入します。
※ Auto Post Thumbnail そのものがファイルシステムを使ってないので、そこのところはご理解ください。
※ 楽天タグの判断に ?pc のみで判断しているので、場合によっては、あれ?ってなるかもしれないので注意。
  使い込んで、ここんところは、もっと正確な情報で拾うようにしてくださいませ。
  あちしも随時書き換えていきますが。ヤフーショッピングとかにも対応させたいし。

/////////////////////////////////////////////
//コピペ一発でWordpressの投稿時にアイキャッチを自動設定するカスタマイズ方法(YouTube対応版)
//http://nelog.jp/auto-post-thumbnail-custum
//楽天イメージタグ対応
//http://tecinfo.yuzumaru.co.jp/wp/
/////////////////////////////////////////////

//WP_Filesystemの利用
require_once(ABSPATH . '/wp-admin/includes/image.php');
//イメージファイルがサーバー内にない場合は取得する
function fetch_thumbnail_image($matches, $key, $post_content, $post_id){
	//正しいタイトルをイメージに割り当てる。IMGタグから抽出
	$imageTitle = '';
	preg_match_all('/<\s*img [^\>]*title\s*=\s*[\""\']?([^\""\'>]*)/i', $post_content, $matchesTitle);

	if (count($matchesTitle) && isset($matchesTitle[1])) {
		$imageTitle = $matchesTitle[1][$key];
	}

	//処理のためのURL取得
	$imageUrl = $matches[1][$key];

	//楽天イメージタグの処理
	$p=strpos($imageUrl,'?pc');
	if($p>0){
		$imgWork=mb_substr($imageUrl,$p);
		$imgWork=urldecode($imgWork);
		$p=strpos($imgWork,'=');
		if($p>0){
			$imgWork=mb_substr($imgWork,$p+1);
			$p=strpos($imgWork,'?');
			if($p>0){
				$imageUrl=mb_substr($imgWork,0,$p);
			}
		}
	}

	//ファイル名の取得
	$filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1);

	if (!(($uploads = wp_upload_dir(current_time('mysql')) ) && false === $uploads['error'])){
		return null;
	}
	//ユニック(一意)ファイル名を生成
	$filename = wp_unique_filename( $uploads['path'], $filename );
	//ファイルをアップロードディレクトリに移動
	$new_file = $uploads['path'] . "/$filename";
	if (!ini_get('allow_url_fopen')) {
		$file_data = curl_get_file_contents($imageUrl);
	} else {
		$file_data = @file_get_contents($imageUrl);
	}

	if (!$file_data) {
		return null;
	}

	file_put_contents($new_file, $file_data);

	//ファイルのパーミッションを正しく設定
	$stat = stat( dirname( $new_file ));
	$perms = $stat['mode'] & 0000666;
	@ chmod( $new_file, $perms );

	//ファイルタイプの取得。サムネイルにそれを利用
	$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,
		'post_content' => '',
	);

	$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;
}

//投稿内の最初の画像をアイキャッチに設定する(Auto Post Thumnailプラグイン的な機能)
function auto_post_thumbnail_image() {
	global $wpdb;
	global $post;
	$post_id = $post->ID;

	//アイキャッチが既に設定されているかチェック
	if (get_post_meta($post_id, '_thumbnail_id', true) || get_post_meta($post_id, 'skip_post_thumb', true)) {
		return;
	}

	$post = $wpdb->get_results("SELECT * FROM {$wpdb->posts} WHERE id = $post_id");

	//正規表現にマッチしたイメージのリストを格納する変数の初期化
	$matches = array();

	//投稿本文からすべての画像を取得
	preg_match_all('/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*)/i', $post[0]->post_content, $matches);
	//YouTubeのサムネイルを取得(画像がなかった場合)
	if (empty($matches[0])) {
		preg_match('%(?:youtube\.com/(?:user/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $post[0]->post_content, $match);
		if (!empty($match[1])) {
			$matches=array(); $matches[0]=$matches[1]=array('http://img.youtube.com/vi/'.$match[1].'/mqdefault.jpg');
		}
	}

	if (count($matches)) {
		foreach ($matches[0] as $key => $image) {
			//画像がイメージギャラリーにあったなら、サムネイルIDをCSSクラスに追加(イメージタグからIDを探す)
			preg_match('/wp-image-([\d]*)/i', $image, $thumb_id);
			$thumb_id = $thumb_id[1];
		
			//サムネイルが見つからなかったら、データベースから探す
			if (!$thumb_id) {
				$image = substr($image, strpos($image, '"')+1);
				$result = $wpdb->get_results("SELECT ID FROM {$wpdb->posts} WHERE guid = '".$image."'");
				$thumb_id = $result[0]->ID;
			}

			//それでもサムネイルIDが見つからなかったら、画像をURLから取得する
			if (!$thumb_id) {
				$thumb_id = fetch_thumbnail_image($matches, $key, $post[0]->post_content, $post_id);
			}
		
			//サムネイルの取得に成功したらPost Metaをアップデート
			if ($thumb_id) {
				update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
				break;
			}
		}
	}
}
//新しい投稿で自動設定する場合
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');
/////////////////////////////////////////////
// ここまで
/////////////////////////////////////////////

A8 の画像に対応させてみた

ドキュメントの中に <!–thum(n)–> と入れてもらうと何番目に現れるイメージを拾うか指定できます。
※ デフォルトは1番目
※ n は、何番目の img を拾うか指定しでます。
/////////////////////////////////////////////
//コピペ一発でWordpressの投稿時にアイキャッチを自動設定するカスタマイズ方法(YouTube対応版)
//http://nelog.jp/auto-post-thumbnail-custum
//楽天イメージタグ対応
//A8イメージタグ対応
//使用画像順番号指定対応 <!--thum(n)--> nは、アイキャッチに使用する画像準番号(<img の出現番号
// ※ youtube動画が入っている場合、これを指定できない。
//http://tecinfo.yuzumaru.co.jp/wp/
/////////////////////////////////////////////

//WP_Filesystemの利用
require_once(ABSPATH . '/wp-admin/includes/image.php');
//イメージファイルがサーバー内にない場合は取得する
function fetch_thumbnail_image($matches, $key, $post_content, $post_id,$youtube_sw){
	//デバッグ用パーツ
	//$wfp=fopen( WP_CONTENT_DIR.'/snap.txt','a');
	//fwrite($wfp, "loopmax=$loopmax\n"); 
	//fwrite($wfp, "POS1=$wpos\n"); 
	//fwrite($wfp, "POS2=$wpos2\n"); 
	//fclose($wfp);
	
	$wpos=0;
	$work="";
	if( $youtube_sw == 1){
		//正しいタイトルをイメージに割り当てる。IMGタグから抽出
		$imageTitle = '';
		preg_match_all('/<\s*img [^\>]*title\s*=\s*[\""\']?([^\""\'>]*)/i', $post_content, $matchesTitle);
		
		if (count($matchesTitle) && isset($matchesTitle[1])) {
			$imageTitle = $matchesTitle[1][$key];
		}
		//処理のためのURL取得
		$imageUrl = $matches[1][$key];
	}else{
		$wpos=mb_strpos($post_content,'<img');
		if($wpos>0){
			if(mb_strpos($post_content,"!--thum(")>=0 ){
				$loopmax=0;
				if( mb_strpos($post_content,"thum(")>=0 ){
					preg_match_all('/thum\((.*)\)/i'  , $post_content, $thum);
					$loopmax=$thum[1][0];
					$loopmax--;
				}
				while( $loopmax>0 ){
					$wpos2=mb_strpos($post_content,'<img',$wpos+1);
					if($wpos2>0){
						$wpos=$wpos2;
					}else{
						break;
					}
					$loopmax--;
				}
			} 
		}
	}
	if($wpos>0){
		$work=mb_substr($post_content,$wpos);
		$wpos=mb_strpos($work,'>');
		if($wpos>0){
			$work=mb_substr($work,0,$wpos+1);
			preg_match_all('/src\s*=\s*[\"\'](.*)[\"\']/i'  , $work, $matchesImage);
			preg_match_all('/title\s*=\s*[\"\'](.*)[\"\']/i', $work, $matchesTitle);
			if(mb_strpos($work,"a8.net")>=0 && mb_strpos($work,"bgt")>=0 ){
				$imageTitle = $matchesTitle[1][0];
				$imageUrl = $matchesImage[1][0];
			}else{
				$work="";
			}
		}
	}						

	//楽天イメージタグの処理
	$p=strpos($imageUrl,'?pc');
	if($p>0){
		$imgWork=mb_substr($imageUrl,$p);
		$imgWork=urldecode($imgWork);
		$p=strpos($imgWork,'=');
		if($p>0){
			$imgWork=mb_substr($imgWork,$p+1);
			$p=strpos($imgWork,'?');
			if($p>0){
				$imageUrl=mb_substr($imgWork,0,$p);
			}
		}
	}
	//ファイル名の取得
	$filename = substr($imageUrl, (strrpos($imageUrl, '/'))+1);
	if (!(($uploads = wp_upload_dir(current_time('mysql')) ) && false === $uploads['error'])){
		return null;
	}
	//ユニック(一意)ファイル名を生成
	$filename = wp_unique_filename( $uploads['path'], $filename );
	//ファイルをアップロードディレクトリに移動
	$new_file = $uploads['path'] . "/$filename";
	if(mb_strpos($work,"a8.net")>=0 && mb_strpos($work,"bgt")>=0 && $work!=''){
		$new_file=$new_file.".jpg";
	}
	
	if (!ini_get('allow_url_fopen')) {
		$file_data = curl_get_file_contents($imageUrl);
	} else {
		$file_data = @file_get_contents($imageUrl);
	}
	if (!$file_data) {
		return null;
	}
	
	file_put_contents($new_file, $file_data);
	
	//ファイルのパーミッションを正しく設定
	$stat = stat( dirname( $new_file ));
	$perms = $stat['mode'] & 0000666;
	@ chmod( $new_file, $perms );
	
	//ファイルタイプの取得。サムネイルにそれを利用
	if(mb_strpos($work,"a8.net")>=0 && mb_strpos($work,"bgt")>=0 && $work!=''){
		$wp_filetype = wp_check_filetype( $new_file, $mimes );
	}else{
		$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,
		'post_content' => '',
	);
	
	$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;
}

//投稿内の最初の画像をアイキャッチに設定する(Auto Post Thumnailプラグイン的な機能)
function auto_post_thumbnail_image() {
	global $wpdb;
	global $post;
	$post_id = $post->ID;
	
	//アイキャッチが既に設定されているかチェック
	if (get_post_meta($post_id, '_thumbnail_id', true) || get_post_meta($post_id, 'skip_post_thumb', true)) {
		return;
	}
	
	$post = $wpdb->get_results("SELECT * FROM {$wpdb->posts} WHERE id = $post_id");
	
	//正規表現にマッチしたイメージのリストを格納する変数の初期化
	$matches = array();
	
	//投稿本文からすべての画像を取得
	$youtube_sw=0;
	preg_match_all('/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*)/i', $post[0]->post_content, $matches);
	//YouTubeのサムネイルを取得(画像がなかった場合)
	if (empty($matches[0])) {
		preg_match('%(?:youtube\.com/(?:user/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $post[0]->post_content, $match);
		if (!empty($match[1])) {
			$matches=array(); $matches[0]=$matches[1]=array('http://img.youtube.com/vi/'.$match[1].'/mqdefault.jpg');
			$youtube_sw=1;
		}
	}
	
	if (count($matches)) {
		foreach ($matches[0] as $key => $image) {
			//画像がイメージギャラリーにあったなら、サムネイルIDをCSSクラスに追加(イメージタグからIDを探す)
			preg_match('/wp-image-([\d]*)/i', $image, $thumb_id);
			$thumb_id = $thumb_id[1];
			
			//サムネイルが見つからなかったら、データベースから探す
			if (!$thumb_id) {
				$image = substr($image, strpos($image, '"')+1);
				$result = $wpdb->get_results("SELECT ID FROM {$wpdb->posts} WHERE guid = '".$image."'");
				$thumb_id = $result[0]->ID;
			}
			
			//それでもサムネイルIDが見つからなかったら、画像をURLから取得する
			if (!$thumb_id) {
				$thumb_id = fetch_thumbnail_image($matches, $key, $post[0]->post_content, $post_id, $youtube_sw);
			}
			
			//サムネイルの取得に成功したらPost Metaをアップデート
			if ($thumb_id) {
				update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
				break;
			}
		}
	}
}
//新しい投稿で自動設定する場合
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');
/////////////////////////////////////////////
// ここまで
/////////////////////////////////////////////

スポンサーリンク

スポンサーリンク

よく使うタグ

・float クリア
<br clear="all"><div style="clear:both;" class="clearfix"></div>
・角丸め
round-radius
border-radius:5px; -webkit-border-radius:10px; -moz-border-radius:10px;
・div box
overflow:scroll;min-width:300px;max-width:300px;min-height:300px;max-height:300px;
・TEXTAREAリサイズ
resize: vertical;
・サイトURL
home_url() // http://…
if(site_url()==home_url){
$shorturl_yuzu_path = substr(ABSPATH,0,strpos( ABSPATH, substr(site_url(),strlen(home_url()) ) ) ).’/’;
}else{
$shorturl_yuzu_path = ABSPATH.’/’;
}
// /var/…
・WP HOME URL
site_url() // http://…/wp
ABSPATH // /var/…/wp
・プラグイン(自分のDIR追加必要)
plugins_url() // http://…/plugins
WP_PLUGIN_URL // http://…/plugins
WP_PLUGIN_DIR // /var/…/plugins
・使用中のテーマ
get_template_directory_uri() // http://…/theme/xx
get_template_directory() // /var/…/theme/xx
・wp-content
content_url() // http://…/wp-content
WP_CONTENT_DIR // /var/…/wp-content
・画像URLからDIR変換
$pctdir=str_replace(content_url(), WP_CONTENT_DIR,$pcturl);
・パス名分解
$pathData = pathinfo($file);
echo $pathData["dirname"]; // /var/~
echo $pathData["filename"]; // xxx
echo $pathData["extension"]; // txt
echo $pathData["basename"]; // xxx.txt
・画像サイズ
list($width,$height) = getimagesize($url);
if(has_post_thumbnail()){
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_img = wp_get_attachment_image_src( $thumbnail_id , ‘full’ );
$src = $image[0]; //url
$width = $image[1]; //横幅
$height = $image[2]; //高さ
・画像サイズ比率
list($src_w,$src_h) = getimagesize($file);
$dst_w = 600;$dst_h = 0;
$dst_h = ($dst_w!=0)?(intval(($src_h*$dst_w)/$src_w )):(($dst_h!=0)?(intval(($src_w*$dst_h)/$src_h)):0);
・疑似要素順
link visited hover active


特殊文字
シングルクォート : &#39;
ダブルクォート : &quot;
WP設定内表示前処理(htmlタグ許可項目)
$str = str_replace(‘<','&lt;' ,$str);
$str = str_replace(‘>’,’&gt;’ ,$str);
$str = str_replace(‘\”‘,’&quot;’,$str);
$str = str_replace(“\'”,’&#39;’ ,$str);
WO設定項目表示前処理(htmlタグ許可項目)
$str = str_replace(‘\”‘,'”‘,$str);
$str = str_replace(“\'”,”‘”,$str);
・テーマ
get_theme_root_uri()
get_theme_root()
・WP 情報
get_bloginfo( $show )
・Wp config FTP 情報 設置
define( ‘FTP_HOST’, ‘host’ );
define( ‘FTP_USER’, ‘id’ );
define( ‘FTP_PASS’, ‘pw’ );
define( ‘FTP_SSL’, false );
弾に使う
placeholder:ユーザー入力補助

カテゴリー

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクスとサーチコンソール。別にグーグルのアナリティクス、サーチコンソールでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクス。別にグーグルのアナリティクスでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲い込みの為他のアクセス解析では見せな

FB 広告 最適化~グーグルサーチコンソールの使い方(必要な分だけ)

FB 広告 最適化~グーグルサーチコンソールの使い方(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルサーチコンソール。別にグーグルのサーチコンソールでなくてもいいんだけど、グーグルはユーザー囲い込みの為他のアクセス解析では見せなくしたキーワ

FB 広告 最適化~グーグルのアクセス解析の基本

FB 広告 最適化~グーグルのアクセス解析の基本 FB広告を最適化するためには、アクセス解析が重要なカギを握ります。FB広告から当該ページに飛んでくるときURLにオプションを付けることができます。このURLにつけたオプションを使ってどの広告から、どん

jQuery ボタンを押しても反応しない

jQuery ボタンを押しても反応しない jQuery の click イベントを使ってボタンを押したら alert を表示する簡単な仕様なのになにも反応しない。一瞬はまってしまうことって・・・ありますよね?例えば、こう書きます。popup.

WP パーマリンク リダイレクト インターナルサーバーエラー

WP パーマリンク リダイレクト インターナルサーバーエラー WP パーマリンクのリダイレクトがインターナルサーバーエラーを起こすようになった。ユーザーさんのサイトなので「なにをしたか」わからない。WP パーマリンク リダイレクト インターナルサーバーエラーのい