fopen,file_get_content等がそのままでは利用できないサーバーでWordPressのjQueryをCDNにする方法

※ fopen,file_get_contentが利用できるサーバーでも下記で動作します。←これ重要
※ 内容的にはwordpressのjQueryをGoogleのCDNから読み込むと言う話です。

何やらややこしいタイトルになっています(笑)
つまりはこういうことです。

allow_url_fopen(参考サイト:PHPのセキュリティを高めるための個人的メモ(補足))等が有効になっているサイトであれば、何かしら目的の外部ファイルにアクセスでき、そのファイルが利用可能かどうかをチェックすることも取得することも可能なのですが、そうでない場合はfile_get_contentsなどが利用できないわけです。これは、以下のブログカードにもあるように書いた事があります。

無料レンタルサーバーXdomainでfile_get_contentsが利用できない時の対処
PHPのfile_get_contentsは、allow_url_fopenと言うphp.iniの項目がoffになっているから利用できないと...

その際もcURLと言うのを利用してアクセスすればいいじゃんと結論づけたわけですが、今回は、wordpressの自前のjQueryをひとまず部分的にやめて、通常利用するjQueryをCDNで例えばGoogleから読み込みたいと言う場合の話です。

Hosted Libraries | Google Developers

これは以下のブログカードにもあるように書いたことがあります。ただしこれは、当サイトの海外サーバーであるhostingerでの利用内容で、hostingerではfile_get_contents等は利用できるのでこのままでもまぁ良いわけですが、Xdomainのようにfile_get_contentsが利用できないサーバーではちょっと意味合いが変わってきます。

海外高性能レンタルサーバーhostingerでWordpressを何とかするためにやってみたこと
はい、まずは、色々と説明からしなくてはなりません。 国内のレンタルサーバーなら特に気にすることもない応答速度。けれども、それが海外とも...

また、file_get_contentsは内部・外部のファイルの内容を取得するわけですから、そのファイルがあるかどうかのチェック、つまりはhttpコードで言う所の200であるかどうかをチェックするだけの用途にしてはどうなんだ?と言う観点から、新たに以下のチェック関数を新設してみました。

子テーマを利用することを前提で書いてあります。またSimplicityであれば、これらは子テーマのfunctions.phpに記載します

このfile_check関数にアドレスを投げることにより、cURLで外部CDN(例えばGoogleCDNのjQuery)にアクセスして、200のレスポンスコードが返ってきたら、WordpressのjQueryはCDNから。もし200以外が返ってきた場合は現在利用できない可能性もあるのでローカルのjQueryを動かすと言う処理をしてみたいと思います。

全体的には以下のようになります。

説明として、!is_adminの部分から。
ダッシュボードなど、Wordpress従来の機能を利用する部分では元々持っている自前のjQueryを利用して、それ以外の部分、つまりは一般的にサイトに訪れた人が見れるような部分は最新のjQueryを利用するというような感じになります。
そのため、元々登録されているjQueryをwp_deregister_scriptで一旦登録解除して、$urlにGoogleのjqueryのアドレスを入れておき、先ほどのfile_check関数でそのGoogleのアドレスをチェックし、成功した場合(httpコードが200の時)は、新たにGoogleのCDNからjQueryが読み込めるように、wp_register_scriptでjqueryのアドレスを登録します。

失敗した場合は、CDNからは読み込めないと判断して、予めダウンロードして子テーマのlibフォルダにjQuery.min.jsを入れておき(※ ダウンロード&保存は自動で行われないので予め手動でやっておく)、そのjQueryをwp_register_scriptで登録します。

これにより、adminページ以外は、CDNかローカルの違いはあってもどちらも指定するjQueryのバージョンのものが利用できるようになります。

add_filterの部分。ここは、登録したjQueryを読み込む際、つまり上記例で言うとheadタグにjQueryが読み込まれる時、wordpress4.1から利用できるようになったscript_loader_tagを利用して、

と言うようなことをします。これにより、jQueryは非同期で、もしくはasyncが利用できない場合はdefer(遅延)で読み込まれるようになります。

外部CDNを利用した方が、ローカルのものを利用するより高速だとか色々言われていますが、僕の場合は現在のWordpressのjQueryが1系(1.11とかなんとか)だったので、IEとか古いブラウザのサポートはどうでもいいですから2系を使いという一心で設定しています。古いブラウザをサポートしない分だけ高速ですし、セキュリティ的にもよろしいかと。

後、難点があるとすれば、バージョン決め打ちで設定しているので、jQueryの新しいバージョンが出た場合は手直しする必要があるということでしょうか。

スポンサーリンク

シェアする

フォローする