class-site-logo-control.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * Custom logo uploader control for the Customizer.
  4. *
  5. * @package Jetpack
  6. */
  7. class Site_Logo_Image_Control extends WP_Customize_Control {
  8. /**
  9. * Constructor for our custom control.
  10. *
  11. * @param object $wp_customize
  12. * @param string $control_id
  13. * @param array $args
  14. * @uses Site_Logo_Image_Control::l10n()
  15. */
  16. public function __construct( $wp_customize, $control_id, $args = array() ) {
  17. // declare these first so they can be overridden
  18. $this->l10n = array(
  19. 'upload' => __( 'Add logo', 'jetpack' ),
  20. 'set' => __( 'Set as logo', 'jetpack' ),
  21. 'choose' => __( 'Choose logo', 'jetpack' ),
  22. 'change' => __( 'Change logo', 'jetpack' ),
  23. 'remove' => __( 'Remove logo', 'jetpack' ),
  24. 'placeholder' => __( 'No logo set', 'jetpack' ),
  25. );
  26. parent::__construct( $wp_customize, $control_id, $args );
  27. }
  28. /**
  29. * This will be critical for our JS constructor.
  30. */
  31. public $type = 'site_logo';
  32. /**
  33. * Allows overriding of global labels by a specific control.
  34. */
  35. public $l10n = array();
  36. /**
  37. * The type of files that should be allowed by the media modal.
  38. */
  39. public $mime_type = 'image';
  40. /**
  41. * Enqueue our media manager resources, scripts, and styles.
  42. *
  43. * @uses wp_enqueue_media()
  44. * @uses wp_enqueue_style()
  45. * @uses wp_enqueue_script()
  46. * @uses plugins_url()
  47. */
  48. public function enqueue() {
  49. // Enqueues all needed media resources.
  50. wp_enqueue_media();
  51. // Enqueue our control script and styles.
  52. wp_enqueue_style( 'site-logo-control', plugins_url( '../css/site-logo-control.css', __FILE__ ) );
  53. wp_enqueue_script( 'site-logo-control', plugins_url( '../js/site-logo-control.js', __FILE__ ), array( 'media-views', 'customize-controls', 'underscore' ), '', true );
  54. }
  55. /**
  56. * Check if we have an active site logo.
  57. *
  58. * @uses get_option()
  59. * @return boolean
  60. */
  61. public function has_site_logo() {
  62. $logo = get_option( 'site_logo' );
  63. if ( empty( $logo['url'] ) ) {
  64. return false;
  65. } else {
  66. return true;
  67. }
  68. }
  69. /**
  70. * Display our custom control in the Customizer.
  71. *
  72. * @uses Site_Logo_Image_Control::l10n()
  73. * @uses Site_Logo_Image_Control::mime_type()
  74. * @uses Site_Logo_Image_Control::label()
  75. * @uses Site_Logo_Image_Control::description()
  76. * @uses esc_attr()
  77. * @uses esc_html()
  78. */
  79. public function render_content() {
  80. // We do this to allow the upload control to specify certain labels
  81. $l10n = json_encode( $this->l10n );
  82. // Control title
  83. printf(
  84. '<span class="customize-control-title" data-l10n="%s" data-mime="%s">%s</span>',
  85. esc_attr( $l10n ),
  86. esc_attr( $this->mime_type ),
  87. esc_html( $this->label )
  88. );
  89. // Control description
  90. if ( ! empty( $this->description ) ) : ?>
  91. <span class="description customize-control-description"><?php echo $this->description; ?></span>
  92. <?php endif; ?>
  93. <div class="current"></div>
  94. <div class="actions"></div>
  95. <?php }
  96. }