Twenty Eleven Theme Extensions が SSL化 でエラー

Pocket

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

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

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

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

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

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

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

これを修正してみよう。

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

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

/plugins/twenty-eleven-theme-extensions/moztheme2011.php をみると、 MozBaseClass_MozTheme2011::registerStyles($cssfiles) で 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');
            }

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

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

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

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

プラグインの修正

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

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

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

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

コメントを残す

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

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