SSL : Comment rendre les images de personnalisation Protocol Relatives dans WordPress ?

Publié par Jean-Michel le

J’essaie d’éliminer le « contenu mixte » sur mon site Web et je l’ai fait avec chaque zone du site sauf une.

Toute image téléchargée via le personnalisateur de thème n’est pas relative au protocole ni https, toutes les images téléchargées via le personnalisateur montent « http:// ».

The Customizer uses the Media Gallery uploader but doesn’t seem to act in the same manner. If I upload an image to the media gallery (no customizer), place it into a page, WP knows whether or not to switch between http and https, although, when the same is attempted via the theme customizer function:

$wp_customize->add_setting('slide_img_upload_one');
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'slide_img_upload_one', array(
    'label'    => __('Upload first image:', 'example_theme'),
    'section' => 'carousel_slide_section',
    'settings' => 'slide_img_upload_one',
    'description' => 'Upload your first slider image here.'
)));

I can not get the WP_Customize_Image_Control(); to output either « https » or a (best case scenario) protocol relative // url to the image for SSL compliance.

Some things to note. I’m not going to force SSL on my website so in Settings -> General; I’m not changing the url away from the http protocol.

I am also not looking for a way to use .htaccess to force this action.

En bout de ligne, il DOIT y avoir un moyen pour que les images téléchargées via le personnalisateur de thème soient relatives au protocole, j’ai besoin d’aide pour comprendre celui-ci cependant. Je suis actuellement sous WP 4.6 (oui je sais je suis un peu en retard).

Espérons que quelqu’un d’autre a rencontré cela, car des heures de R&D se sont révélées inutiles pour essayer de traiter quelque chose d’aussi spécifique que les fonctions de personnalisation de thème WordPress.

Merci d’avance pour toute aide, idées, brainstorming… toutes les idées sont les bienvenues !

J’appelle la fonction de personnalisation sur la page en utilisant:

<a href="<?php echo esc_url(get_theme_mod('slide_one_link')); ?>"><img src="<?php echo esc_url( get_theme_mod( 'slide_img_upload_one' ) ); ?>" alt="<?php echo get_theme_mod( 'slide_title_1' ); ?>" /></a>

Pour info : j’ai essayé la solution ici en vain : tentative échouée

Solution n°1 trouvée

J’avais besoin d’une petite vérification supplémentaire.

/**
 *
 * @param Checks for ssl returns https if needed
 * @param int $p
 * @return filter
 */
function get_theme_mod_ssl($mod_name){
    if (is_ssl()) {
      return str_replace(array('http:', 'https:'), '', get_theme_mod($mod_name));
    }else{
      return get_theme_mod($mod_name);
    }
}

Solution n°2 trouvée

Je pense que la solution la plus simple serait de créer votre propre fonction :

function get_theme_mod_img($mod_name){
     return str_replace(array('http:', 'https:'), '', get_theme_mod($mod_name));
}

alors utilisez-le simplement:

<a href="<?php echo esc_url(get_theme_mod('slide_one_link')); ?>"><img src="<?php echo esc_url( get_theme_mod_img( 'slide_img_upload_one' ) ); ?>" alt="<?php echo get_theme_mod( 'slide_title_1' ); ?>" /></a>

il existe une autre solution qui implique des filtres comme vous pouvez le voir ici et ici les filtres sont appliqués comme ceci :

return apply_filters( "theme_mod_{$name}", $mods[$name] );

$mods[ $name ] = apply_filters( "pre_set_theme_mod_{$name}", $value, $old_value );

mais vous devrez ajouter un filtre pour chaque paramètre d’image que vous avez :

add_filter('theme_mod_my-setting-image-name', 'function_that_strips_protocol');

ceci non testé, je pense que cela impliquera également une logique de prévisualisation du personnalisateur.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *