今回は、カスタマイザーで切り抜き(クロップ)に対応した画像アップロードの実装方法を紹介します。
「カスタマイズ」→「ヘッダー画像」には、切り抜きができる画像アップローダーが最初からありますね。
これと同じ物を追加します。
画像の比率を固定してアップロードできるので、何かと便利な機能です。
カスタマイザーに画像アップロード機能を追加
functions.phpに以下のコードを追加してください。
<?php
/**
* サニタイズ
*/
function sanitize_cropped_image ( $id, $setting ) {
return ( is_int( $id ) ) ? $id : $setting->default;
}
/**
* カスタマイザーに追加する処理
*/
if( !function_exists( 'theme_customize_register' ) ) {
function theme_customize_register( $wp_customize ) {
/**
* ヘッダー画像の設定
*/
$wp_customize->add_setting( 'setting_image', array(
'sanitize_callback' => 'sanitize_cropped_image',
'type' => 'theme_mod',
) );
$wp_customize->add_control( new WP_Customize_Cropped_Image_Control($wp_customize, 'setting_image', array(
'label' => 'ここにタイトル',
'description' => '2400x750でピッタリ表示されます。',
'section' => 'header_image', //任意のセクションを記述してください。
'settings' => 'setting_image',
'width' => 2400, //任意の数値
'height' => 750, //任意の数値
'flex_width' => false,
'flex_height'=> false,
) ) );
}
add_action( 'customize_register', 'theme_customize_register' );
}
これでカスタマイザーに切り抜きできる画像アップローダーが実装できます。
サニタイズというのは不正な値が設定されていないかデータを検証することです。
これをしないとテーマチェッカーでエラーが出るので必ずサニタイズは行いましょう。
画像をアップロードすると画像の投稿IDが整数で保存されるので、値が整数型なのかを関数で検証しています。
サニタイズについては以下の記事を参考にしてください。
アップロードされた画像の取得
以下の方法でアップロードされた画像のURLを取得することができます。
$image_mod = get_theme_mod( 'setting_image' );
$image_data = wp_get_attachment_image_src( $image_mod, '' );
$image_url = $image_data[0]; //urlの取得
get_theme_mod( 'setting_image' );
で取得できるのは画像の投稿IDで、型は整数型(int)です。
wp_get_attachment_image_src( $image_mod, '' );
の第二引数を空にすることで、クロップされたサイズの画像情報を取得することができます。
縦横比を固定して画像をアップロードできるようにしたい場合に利用してください。