よく写真素材配布サイトで見られるやつです。
よくあるパターンとしては、一度別窓で開いてからのダウンロードボタンとなることが多いですが(コンバーションを取るためかな?)、今回はlightbox的な画像表示からのダウンロードボタンとします。
lightbox的な画像表示にはfancyboxを使用します。
※プラグインの「FancyBox for WordPress」を使用すると何故かうまくいきません。プラグインを使用せずにfancyboxページよりスクリプトをダウンロードしてご利用ください。
fancyboxの導入方法
スクリプトダウンロード
fancyboxページよりスクリプトをダウンロードします。
使用中のWPテーマに移動
ダウンロード後、解凍し、必要なファイルだけ使用中のWPテーマに入れます。
- source/jquery.fancybox.pack.js
- source/jquery.fancybox.css
- source/blank.gif
- source/fancybox_loading.gif
- source/fancybox_loading@2x.gif
- source/fancybox_overlay.png
- source/fancybox_sprite.png
- source/fancybox_sprite@2x.png
※もし、画像ファイルは「img」フォルダにまとめる、CSSファイルは「css」フォルダにまとめるなど、構造を変える場合は各ファイル指定時の階層に注意してください。
読み込み
header.phpで読み込みます。
この時「jquery」より後に読み込まれるよう注意してください。
例:<?php wp_head(); ?>より後に書く
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/source/jquery.fancybox.css" /> <script src="<?php echo get_template_directory_uri(); ?>/source/jquery.fancybox.pack.js"></script>
発動
発動させます。
header.phpに直接書いても、外部ファイルに書いて読み込んでも、どちらでも問題ありません。
jQuery(function(){
jQuery(".gallery a").fancybox();
});
これでWPギャラリー機能からのリンクは、lightbox的な画像表示をするようになりました。
ダウンロードボタンをつける
fancyboxページに「Tips & tricks」部分2番「Add something to the title (add download link)」に方法が書いてあります。
これを参考に、先程の記述を改造します。
jQuery(function(){
jQuery(".gallery a").fancybox({
afterLoad: function() {
this.title = '<a class="dl-btn" href="' + this.href + '" download>Download</a> ' + this.title;
},
helpers : {
title: {type: 'inside'}
}
});
});
これで、class「dl-btn」のついたダウンロードリンクが表示されるようになりました。
お好きなように装飾してください。
CSS例
a.dl-btn {
display: block;
float: left;
background: #666;
border: 1px solid #222;
border-radius: 3px;
width: 6em;
margin: 0 10px 0 0;
padding: 5px;
text-align: center;
text-decoration: none;
color: #fff;
}
a.dl-btn:hover {
background: #222;
}
HTMLのdownload属性について
先程の記述内の「download」について、これはHTML5のdownload属性です。リンク先ドキュメントをダウンロードさせることができます。
この属性がついているだけでリンク先ファイルをダウンロードしてくれる優れものですが、例によってIEが未対応です。
そのため、IE用に先程の記述を改造し、JSを新たに追加します。
参考サイト:ファイルをダウンロードさせるには?[JavaScript]
jQuery(function(){
jQuery(".gallery a").fancybox({
afterLoad: function() {
<a href="' + this.href + '" class="dl-btn" download onclick="javascript: downloadFile(\'' + this.href + '\', \'' + this.href + '\'); return false;">Download</a>' + this.title;
},
helpers : {
title: {type: 'inside'}
}
});
});
function downloadFile(url, filename) {
"use strict";
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function (oEvent) {
var blob = xhr.response;
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename);
}
else {
var objectURL = window.URL.createObjectURL(blob);
var link = document.createElement("a");
document.body.appendChild(link);
link.href = objectURL;
link.download = filename;
link.click();
document.body.removeChild(link);
}
};
xhr.send();
}




最近のコメント