53
53
function __construct($admin_header_callback = '', $admin_image_div_callback = '') {
54
54
$this->admin_header_callback = $admin_header_callback;
55
55
$this->admin_image_div_callback = $admin_image_div_callback;
57
add_action( 'admin_menu', array( $this, 'init' ) );
58
add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) );
70
73
add_action("load-$page", array(&$this, 'take_action'), 49);
71
74
add_action("load-$page", array(&$this, 'handle_upload'), 49);
76
if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) {
77
add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 );
78
add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) );
79
add_filter( 'media_upload_mime_type_links', '__return_empty_array' );
73
82
if ( $this->admin_header_callback )
74
83
add_action("admin_head-$page", $this->admin_header_callback, 51);
200
212
if ( get_background_image() ) {
201
213
// background-image URL must be single quote, see below
202
$background_styles .= ' background-image: url(\'' . get_theme_mod('background_image_thumb', '') . '\');'
214
$background_styles .= ' background-image: url(\'' . set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ) . '\');'
203
215
. ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';'
204
216
. ' background-position: top ' . get_theme_mod('background_position_x', 'left');
207
219
<div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?>
208
220
<?php if ( get_background_image() ) { ?>
209
<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /><br />
210
<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" />
221
<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" /><br />
222
<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" />
229
<?php if ( defined( 'BACKGROUND_IMAGE' ) ) : // Show only if a default background image exists ?>
241
<?php $default_image = get_theme_support( 'custom-background', 'default-image' ); ?>
242
<?php if ( $default_image && get_background_image() != $default_image ) : ?>
230
243
<tr valign="top">
231
244
<th scope="row"><?php _e('Restore Original Image'); ?></th>
242
255
<tr valign="top">
243
<th scope="row"><?php _e('Upload Image'); ?></th>
256
<th scope="row"><?php _e('Select Image'); ?></th>
244
257
<td><form enctype="multipart/form-data" id="upload-form" method="post" action="">
245
<label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" />
246
<input type="hidden" name="action" value="save" />
247
<?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?>
248
<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
259
<label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br />
260
<input type="file" id="upload" name="import" />
261
<input type="hidden" name="action" value="save" />
262
<?php wp_nonce_field( 'custom-background-upload', '_wpnonce-custom-background-upload' ); ?>
263
<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
266
$image_library_url = get_upload_iframe_src( 'image', null, 'library' );
267
$image_library_url = remove_query_arg( 'TB_iframe', $image_library_url );
268
$image_library_url = add_query_arg( array( 'context' => 'custom-background', 'TB_iframe' => 1 ), $image_library_url );
271
<label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br />
272
<a id="choose-from-library-link" class="button thickbox" href="<?php echo esc_url( $image_library_url ); ?>"><?php _e( 'Choose Image' ); ?></a>
302
327
<tr valign="top">
303
328
<th scope="row"><?php _e( 'Background Color' ); ?></th>
304
329
<td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Color' ); ?></span></legend>
305
<?php $show_clear = get_background_color() ? '' : ' style="display:none"'; ?>
330
<?php $show_clear = get_theme_mod('background_color') ? '' : ' style="display:none"'; ?>
306
331
<input type="text" name="background-color" id="background-color" value="#<?php echo esc_attr(get_background_color()) ?>" />
307
<a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php _e( 'Clear' ); ?></a>)</span>
332
<a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php current_theme_supports( 'custom-background', 'default-color' ) ? _e( 'Default' ) : _e( 'Clear' ); ?></a>)</span>
333
<input type="hidden" id="defaultcolor" value="<?php if ( current_theme_supports( 'custom-background', 'default-color' ) ) echo '#' . esc_attr( get_theme_support( 'custom-background', 'default-color' ) ); ?>" />
308
334
<div id="colorPickerDiv" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div>
357
383
wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
358
384
update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
360
set_theme_mod('background_image', esc_url($url));
386
set_theme_mod('background_image', esc_url_raw($url));
362
388
$thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' );
363
set_theme_mod('background_image_thumb', esc_url( $thumbnail[0] ) );
389
set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) );
365
391
do_action('wp_create_file_in_uploads', $file, $id); // For replication
366
392
$this->updated = true;
396
* Replace default attachment actions with "Set as background" link.
400
function attachment_fields_to_edit( $form_fields, $post ) {
401
$form_fields = array( 'image-size' => $form_fields['image-size'] );
402
$form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a data-attachment-id="' . $post->ID . '" class="wp-set-background">' . __( 'Set as background' ) . '</a></td></tr>' );
403
$form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-background' );
409
* Leave only "Media Library" tab in the uploader window.
413
function filter_upload_tabs() {
414
return array( 'library' => __('Media Library') );
417
public function wp_set_background_image() {
418
if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit;
419
$attachment_id = absint($_POST['attachment_id']);
420
$sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) ));
422
if ( in_array( $_POST['size'], $sizes ) )
423
$size = esc_attr( $_POST['size'] );
425
update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
426
$url = wp_get_attachment_image_src( $attachment_id, $size );
427
$thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' );
428
set_theme_mod( 'background_image', esc_url_raw( $url[0] ) );
429
set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) );