逆にsslのページだけ違うheaderを読むとかじゃだめっすかね?get_header(2)
とか?
sslで表示しているページだけページテンプレートを読ませれば可能だと思いますけど。
あとは、普通にIDなどで分岐を設ける方法ですが、ソースが汚くなるので個人的には・・・
トピック投稿者
nsny
(@nsny)
shokun0803さん、ありがとうございます!
はじめはそれで何とかなるかなと思ったのですが…
ちょっと補足が足りなかったのでつけたしておきます。
最初に書いた「サイト全体で使用しているどうしても外せないプラグイン」というのがWordPressをECサイトに変えるWelcartというプラグインです。
このプラグインによってサイト全体の画像や情報を出力しているものが多いため、このプラグインは私のサイトでは必須です。
逆に非SSLでプラグインを使いたいカテゴリーがブログというカテゴリーで、SSLを通さないのでいいので色々なプラグインを使用したいのです。
なのでSSLのページだけ特定のプラグインを規制するか、非SSLのページだけプラグインを使用するかということになるかと思うのですが…書いていて自分でもこんがらがってしまってごめんなさい。
もしくは今色々調べているのですがSSLを通さないリンクのセキュリティ警告が問題なのでプラグインから張られるjsやcssのリンクを全てhttpsに書き換えられれば、それでもいいと思います。(トピックと関係なくなってしまうのですが…)
ちなみにレンタルサーバーではSSL領域が決まっているのですがシンボリックリンクを設定してあるのでhttpsに書き換えられても大丈夫と思います。
まとまりがない変な文章ですがよろしくお願いします!
もしくは今色々調べているのですがSSLを通さないリンクのセキュリティ警告が問題なのでプラグインから張られるjsやcssのリンクを全てhttpsに書き換えられれば、それでもいいと思います。(トピックと関係なくなってしまうのですが…)
多少強引ですが、以下のようなコードを functions.php に追加するのはどうでしょう?
ssl 接続された場合 wp_head, wp_footer で出力する js や css のリンクを全て https に書き換えてくれるはずです。
# 未検証
function convert_https($buffer) {
if ( function_exists('is_ssl') && is_ssl() ) {
$pattern = '/' . preg_quote(get_site_url(null,'','http'), '/') . '(.*?\.)(css|js)/i';
$replacement = get_site_url(null,'','https') . '$1$2';
$buffer = preg_replace($pattern, $replacement, $buffer);
}
return $buffer;
}
function head_start() {
if ( function_exists('is_ssl') && is_ssl() ) {
ob_start('convert_https');
add_action('wp_head', 'head_end', 10000);
}
}
function head_end(){
ob_end_flush();
}
add_action('get_header', 'head_start');
function footer_start() {
if ( function_exists('is_ssl') && is_ssl() ) {
ob_start('convert_https');
add_action('wp_footer', 'footer_end', 10000);
}
}
function footer_end(){
ob_end_flush();
}
add_action('wp_footer', 'footer_start', 1);
トピック投稿者
nsny
(@nsny)
wokamotoさん、こんばんは!
神の様なコードありがとうございます。
頭がスパゲッティになっていたので大変助かりました(笑)
上記のコードでwp_head, wp_footerで出力する js や css のリンクを全てがhttpsで書き換えられていたことを確認いたしました。
未検証ということですがその完璧さに驚いています!
しかしながら私の見落としなのですがサイドバーの一部にプラグインのwelcart専用のテンプレート関数によって出力される画像がどうしてもhttpのままから変わりません。
この場合この画像のみをHTTPSで出力できるものでしょうか?
最初のトピックから大分外れ大変恐縮なのですがご教授いただけると幸いです。
画像もということであれば、まず上記コードの一部を書き換えてください。
function convert_https($buffer) {
if ( function_exists('is_ssl') && is_ssl() ) {
$pattern = '/' . preg_quote(get_site_url(null,'','http'), '/') . '(.*?\.)(css|js|jpe?g|png|gif|bmp)/i';
$replacement = get_site_url(null,'','https') . '$1$2';
$buffer = preg_replace($pattern, $replacement, $buffer);
}
return $buffer;
}
次に sidebar.php の先頭に以下のコードを
<?php
if ( function_exists('is_ssl') && is_ssl() ) {
ob_start('convert_https');
}
?>
最終行に以下のコードを追加してください。
<?php
ob_end_flush();
?>
これで、うまく行くと思われます。
トピック投稿者
nsny
(@nsny)
wokamotoさん、本当にありがとうございます!
上記のコードで思っていたことが実現いたしました。
httpsで接続した際に思った所すべてhttpsで書き換えてくれたのでセキュリティ警告も出なくなりました。
最初のトピックと大分ずれてしまってフォーラムの皆様に御迷惑をおかけしたように思い、本当に申し訳ございません。
こちらのトピックは解決済みに移動させていただきます。
nsry さん、解決したようでなによりです。
以下、蛇足になりますが、上記だけだとポスト本文内の画像ファイル等へのリンクが https に書き換えられません。
本文も書き換えるには、functions.php に以下のコードを追加してください。
add_filter('the_content', 'convert_https');
トピック投稿者
nsny
(@nsny)
wokamotoさん、ありがとうございます!
ポストなどはまた別なんですね。
わかりやすい解説とともにコードまでありがとうございます。
またわからないことがでてきたらフォーラムにお邪魔することもあるかと思いますがその時はまたよろしくお願いいたします!