Twenty Eleven Theme Extensions が SSL化 でエラー

Pocket

当ブログでは、 WordPress の Twenty Eleven テーマを使っている。

このテーマでば、なぜかシングルページの表示や個別記事のページでサイドバーが表示されない。

当ブログのアクセスのほとんどは、 検索からの個別記事のページへの流入なので、個別記事へのサイドバーの表示は行っておきたいところだ。

それを実現するのが、 Twenty Eleven Theme Extensions プラグインだ。

とても古いプラグインだが、 Twenty Eleven テーマの最新版でも問題なく動いている。

ところが、 このプラグインを有効にしたところ、 Google の Search Console で怒られるようになってしまった。

調べてみたところ、 [cci]/plugins/twenty-eleven-theme-extensions/moztheme2011.css[/cci] の配信が [cci]This request has been blocked; the content must be served over HTTPS.[/cci] でエラーになってしまっているようだ。
このブログは SSL化 され https:// で配信されているのに、プラグインの CSS が http:// で配信されているためだ。

これを修正してみよう。

http で配信されてしまう原因

プラグインのソースを覗いてみよう。

[cci]/plugins/twenty-eleven-theme-extensions/moztheme2011.php[/cci] をみると、 [cci]MozBaseClass_MozTheme2011::registerStyles($cssfiles)[/cci] で css が指定されていることがわかる。
twenty-eleven-theme-extensions/trunk/moztheme2011.php @427449

	    function __construct() {
	        parent::__construct();
	        $this->registerStyles('moztheme2011');
	        $this->registerFilter('body_class', 'filterSingular', 100);
	       
	        if ($this->isOptionSet('enable-custom-colors') || $this->isOptionSet('embed-custom-css')) { 
	            $this->registerAction('wp_head', 'embedStyles');
	        }

今度はその [cci]registerStyles[/cci] の実装が書かれている [cci]/plugins/twenty-eleven-theme-extensions/moztools/mozbase.php[/cci] をみると、 [cci]wp_register_style[/cci] によってヘッダに登録されているスタイルシートの URL は [cci]MozBaseClass_MozTheme2011::pluginDir[/cci] がベースになっていることがわかる。 更にその定義を辿っていくと、 [cci]WP_PLUGIN_URL[/cci] 定数から作成されていることがわかるだろう。

twenty-eleven-theme-extensions/trunk/moztools/mozbase.php @427449

	    protected function __construct() {
	        $this->ajaxRequest = defined('DOING_AJAX');
	        $path = strtr(dirname(__FILE__), '\\', '/');  // Must convert for Windows platform
	        $path = substr($path, 0, strrpos($path, '/moztools')); // Must remove moztools subdirectory
	        $this->pluginDir = $path;
	        $dir = substr($path, strrpos($path, '/') + 1);
	        $this->pluginUrl = WP_PLUGIN_URL.'/'.$dir;
	        $this->pluginFile = $dir.'/'.$dir.'.php';
	    }
	
	    /**
	     * Register one or more CSS stylesheet files for the plugin
	     *
	     * @param string/array $cssfiles single or multiple css files
	     */
	    protected function registerStyles($cssfiles) {
	        if (!empty($cssfiles)) {
	            $cssfiles = is_array($cssfiles) ? $cssfiles : array($cssfiles);
	            foreach ($cssfiles as $file) {
	                wp_register_style($file, $this->pluginUrl.'/'.$file.'.css');
	                wp_enqueue_style($file);
	            }
	        }
	    }

[cci]WP_PLUGIN_URL[/cci] から得られる URL が、常に http:// で始まるものであるというのが、問題の原因だ。

そもそも WordPress では、内部定数を直接使うことは推奨されておらず、 このような状況では [cci]plugins_url()[/cci] 関数を使うべきだ。

プラグインの修正

上記の [cci]/mozbase.php[/cci] を以下のように書き換えてしまえば、 SSL化 した環境でもエラーなく css が配信されるようになる。

        $this->pluginUrl = plugins_url().'/'.$dir;

プラグインの最終更新が 2011年 であるため、 不具合報告したところでプラグイン本体を修正してもらえる見込みはまずないだろう。

このため、プラグインをインストール後に、 「プラグインの編集」 機能などを使って、プラグインディレクトリ内の [cci]/plugins/twenty-eleven-theme-extensions/moztools/mozbase.php[/cci] のファイルを直接書き換えてしまうのが手っ取り早い対策だ。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください