admin_header_callback = $admin_header_callback; $this->admin_image_div_callback = $admin_image_div_callback; } /** * Set up the hooks for the Custom Header admin page. * * @since 2.1.0 */ function init() { if ( ! current_user_can('switch_themes') ) return; $page = add_theme_page(__('Header'), __('Header'), 'switch_themes', 'custom-header', array(&$this, 'admin_page')); add_action("admin_print_scripts-$page", array(&$this, 'js_includes')); add_action("admin_print_styles-$page", array(&$this, 'css_includes')); add_action("admin_head-$page", array(&$this, 'take_action'), 50); add_action("admin_head-$page", array(&$this, 'js'), 50); add_action("admin_head-$page", $this->admin_header_callback, 51); } /** * Get the current step. * * @since 2.6.0 * * @return int Current step */ function step() { if ( ! isset( $_GET['step'] ) ) return 1; $step = (int) $_GET['step']; if ( $step < 1 || 3 < $step ) $step = 1; return $step; } /** * Set up the enqueue for the JavaScript files. * * @since 2.1.0 */ function js_includes() { $step = $this->step(); if ( 1 == $step ) wp_enqueue_script('farbtastic'); elseif ( 2 == $step ) wp_enqueue_script('jcrop'); } /** * Set up the enqueue for the CSS files * * @since 2.7 */ function css_includes() { $step = $this->step(); if ( 1 == $step ) wp_enqueue_style('farbtastic'); elseif ( 2 == $step ) wp_enqueue_style('jcrop'); } /** * Execute custom header modification. * * @since 2.6.0 */ function take_action() { if ( ! current_user_can('switch_themes') ) return; if ( isset( $_POST['textcolor'] ) ) { check_admin_referer('custom-header'); if ( 'blank' == $_POST['textcolor'] ) { set_theme_mod('header_textcolor', 'blank'); } else { $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['textcolor']); if ( strlen($color) == 6 || strlen($color) == 3 ) set_theme_mod('header_textcolor', $color); } } if ( isset($_POST['resetheader']) ) { check_admin_referer('custom-header'); remove_theme_mods(); } if ( isset($_POST['default-header']) ) { check_admin_referer('custom-header'); $this->process_default_headers(); if ( isset($this->default_headers[$_POST['default-header']]) ) set_theme_mod('header_image', esc_url($this->default_headers[$_POST['default-header']]['url'])); } } /** * Process the default headers * * @since 3.0.0 */ function process_default_headers() { global $_wp_default_headers; if ( !empty($this->headers) ) return; if ( !isset($_wp_default_headers) ) return; $this->default_headers = $_wp_default_headers; foreach ( array_keys($this->default_headers) as $header ) { $this->default_headers[$header]['url'] = sprintf( $this->default_headers[$header]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() ); $this->default_headers[$header]['thumbnail_url'] = sprintf( $this->default_headers[$header]['thumbnail_url'], get_template_directory_uri(), get_stylesheet_directory_uri() ); } } /** * Display UI for selecting one of several default headers. * * @since 3.0.0 */ function show_default_header_selector() { echo ''; $headers = array_keys($this->default_headers); $table = array(); $rows = ceil(count($headers) / 3); for ( $row = 1; $row <= $rows; $row++ ) { for ( $col = 1; $col <= 3; $col++ ) { $table[$row][$col] = array_shift($headers); } } foreach ( $table as $row => $cols ) { echo ''; foreach ( $cols as $col => $header_key ) { if ( !$header_key ) continue; $class = array('available-header'); if ( $row == 1 ) $class[] = 'top'; if ( $col == 1 ) $class[] = 'left'; if ( $row == $rows ) $class[] = 'bottom'; if ( $col == 3 ) $class[] = 'right'; if ( !isset($this->headers[$header_key])) echo ''; } echo ''; } echo '
'; $header_thumbnail = $this->default_headers[$header_key]['thumbnail_url']; $header_url = $this->default_headers[$header_key]['url']; $header_desc = $this->default_headers[$header_key]['description']; echo ''; echo '
'; } /** * Execute Javascript depending on step. * * @since 2.1.0 */ function js() { $step = $this->step(); if ( 1 == $step ) $this->js_1(); elseif ( 2 == $step ) $this->js_2(); } /** * Display Javascript based on Step 1. * * @since 2.6.0 */ function js_1() { ?> process_default_headers(); ?>

Visit your site to see how it looks.' ), home_url( '/' ) ); ?>

default_headers) ) : ?>

admin_image_div_callback ) { call_user_func($this->admin_image_div_callback); } else { ?>

' . __('Choose one of these cool headers, or upload your own image below.') . '

'; echo '
'; wp_nonce_field('custom-header'); $this->show_default_header_selector(); echo ''; echo '
'; echo ''; endif; ?>

%1$d x %2$d pixels will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?>


default_headers) ) { ?>

show_default_header_selector(); ?>

false); $file = wp_handle_upload($_FILES['import'], $overrides); if ( isset($file['error']) ) die( $file['error'] ); $url = $file['url']; $type = $file['type']; $file = $file['file']; $filename = basename($file); // Construct the object array $object = array( 'post_title' => $filename, 'post_content' => $url, 'post_mime_type' => $type, 'guid' => $url); // Save the data $id = wp_insert_attachment($object, $file); list($width, $height, $type, $attr) = getimagesize( $file ); if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) { // Add the meta-data wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); set_theme_mod('header_image', esc_url($url)); do_action('wp_create_file_in_uploads', $file, $id); // For replication return $this->finished(); } elseif ( $width > HEADER_IMAGE_WIDTH ) { $oitar = $width / HEADER_IMAGE_WIDTH; $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); if ( is_wp_error( $image ) ) wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication $url = str_replace(basename($url), basename($image), $url); $width = $width / $oitar; $height = $height / $oitar; } else { $oitar = 1; } ?>

1 ) { $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; $_POST['width'] = $_POST['width'] * $_POST['oitar']; $_POST['height'] = $_POST['height'] * $_POST['oitar']; } $original = get_attached_file( $_POST['attachment_id'] ); $cropped = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); if ( is_wp_error( $cropped ) ) wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); $cropped = apply_filters('wp_create_file_in_uploads', $cropped, $_POST['attachment_id']); // For replication $parent = get_post($_POST['attachment_id']); $parent_url = $parent->guid; $url = str_replace(basename($parent_url), basename($cropped), $parent_url); // Construct the object array $object = array( 'ID' => $_POST['attachment_id'], 'post_title' => basename($cropped), 'post_content' => $url, 'post_mime_type' => 'image/jpeg', 'guid' => $url ); // Update the attachment wp_insert_attachment($object, $cropped); wp_update_attachment_metadata( $_POST['attachment_id'], wp_generate_attachment_metadata( $_POST['attachment_id'], $cropped ) ); set_theme_mod('header_image', $url); // cleanup $medium = str_replace(basename($original), 'midsize-'.basename($original), $original); @unlink( apply_filters( 'wp_delete_file', $medium ) ); @unlink( apply_filters( 'wp_delete_file', $original ) ); return $this->finished(); } /** * Display last step of custom header image page. * * @since 2.1.0 */ function finished() { $_GET['updated'] = 1; $this->step_1(); } /** * Display the page based on the current step. * * @since 2.1.0 */ function admin_page() { if ( ! current_user_can('switch_themes') ) wp_die(__('You do not have permission to customize headers.')); $step = $this->step(); if ( 1 == $step ) $this->step_1(); elseif ( 2 == $step ) $this->step_2(); elseif ( 3 == $step ) $this->step_3(); } } ?>