web-dev-qa-db-fra.com

Lien de page HTTPS dans le menu

Ok, j'ai donc un site wordpress avec beaucoup de pages et de menus que j'ai définis dans la section apparence/menus de wordpress.

Une de mes pages contient un petit formulaire de paiement sur lequel j'aimerais faire un lien avec https://blahlbah.com/thepage .. et pour toutes les autres pages, j'aimerais qu'ils restent en http.

Même si je mets un lien absolu vers la page https, toutes les autres pages qui sont des liens relatifs deviennent https également après la visite de cette page.

Y at-il un plugin ou un hack ou quelque chose pour spécifier cette page comme https?

Cordialement, John.

2
John Hunt

Vous devrez convertir les liens relatifs en liens absolus. Vous pouvez le faire dans le filtre wp_nav_menu_objects , qui récupère tous les éléments de menu. Editez simplement la propriété url de chaque élément.

Une autre option consisterait à étendre le Walker_Nav_Menu par défaut avec un autre qui remplace start_el() afin de pouvoir modifier le $item passé avant de le transmettre au parent start_el().

Ce sont des liens relatifs que vous avez ajoutés vous-même? Si vous ajoutez un lien vers une page WordPress ou une publication via l'éditeur de menu, il devrait être absolu par défaut.

3
Jan Fabry

J'aime la première idée de Jan - filtrer wp_nav_menu_options. Pourrait être une bonne solution complète, et pourrait être rapidement transformé en un plugin. Peut-être même même ajouter une case à cocher à l'écran d'édition disant "servir cette page sur SSL" ou quelque chose?

Dans le passé, j'ai utilisé une solution de redirection hacky avec htaccess. Cela ressemble à quelque chose comme:

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

Cela fonctionne bien (et est très facile à mettre en œuvre) si vous ne vous inquiétez que d'une page, mais devient très pénible si vous avez un tas d'URI HTTPS, ou si vous n'êtes pas doué pour résoudre les règles de réécriture :)

3
MathSmath

Voici un code pour forcer SSL sur les pages non-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();
}

Fondamentalement, vous pouvez utiliser ce code pour forcer SSL sur la ou les pages souhaitées et inversement pour supprimer SSL pour toutes les autres pages. Dans ce cas, vous pouvez spécifier le deuxième paramètre de wp_redirect pour activer une redirection 301 plutôt que 302. Vous souhaitez également vous assurer que tous les liens pointent vers la version https.

1
Micah Wood