HTTPS-Seitenlink im Menü

Ok, ich habe eine WordPress-Site mit vielen Seiten und Menüs, die ich im Abschnitt “Aussehen / Menüs” von WordPress definiert habe.

Eine meiner Seiten hat ein kleines Zahlungsformular, auf das ich mit https://blahlbah.com/thepage verlinken möchte und für alle anderen Seiten möchte ich, dass sie als http bleiben.

Selbst wenn ich einen absoluten Link auf die https-Seite setze, werden alle anderen Seiten, die relative Links sind, auch nach dem Besuch dieser Seite zu https.

Gibt es ein Plugin oder einen Hack oder etwas, um nur diese eine Seite als https anzugeben?

Prost, John.

Solutions Collecting From Web of "HTTPS-Seitenlink im Menü"

Sie müssen die relativen Links zu absoluten Links konvertieren. Sie können dies im wp_nav_menu_objects Filter tun, der alle wp_nav_menu_objects erhält. Bearbeiten Sie einfach die url Eigenschaft jedes Elements.

Eine andere Option wäre, das Standard- Walker_Nav_Menu um eins zu erweitern, das start_el() überschreibt, so dass Sie das übergebene $item start_el() ändern können, bevor Sie es an das übergeordnete start_el() .

Dies sind relative Links, die du selbst hinzugefügt hast? Wenn Sie über den Menü-Editor einen Link zu einer WordPress-Seite oder Post hinzufügen, sollte dieser standardmäßig absolut sein.

Ich mag Jan’s erste Idee – Filterung wp_nav_menu_options. Könnte eine gute Allround-Lösung sein, und könnte schnell in ein Plugin verwandelt werden. Fügen Sie dem Bearbeitungsbildschirm möglicherweise sogar ein Kontrollkästchen hinzu, das besagt, dass “diese Seite über SSL bereitgestellt wird” oder so?

In der Vergangenheit habe ich eine Hacky Redirect Lösung mit htaccess verwendet. Es sieht ungefähr so ​​aus:

 # 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] 

Das funktioniert gut (und ist sehr einfach zu implementieren), wenn Sie nur um eine Seite besorgt sind, aber wenn Sie eine Menge HTTPS-URIs haben, oder wenn Sie nicht gut darin sind, Rewrite-Regeln zu korrigieren, wird es ein echter Schmerz 🙂

Hier ist ein Code, um SSL auf Nicht-SSL-Seiten zu erzwingen:

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

Im Grunde können Sie diesen Code verwenden, um SSL auf der gewünschten Seite zu erzwingen, und das Gegenteil tun, um SSL für alle anderen Seiten zu entfernen. Sie können in diesem Fall den zweiten Parameter für wp_redirect angeben, um eine 301-Weiterleitung statt einer 302 zu aktivieren. Sie sollten auch so gut wie möglich sicherstellen, dass alle Verbindungen auf die https-Version verweisen.