Skip to content

Instantly share code, notes, and snippets.

@eduardozulian
Last active November 16, 2023 02:50
Show Gist options
  • Save eduardozulian/4739075 to your computer and use it in GitHub Desktop.
Save eduardozulian/4739075 to your computer and use it in GitHub Desktop.
Extend WP_Customize_Image_Control class allowing access to files uploaded within the same context.
<?php
/**
* Customize Image Reloaded Class
*
* Extend WP_Customize_Image_Control allowing access to uploads made within
* the same context
*/
class My_Customize_Image_Reloaded_Control extends WP_Customize_Image_Control {
/**
* Constructor.
*
* @since 3.4.0
* @uses WP_Customize_Image_Control::__construct()
*
* @param WP_Customize_Manager $manager
*/
public function __construct( $manager, $id, $args = array() ) {
parent::__construct( $manager, $id, $args );
}
/**
* Search for images within the defined context
*/
public function tab_uploaded() {
$my_context_uploads = get_posts( array(
'post_type' => 'attachment',
'meta_key' => '_wp_attachment_context',
'meta_value' => $this->context,
'orderby' => 'post_date',
'nopaging' => true,
) );
?>
<div class="uploaded-target"></div>
<?php
if ( empty( $my_context_uploads ) )
return;
foreach ( (array) $my_context_uploads as $my_context_upload ) {
$this->print_tab_image( esc_url_raw( $my_context_upload->guid ) );
}
}
}
/**
* Example of inserting a section called "Branding" with a
* context-based image uploader
*/
$wp_customize->add_section( 'my_branding', array(
'title' => __( 'Branding', '' ),
'priority' => 30,
) );
$wp_customize->add_setting( 'my_logo', array(
'capability' => 'edit_theme_options'
) );
$wp_customize->add_control( new My_Customize_Image_Reloaded_Control( $wp_customize, 'my_logo', array(
'label' => __( 'Logo', '' ),
'section' => 'my_branding',
'settings' => 'my_logo',
'context' => 'my-custom-logo'
) ) );
?>
@zanematthew
Copy link

Nice, snippet! One would of thought this functionality would of been built into WP_Customize_Image_Control, then again, extending the class WP_Customize_Image_Control isn't that much code anyway.

@zanematthew
Copy link

Just curious, @eduardozulian the comments found here do not seem correct. Since if the $my_context_uploads is empty the method just returns.

@eduardozulian
Copy link
Author

@zanematthew, you're right. I did some test months ago and I kept getting all my attachments, but I don't think that's the expected pattern. Thanks!

Just updated the code with some examples too.

@native-apps
Copy link

Okay, back into extending the WordPress theme customizer extensions. I'm still using this snippet for uploading textures, backgrounds, and logos. I'm not sure if something changed, but I can' seem to remove the images after they are uploaded. However, I noticed the WordPress added some features to the Live Theme Customizer particularly for Header Images. I see new buttons for "Hide Image" "Randomize Suggested Images", and they also cued in the newer Media Uploader for the header images in the theme customizer.

My memory may be failing me, but I thought we could remove the images that were uploaded to our custom contexts? Or, maybe I have a little bad code where it's not showing up anymore? Just can't seem to remove the images that I've uploaded.

@native-apps
Copy link

Oops, discard that last comment. It reappeared. :) Love this snippet!!!

@zanematthew
Copy link

@nativeimaging @eduardozulian seems since 3.9 was released a few things changed, mainly a bug arose, the "remove" option is now gone. Looking into a fix.

@wesweat
Copy link

wesweat commented Aug 28, 2014

hello,

i trying out your class and it act strange.

Right after i

require 'My_Customize_Image_Control.php';

and i save the new image options i get an error

Fatal error: Class 'WP_Customize_Image_Control' not found

And the Website is not loaded.

So after outcommenting
//require 'My_Customize_Image_Control.php';

the website loads correctly again.

What do i need to do to fix this?

Regards

@brianfeister
Copy link

AHHHH!!! THIS IS AMAZING!

@fafshari
Copy link

@wesweat You need to go into your functions.php and add it from there. Look at https://gist.github.com/eduardozulian/4739075/#comment-823136

Anyway, I'm writing to ask how to actually use this? I'm not sure what to put inside the context. Anything I put in doesn't seem to work. The Uploaded tab is still hidden.

@luckyali55
Copy link

cool and time saved

@robynlarsen
Copy link

@eduardozulian thanks for this! Wicked to extend this capability. Any resources that might point out how to implement or grab the new CustomLogo in the header.php?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment