it-swarm.com.de

SSL: Wie erstelle ich ein Protokoll für Customizer-Bilder in WordPress?

Ich versuche, "gemischte Inhalte" auf meiner Website zu entfernen, und habe dies in allen Bereichen der Website bis auf einen getan.

Über den Theme Customizer hochgeladene Bilder sind weder protokollbezogen noch mit https verknüpft. Alle über den Customizer hochgeladenen Bilder werden mit "http: //" angezeigt.

Der Customizer verwendet den Media Gallery-Uploader, scheint jedoch nicht auf die gleiche Weise zu verfahren. Wenn ich ein Bild in die Mediengalerie hochlade (kein Customizer), platziere ich es auf einer Seite, WP weiß, ob zwischen http und https gewechselt werden soll, obwohl dies über die Theme-Customizer-Funktion versucht wird :

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

Ich kann WP_Customize_Image_Control(); nicht dazu bringen, entweder "https" oder eine (Best-Case-Szenario) -Protokoll-relative //-URL zum Image für die SSL-Kompatibilität auszugeben.

Einige Dinge zu beachten. Ich werde SSL auf meiner Website nicht erzwingen, also in Einstellungen -> Allgemein; Ich ändere die URL nicht vom http-Protokoll weg.

Ich bin auch nicht auf der Suche nach einer Möglichkeit, .htaccess zu verwenden, um diese Aktion zu erzwingen.

Unterm Strich MUSS es eine Möglichkeit geben, dass über den Theme-Customizer hochgeladene Bilder protokollrelativ sind. Ich brauche jedoch Hilfe, um dies herauszufinden. Ich lasse gerade WP 4.6 laufen (ja, ich weiß, dass ich etwas zurück bin).

Hoffentlich ist dies jemand anderem begegnet, da sich stundenlange Forschungs- und Entwicklungsarbeit als nutzlos erwiesen hat, um etwas so Spezifisches wie die WordPress Theme Customizer-Funktionen anzusprechen.

Vielen Dank im Voraus für jede Hilfe, Ideen, Brainstorming ... alle Ideen sind willkommen!

Ich rufe die Customizer-Funktion auf der Seite auf mit:

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

Zu Ihrer Information: Ich habe die Lösung hier ohne Erfolg ausprobiert: Fehlgeschlagener Versuch

2
ben.kaminski

Ich denke, die einfachere Lösung wäre, Ihre eigene Funktion zu erstellen:

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

dann benutze es einfach:

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

es gibt eine andere Lösung, die Filter beinhaltet, wie Sie sehen können. hier und hier Filter werden folgendermaßen angewendet:

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

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

sie müssten jedoch für jede Bildeinstellung einen Filter hinzufügen:

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

ich denke, dies wird auch die Vorschau-Logik des Customizers beinhalten.

2
David Lee

Ich musste ein bisschen nachsehen.

/**
 *
 * @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