it-swarm.com.de

Link zur HTTPS-Seite im Menü

Ok, ich habe eine WordPress-Site mit vielen Seiten und Menüs, die ich im Bereich Darstellung/Menüs von WordPress definiert habe.

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

Selbst wenn ich einen absoluten Link zur 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.

2
John Hunt

Sie müssen die relativen Links in absolute Links konvertieren. Sie können dies in dem wp_nav_menu_objects-Filter tun, der alle Menüpunkte abruft. Bearbeiten Sie einfach die Eigenschaft url jedes Elements.

Eine andere Möglichkeit wäre, den Standard-Walker_Nav_Menu mit einem Code zu erweitern, der start_el() überschreibt, sodass Sie den übergebenen $item dort ändern können, bevor Sie ihn an den übergeordneten start_el() übergeben.

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

3
Jan Fabry

Ich mag Jan's erste Idee - das Filtern von wp_nav_menu_options. Könnte eine gute Allround-Lösung sein und könnte schnell in ein Plugin verwandelt werden. Vielleicht fügen Sie dem Bearbeitungsbildschirm sogar ein Kontrollkästchen mit der Aufschrift "Diese Seite über SSL bereitstellen" hinzu 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]

Dies funktioniert gut (und ist sehr einfach zu implementieren), wenn Sie sich nur um eine Seite Sorgen machen, aber es wird ein echtes Problem, wenn Sie eine Reihe von HTTPS-URIs haben oder wenn Sie nicht gut in der Fehlerbehebung von Umschreiberegeln sind :)

3
MathSmath

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

Grundsätzlich können Sie diesen Code verwenden, um ssl auf Ihre gewünschte (n) Seite (n) zu zwingen und umgekehrt, um ssl für alle anderen Seiten zu entfernen. In diesem Fall möchten Sie möglicherweise den zweiten Parameter für wp_redirect angeben, um eine 301-Umleitung anstelle einer 302-Umleitung zu aktivieren. Sie möchten außerdem sicherstellen, dass alle Links so gut wie möglich auf die https-Version verweisen.

1
Micah Wood