' . __( 'The current theme does not support uploading a custom header image.' ) . '
',
+ 403
+ );
+ }
if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
$attachment_id = absint( $_GET['file'] );
$file = get_attached_file( $attachment_id, true );
- $url = wp_get_attachment_image_src( $attachment_id, 'full');
+ $url = wp_get_attachment_image_src( $attachment_id, 'full' );
$url = $url[0];
} elseif ( isset( $_POST ) ) {
- extract($this->step_2_manage_upload());
+ $data = $this->step_2_manage_upload();
+ $attachment_id = $data['attachment_id'];
+ $file = $data['file'];
+ $url = $data['url'];
}
if ( file_exists( $file ) ) {
@@ -733,14 +798,14 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
?>
-
+
@@ -772,11 +837,11 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
*
* @since 3.4.0
*/
- function step_2_manage_upload() {
+ public function step_2_manage_upload() {
$overrides = array('test_form' => false);
$uploaded_file = $_FILES['import'];
- $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false );
+ $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'] );
if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
@@ -808,15 +873,27 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Display third step of custom header image page.
*
* @since 2.1.0
+ * @since 4.4.0 Switched to using wp_get_attachment_url() instead of the guid
+ * for retrieving the header image URL.
*/
- function step_3() {
+ public function step_3() {
check_admin_referer( 'custom-header-crop-image' );
- if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
- wp_die( __( 'Cheatin’ uh?' ) );
+ if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+ wp_die(
+ '
' . __( 'Cheatin’ uh?' ) . '
' .
+ '
' . __( 'The current theme does not support uploading a custom header image.' ) . '
',
+ 403
+ );
+ }
- if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) )
- wp_die( __( 'Cheatin’ uh?' ) );
+ if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) {
+ wp_die(
+ '
' . __( 'Cheatin’ uh?' ) . '
' .
+ '
' . __( 'The current theme does not support a flexible sized header image.' ) . '
',
+ 403
+ );
+ }
if ( $_POST['oitar'] > 1 ) {
$_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
@@ -856,25 +933,17 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
// Update the attachment
$attachment_id = $this->insert_attachment( $object, $cropped );
- $url = $object['guid'];
+ $url = wp_get_attachment_url( $attachment_id );
$this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
- // cleanup
+ // Cleanup.
$medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original );
if ( file_exists( $medium ) ) {
- /**
- * Filter the path of the file to delete.
- *
- * @since 2.1.0
- *
- * @param string $medium Path to the file to delete.
- */
- @unlink( apply_filters( 'wp_delete_file', $medium ) );
+ wp_delete_file( $medium );
}
if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) {
- /** This filter is documented in wp-admin/custom-header.php */
- @unlink( apply_filters( 'wp_delete_file', $original ) );
+ wp_delete_file( $original );
}
return $this->finished();
@@ -885,7 +954,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
*
* @since 2.1.0
*/
- function finished() {
+ public function finished() {
$this->updated = true;
$this->step_1();
}
@@ -895,9 +964,9 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
*
* @since 2.1.0
*/
- function admin_page() {
+ public function admin_page() {
if ( ! current_user_can('edit_theme_options') )
- wp_die(__('You do not have permission to customize headers.'));
+ wp_die(__('Sorry, you are not allowed to customize headers.'));
$step = $this->step();
if ( 2 == $step )
$this->step_2();
@@ -911,8 +980,11 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Unused since 3.5.0.
*
* @since 3.4.0
+ *
+ * @param array $form_fields
+ * @return array $form_fields
*/
- function attachment_fields_to_edit( $form_fields ) {
+ public function attachment_fields_to_edit( $form_fields ) {
return $form_fields;
}
@@ -920,8 +992,11 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Unused since 3.5.0.
*
* @since 3.4.0
+ *
+ * @param array $tabs
+ * @return array $tabs
*/
- function filter_upload_tabs( $tabs ) {
+ public function filter_upload_tabs( $tabs ) {
return $tabs;
}
@@ -929,13 +1004,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Choose a header image, selected from existing uploaded and default headers,
* or provide an array of uploaded header data (either new, or from media library).
*
+ * @since 3.4.0
+ *
* @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
* for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
* among the uploaded images; the key of a default image registered for that theme; and
- * the key of an image uploaded for that theme (the basename of the URL).
+ * the key of an image uploaded for that theme (the attachment ID of the image).
* Or an array of arguments: attachment_id, url, width, height. All are required.
- *
- * @since 3.4.0
*/
final public function set_header_image( $choice ) {
if ( is_array( $choice ) || is_object( $choice ) ) {
@@ -987,7 +1062,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* @since 3.4.0
*/
final public function remove_header_image() {
- return $this->set_header_image( 'remove-header' );
+ $this->set_header_image( 'remove-header' );
}
/**
@@ -1001,9 +1076,10 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
$this->process_default_headers();
$default = get_theme_support( 'custom-header', 'default-image' );
- if ( ! $default )
- return $this->remove_header_image();
-
+ if ( ! $default ) {
+ $this->remove_header_image();
+ return;
+ }
$default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
$default_data = array();
@@ -1021,6 +1097,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
/**
* Calculate width and height based on what the currently selected theme supports.
*
+ * @param array $dimensions
* @return array dst_height and dst_width of header image.
*/
final public function get_header_dimensions( $dimensions ) {
@@ -1032,7 +1109,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
$has_flex_width = current_theme_supports( 'custom-header', 'flex-width' );
$has_flex_height = current_theme_supports( 'custom-header', 'flex-height' );
$has_max_width = current_theme_supports( 'custom-header', 'max-width' ) ;
- $dst = array( 'dst_height' => null, 'dst_height' => null );
+ $dst = array( 'dst_height' => null, 'dst_width' => null );
// For flex, limit size of image displayed to 1500px unless theme says otherwise
if ( $has_flex_width ) {
@@ -1070,14 +1147,14 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
/**
* Create an attachment 'object'.
*
- * @param string $cropped Cropped image URL.
- * @param int $parent_attachment_id Attachment ID of parent image.
+ * @param string $cropped Cropped image URL.
+ * @param int $parent_attachment_id Attachment ID of parent image.
*
* @return array Attachment object.
*/
final public function create_attachment_object( $cropped, $parent_attachment_id ) {
$parent = get_post( $parent_attachment_id );
- $parent_url = $parent->guid;
+ $parent_url = wp_get_attachment_url( $parent->ID );
$url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
$size = @getimagesize( $cropped );
@@ -1086,7 +1163,6 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
$object = array(
'ID' => $parent_attachment_id,
'post_title' => basename($cropped),
- 'post_content' => $url,
'post_mime_type' => $image_type,
'guid' => $url,
'context' => 'custom-header'
@@ -1096,9 +1172,9 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
}
/**
- * Insert an attachment & its metadata.
+ * Insert an attachment and its metadata.
*
- * @param array $object Attachment object.
+ * @param array $object Attachment object.
* @param string $cropped Cropped image URL.
*
* @return int Attachment ID.
@@ -1107,8 +1183,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
$attachment_id = wp_insert_attachment( $object, $cropped );
$metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
/**
- * Allows us to insert custom meta data for an attachment.
+ * Filters the header image attachment metadata.
+ *
+ * @since 3.9.0
*
+ * @see wp_generate_attachment_metadata()
+ *
+ * @param array $metadata Attachment metadata.
*/
$metadata = apply_filters( 'wp_header_image_attachment_metadata', $metadata );
wp_update_attachment_metadata( $attachment_id, $metadata );
@@ -1119,7 +1200,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Gets attachment uploaded by Media Manager, crops it, then saves it as a
* new object. Returns JSON-encoded object details.
*/
- function ajax_header_crop() {
+ public function ajax_header_crop() {
check_ajax_referer( 'image_editor-' . $_POST['id'], 'nonce' );
if ( ! current_user_can( 'edit_theme_options' ) ) {
@@ -1153,6 +1234,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
wp_send_json_error( array( 'message' => __( 'Image could not be processed. Please go back and try again.' ) ) );
}
+ /** This filter is documented in wp-admin/custom-header.php */
$cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication
$object = $this->create_attachment_object( $cropped, $attachment_id );
@@ -1162,6 +1244,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
$new_attachment_id = $this->insert_attachment( $object, $cropped );
$object['attachment_id'] = $new_attachment_id;
+ $object['url'] = wp_get_attachment_url( $new_attachment_id );;
$object['width'] = $dimensions['dst_width'];
$object['height'] = $dimensions['dst_height'];
@@ -1175,7 +1258,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Triggered when the user tries adds a new header image from the
* Media Manager, even if s/he doesn't save that change.
*/
- function ajax_header_add() {
+ public function ajax_header_add() {
check_ajax_referer( 'header-add', 'nonce' );
if ( ! current_user_can( 'edit_theme_options' ) ) {
@@ -1201,7 +1284,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
* Triggered when the user clicks the overlay "X" button next to each image
* choice in the Customizer's Header tool.
*/
- function ajax_header_remove() {
+ public function ajax_header_remove() {
check_ajax_referer( 'header-remove', 'nonce' );
if ( ! current_user_can( 'edit_theme_options' ) ) {
@@ -1220,7 +1303,11 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
wp_send_json_success();
}
- function customize_set_last_used( $wp_customize ) {
+ /**
+ *
+ * @param WP_Customize_Manager $wp_customize
+ */
+ public function customize_set_last_used( $wp_customize ) {
$data = $wp_customize->get_setting( 'header_image_data' )->post_value();
if ( ! isset( $data['attachment_id'] ) ) {
@@ -1232,6 +1319,10 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
update_post_meta( $attachment_id, $key, time() );
}
+ /**
+ *
+ * @return array
+ */
public function get_default_header_images() {
$this->process_default_headers();
@@ -1265,10 +1356,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
);
// The rest of the set comes after.
- $header_images = array_merge( $header_images, $this->default_headers );
- return $header_images;
+ return array_merge( $header_images, $this->default_headers );
}
+ /**
+ *
+ * @return array
+ */
public function get_uploaded_header_images() {
$header_images = get_uploaded_header_images();
$timestamp_key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();