さて、それで私は私がwordpressの外観/メニューのセクションで定義したたくさんのページとメニューがあるwordpressサイトを持っています。
私のページの1つには、 https://blahlbah.com/thepage を使用してリンクしたい小さな支払いフォームがあります。他のすべてのページでは、httpのままにしておきます。
Httpsページに絶対リンクを設定しても、相対リンクである他のすべてのページは、そのページにアクセスした後もhttpsになります。
その1ページをhttpsとして指定するためのプラグイン、ハック、または何かがありますか?
乾杯、ジョン。
相対リンクを絶対リンクに変換する必要があります。これは wp_nav_menu_objects
フィルタ で実行できます。これはすべてのメニュー項目を取得します。各項目のurl
プロパティを編集するだけです。
別の選択肢は、デフォルトのWalker_Nav_Menu
をstart_el()
をオーバーライドするもので拡張することです。そのため、親のstart_el()
に渡す前に、渡された$item
を変更できます。
これらはあなたがあなた自身を追加した相対的なリンクですか?あなたがメニューエディタを介してWordPressページまたは投稿へのリンクを追加するならば、それはデフォルトで絶対であるべきです。
Janの最初のアイデア、wp_nav_menu_optionsのフィルタリングが好きです。万能な解決策になるかもしれませんし、すぐにプラグインに変わるかもしれません。編集画面に「SSLでこのページを配信する」などのチェックボックスを追加することもできますか。
過去に、私はhtaccessでハックなリダイレクトソリューションを使いました。それは次のようになります。
# Force a given page to https
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /your-ssl-page/$
RewriteRule ^(.*)$ https://www.example.com/your-ssl-page/ [R=301,L]
# Force everything BUT the given page to regular http
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/your-ssl-page/$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
1ページしか気にしないのであればこれはうまく機能します(そして実装が非常に簡単です)が、たくさんのHTTPS URIがある場合や、書き換え規則のトラブルシューティングが苦手な場合は、非常に面倒です。
これは、非SSLページにSSLを強制するためのコードです。
// Force SSL
if( !is_ssl() ){
if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']));
exit();
} else {
wp_redirect('https://' . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI']);
exit();
}
基本的に、このコードを使用して目的のページに強制的にSSLを適用し、他のすべてのページのSSLを削除するにはその逆を実行します。この場合、302ではなく301リダイレクトを有効にするために、wp_redirectの2番目のパラメータを指定することをお勧めします。また、すべてのリンクがhttpsバージョンを指すようにすることをお勧めします。