web-dev-qa-db-ja.com

SSL:カスタマイザ画像をWordPressでプロトコル相対にするにはどうすればいいですか?

私は私のウェブサイト上の「混合コンテンツ」を排除しようとしていて、1つを除いてサイトのあらゆる分野でそうしました。

テーマカスタマイザを介してアップロードされた画像はプロトコル関連でもhttpsでもなく、カスタマイザを介してアップロードされたすべての画像は "http://"になります。

カスタマイザはメディアギャラリーアップローダを使用しますが、同じようには動作しないようです。画像をメディアギャラリー(カスタマイザなし)にアップロードする場合は、ページに配置してください。WPは、httpとhttpsを切り替えるかどうかを知っています。 :

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

私はWP_Customize_Image_Control();に "https"またはSSL準拠のための(相対的な最良のシナリオ)プロトコル相対// urlを出力させることができません。

注意すべき点がいくつかあります。私は自分のウェブサイトにSSLを強制するつもりはないので、[設定] - > [一般]を選択します。 URLをhttpプロトコルから変更していません。

私はまた、このアクションを強制するために.htaccessを使用する方法を探していません。

つまり、テーマカスタマイザを介してアップロードされた画像がプロトコルに関連したものになるような方法があるに違いありません。私は現在WP 4.6を実行しています(はい、私は少し遅れています)。

何時間もの研究開発がWordPressテーマカスタマイザ機能のように何か特別なことに取り組もうとしても役に立たないことが証明されたので、他の誰かがこれに遭遇したことを願っています。

どんな助け、アイデア、ブレーンストーミングも前もってありがとう...すべてのアイデアは歓迎されています!

私は使用してページ上のカスタマイザ機能で呼び出しています:

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

参考:私は無駄にここで解決策を試してみました: 失敗した試み

2
ben.kaminski

私はもっ​​と簡単な解決策はあなた自身の関数を作ることだろうと思います:

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

それを使うだけです:

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

herehere を見ればわかるように、フィルタを含む別の解決策があります。

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

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

ただし、各画像設定に対してフィルタを追加する必要があります。

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

これはテストされていませんが、カスタマイザのプレビューロジックも含まれると思います。

1
David Lee

私は少し余分なチェックが必要でした。

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