web-dev-qa-db-fra.com

SSL: Comment créer des images de personnalisation relatives au protocole relatif à WordPress?

J'essaie d'éliminer le "contenu mixte" sur mon site Web et je l'ai fait avec tous les domaines du site, sauf un.

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 sont classées "http: //".

Le personnalisateur utilise le programme de téléchargement Media Gallery mais ne semble pas agir de la même manière. Si je télécharge une image sur la médiathèque (sans personnalisateur), placez-la dans une page. WP sait s'il doit ou non basculer entre http et https, bien que, lorsque la même chose soit tentée via la fonction de personnalisation du thème. :

$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.'
)));

Je ne parviens pas à obtenir la fonction WP_Customize_Image_Control(); en sortie soit "https", soit un URL relatif au protocole // relatif (dans le meilleur des cas, à la conformité SSL).

Quelques choses à noter. Je ne vais pas forcer SSL sur mon site Web, donc dans Paramètres -> Général; Je ne change pas l'URL du protocole http.

Je ne cherche pas non plus un moyen d'utiliser .htaccess pour forcer cette 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. Je suis en train de lancer WP 4.6 (oui, je sais que je suis un peu en retard).

Espérons que quelqu'un d'autre a rencontré ce problème alors que des heures de R & D se sont avérées inutiles pour tenter de résoudre un problème aussi spécifique que celui du personnalisateur de thème WordPress.

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

J'appelle dans la fonction de personnalisation de 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>

FYI: J'ai essayé la solution ici en vain: Échec de la tentative

2
ben.kaminski

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

puis utilisez-le:

<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 suit:

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');

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

2
David Lee

J'avais besoin d'un peu de 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);
    }
}
1
user1503606