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:ユーザー入力補助

カテゴリー

flexbox インストールなど面倒なことなしにDIV BOX を横に並べるクラス

flexbox インストールなど面倒なことなしにDIV BOX を横に並べるクラス flexbox は、div の box を横に並べるためのブラウザに標準装備されてるクラス。乱暴な言い方すればそういうことです。現場では細かいことはどうでもよくて、とにかく簡単に DIV BOX を横

vba タスクに IE が残る

vba タスクに IE が残る vba タスクに IE が残る。VBAでブラウザ経由でサイトのページの情報を拾い上げる技は結構使いますよね?私だけ?wwwそうすると、なぜかvba タスクに IE が残っていて、繰り返し利用するとどん

wp datepicker 特定の項目で動かない。

wp datepicker 特定の項目で動かない。 ワードプレスでつかえる datepicker は、とっても簡単につかえて便利なライブラリーです。javascript は、なれないとデバッグに時間がかかり気持ち的にすごく敷居が高い気がしますがわかって

プラグインの管理画面でHTMLの入力を許すフィールドの扱い方

プラグインの管理画面でHTMLの入力を許すフィールドの扱い方 ワードプレスのプラグインを書いていると、HTMLタグを入力できるフィールドを作りたくなりますよね?例えば、ページにデータを表示するときにその書式を入力さえるとか。例えば、これはワードプレスのプラグイン

ワードプレスのフッターにある jQueryの読み込みをヘッダーで出力させる

ワードプレスのフッターにある jQueryの読み込みをヘッダーで出力させる ワードプレスのフッターにあるjQueryの読み込みをヘッダーで出力させる必要ができました。simplecity の後継ともいわれる ワードプレスのテーマ cocoon のカスタマイズです。cocoon

ワードプレスで jQuery の後に script を読み込ませる方法(動的スクリプトもOK)

ワードプレスで jQuery の後に script を読み込ませる方法(動的スクリプトもOK) ワードプレスで jQuery の後に script を読み込ませる方法、これは動的スクリプトも可能な方法です。ワードプレスのプラグインで動くシステムを開発していたところ、ユーザーインターフェイスでどう