* @since 3.0.0
* @access private
*/
- var $admin_header_callback;
+ private $admin_header_callback;
/**
* Callback for header div.
* @since 3.0.0
* @access private
*/
- var $admin_image_div_callback;
+ private $admin_image_div_callback;
/**
* Holds the page menu hook.
* @since 3.0.0
* @access private
*/
- var $page = '';
+ private $page = '';
+
+ /**
+ * @var bool
+ */
+ private $updated;
/**
* Constructor - Register administration header callback.
* @param callback $admin_image_div_callback Optional custom image div output callback.
* @return Custom_Background
*/
- function __construct($admin_header_callback = '', $admin_image_div_callback = '') {
+ public function __construct($admin_header_callback = '', $admin_image_div_callback = '') {
$this->admin_header_callback = $admin_header_callback;
$this->admin_image_div_callback = $admin_image_div_callback;
add_action( 'admin_menu', array( $this, 'init' ) );
+
+ add_action( 'wp_ajax_custom-background-add', array( $this, 'ajax_background_add' ) );
+
+ // Unused since 3.5.0.
add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) );
}
+ /**
+ * Make private properties readable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property name.
+ * @return mixed Property.
+ */
+ public function __get( $name ) {
+ return $this->$name;
+ }
+
+ /**
+ * Make private properties settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to set.
+ * @param mixed $value Property value.
+ * @return mixed Newly-set property.
+ */
+ public function __set( $name, $value ) {
+ return $this->$name = $value;
+ }
+
+ /**
+ * Make private properties checkable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to check if set.
+ * @return bool Whether the property is set.
+ */
+ public function __isset( $name ) {
+ return isset( $this->$name );
+ }
+
+ /**
+ * Make private properties un-settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to unset.
+ */
+ public function __unset( $name ) {
+ unset( $this->$name );
+ }
+
/**
* Set up the hooks for the Custom Background admin page.
*
* @since 3.0.0
*/
- function init() {
+ public function init() {
if ( ! current_user_can('edit_theme_options') )
return;
*
* @since 3.0.0
*/
- function admin_load() {
+ public function admin_load() {
get_current_screen()->add_help_tab( array(
'id' => 'overview',
'title' => __('Overview'),
*
* @since 3.0.0
*/
- function take_action() {
+ public function take_action() {
if ( empty($_POST) )
return;
*
* @since 3.0.0
*/
- function admin_page() {
+ public function admin_page() {
?>
<div class="wrap" id="custom-background">
<h2><?php _e( 'Custom Background' ); ?></h2>
+<?php if ( current_user_can( 'customize' ) ) { ?>
+<div class="notice notice-info hide-if-no-customize">
+ <p>
+ <?php
+ printf(
+ __( 'You can now manage and live-preview Custom Backgrounds in the <a href="%1$s">Customizer</a>.' ),
+ admin_url( 'customize.php?autofocus[control]=background_image' )
+ );
+ ?>
+ </p>
+</div>
+<?php } ?>
+
<?php if ( ! empty( $this->updated ) ) { ?>
<div id="message" class="updated">
<p><?php printf( __( 'Background updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url( '/' ) ); ?></p>
if ( get_background_image() ) {
$background_image_thumb = esc_url( set_url_scheme( get_theme_mod( 'background_image_thumb', str_replace( '%', '%%', get_background_image() ) ) ) );
- // background-image URL must be single quote, see below
+
+ // Background-image URL must be single quote, see below.
$background_styles .= ' background-image: url(\'' . $background_image_thumb . '\');'
. ' background-repeat: ' . get_theme_mod( 'background_repeat', get_theme_support( 'custom-background', 'default-repeat' ) ) . ';'
. ' background-position: top ' . get_theme_mod( 'background_position_x', get_theme_support( 'custom-background', 'default-position-x' ) );
</p>
<p>
<label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br />
- <a id="choose-from-library-link" class="button"
+ <button id="choose-from-library-link" class="button"
data-choose="<?php esc_attr_e( 'Choose a Background Image' ); ?>"
- data-update="<?php esc_attr_e( 'Set as background' ); ?>"><?php _e( 'Choose Image' ); ?></a>
+ data-update="<?php esc_attr_e( 'Set as background' ); ?>"><?php _e( 'Choose Image' ); ?></button>
</p>
</form>
</td>
*
* @since 3.0.0
*/
- function handle_upload() {
+ public function handle_upload() {
if ( empty($_FILES) )
return;
}
/**
- * Unused since 3.5.0.
+ * AJAX handler for adding custom background context to an attachment.
+ *
+ * Triggered when the user adds a new background image from the
+ * Media Manager.
+ *
+ * @since 4.1.0
+ */
+ public function ajax_background_add() {
+ check_ajax_referer( 'background-add', 'nonce' );
+
+ if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_send_json_error();
+ }
+
+ $attachment_id = absint( $_POST['attachment_id'] );
+ if ( $attachment_id < 1 ) {
+ wp_send_json_error();
+ }
+
+ update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_stylesheet() );
+
+ wp_send_json_success();
+ }
+
+ /**
*
* @since 3.4.0
+ * @deprecated 3.5.0
*/
- function attachment_fields_to_edit( $form_fields ) {
+ public function attachment_fields_to_edit( $form_fields ) {
return $form_fields;
}
/**
- * Unused since 3.5.0.
*
* @since 3.4.0
+ * @deprecated 3.5.0
*/
- function filter_upload_tabs( $tabs ) {
+ public function filter_upload_tabs( $tabs ) {
return $tabs;
}
+ /**
+ *
+ * @since 3.4.0
+ * @deprecated 3.5.0
+ */
public function wp_set_background_image() {
if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit;
$attachment_id = absint($_POST['attachment_id']);