PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 All 506 releases
jetpack / modules / theme-tools / site-logo / inc / functions.php

functions.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.7, at modules/theme-tools/site-logo/inc/functions.php

209 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Functions and template tags for Site Logo theme tool.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Retrieve the site logo URL or ID (URL by default). Pass in the string 'id' for ID.
10 *
11 * @uses get_option()
12 * @uses esc_url_raw()
13 * @uses set_url_scheme()
14 * @param string $show 'url' or 'id' for site logo.
15 * @return mixed The URL or ID of our site logo, false if not set
16 * @since 1.0
17 */
18 function jetpack_get_site_logo( $show = 'url' ) {
19 $logo_id = site_logo()->logo;
20
21 // Return false if no logo is set
22 if ( ! $logo_id ) {
23 return false;
24 }
25
26 // Return the ID if specified, otherwise return the URL by default
27 if ( 'id' === $show ) {
28 return $logo_id;
29 } else {
30 $logo_url = wp_get_attachment_url( $logo_id );
31 return esc_url_raw( set_url_scheme( $logo_url ) );
32 }
33 }
34
35 /**
36 * Retrieve an array of the dimensions of the Site Logo.
37 *
38 * @uses Site_Logo::theme_size()
39 * @uses get_option( 'thumbnail_size_w' )
40 * @uses get_option( 'thumbnail_size_h' )
41 * @uses global $_wp_additional_image_sizes;
42 *
43 * @since 3.6.0
44 *
45 * @return array $dimensions {
46 * An array of dimensions of the Site Logo.
47 *
48 * @type string $width Width of the logo in pixels.
49 * @type string $height Height of the logo in pixels.
50 * }
51 */
52 function jetpack_get_site_logo_dimensions() {
53 // Get the image size to use with the logo.
54 $size = site_logo()->theme_size();
55
56 // If the size is the default `thumbnail`, get its dimensions. Otherwise, get them from $_wp_additional_image_sizes
57 if ( empty( $size ) ) {
58 return false;
59 } elseif ( 'thumbnail' === $size ) {
60 $dimensions = array(
61 'width' => get_option( 'thumbnail_size_w' ),
62 'height' => get_option( 'thumbnail_size_h' ),
63 );
64 } else {
65 global $_wp_additional_image_sizes;
66
67 if ( ! isset( $_wp_additional_image_sizes[ $size ] ) ) {
68 return false;
69 }
70
71 $dimensions = array(
72 'width' => $_wp_additional_image_sizes[ $size ]['width'],
73 'height' => $_wp_additional_image_sizes[ $size ]['height'],
74 );
75 }
76
77 return $dimensions;
78 }
79
80 /**
81 * Determine if a site logo is assigned or not.
82 *
83 * @uses get_option
84 * @return boolean True if there is an active logo, false otherwise
85 */
86 function jetpack_has_site_logo() {
87 return site_logo()->has_site_logo();
88 }
89
90 /**
91 * Output an <img> tag of the site logo, at the size specified
92 * in the theme's add_theme_support() declaration.
93 *
94 * @uses Site_Logo::logo
95 * @uses Site_Logo::theme_size()
96 * @uses jetpack_has_site_logo()
97 * @uses jetpack_is_customize_preview()
98 * @uses esc_url()
99 * @uses home_url()
100 * @uses esc_attr()
101 * @uses wp_get_attachment_image()
102 * @uses apply_filters()
103 * @since 1.0
104 */
105 function jetpack_the_site_logo() {
106 $size = site_logo()->theme_size();
107
108 // If no logo is set, but we're in the Customizer, leave a placeholder (needed for the live preview).
109 if (
110 ! jetpack_has_site_logo()
111 && jetpack_is_customize_preview()
112 ) {
113 /*
114 * Reason: the output is escaped in the sprintf.
115 * phpcs:disable WordPress.Security.EscapeOutput
116 */
117 /** This filter is documented in modules/theme-tools/site-logo/inc/functions.php */
118 echo apply_filters(
119 'jetpack_the_site_logo',
120 sprintf(
121 '<a href="%1$s" class="site-logo-link" style="display:none;"><img class="site-logo" data-size="%2$s" /></a>',
122 esc_url( home_url( '/' ) ),
123 esc_attr( $size )
124 ),
125 array(),
126 $size
127 );
128 /* phpcs:enable WordPress.Security.EscapeOutput */
129 return;
130 }
131
132 // Check for WP 4.5 Site Logo and Jetpack logo.
133 $logo_id = get_theme_mod( 'custom_logo' );
134 // Get the option directly so the updated logo can be injected into customizer previews.
135 $jetpack_logo_id = get_option( 'site_logo' );
136
137 // Use WP Core logo if present and is an id (of an attachment), otherwise use Jetpack's.
138 if ( ! is_numeric( $logo_id ) && $jetpack_logo_id ) {
139 $logo_id = $jetpack_logo_id;
140 }
141
142 /*
143 * Reason: the output is escaped in the sprintf.
144 * phpcs:disable WordPress.Security.EscapeOutput
145 */
146 /**
147 * Filter the Site Logo output.
148 *
149 * @module theme-tools
150 *
151 * @since 3.2.0
152 *
153 * @param string $html Site Logo HTML output.
154 * @param array $jetpack_logo Array of Site Logo details.
155 * @param string $size Size specified in add_theme_support declaration, or 'thumbnail' default.
156 */
157 echo apply_filters(
158 'jetpack_the_site_logo',
159 sprintf(
160 '<a href="%1$s" class="site-logo-link" rel="home" itemprop="url">%2$s</a>',
161 esc_url( home_url( '/' ) ),
162 wp_get_attachment_image(
163 $logo_id,
164 $size,
165 false,
166 array(
167 'class' => "site-logo attachment-$size",
168 'data-size' => $size,
169 'itemprop' => 'logo',
170 )
171 )
172 ),
173 // Return array format in filter for back compatibility.
174 array(
175 'id' => $jetpack_logo_id,
176 'url' => wp_get_attachment_url( $jetpack_logo_id ),
177 'sizes' => array(),
178 ),
179 $size
180 );
181 /* phpcs:enable WordPress.Security.EscapeOutput */
182 }
183
184 /**
185 * Whether the site is being previewed in the Customizer.
186 * Duplicate of core function until 4.0 is released.
187 *
188 * @global WP_Customize_Manager $wp_customize Customizer instance.
189 * @return bool True if the site is being previewed in the Customizer, false otherwise.
190 */
191 function jetpack_is_customize_preview() {
192 global $wp_customize;
193 // @phan-suppress-next-line PhanTypeMismatchArgumentInternal -- this continues to work as expected, but given the feature deprecation no extra work is needed.
194 return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
195 }
196
197 /**
198 * Sanitize the string of classes used for header text.
199 * Limit to A-Z,a-z,0-9,(space),(comma),_,-
200 *
201 * @param string $classes Unsanitized string of CSS classes.
202 * @return string Sanitized string of CSS classes.
203 */
204 function jetpack_sanitize_header_text_classes( $classes ) {
205 $classes = preg_replace( '/[^A-Za-z0-9\,\ ._-]/', '', $classes );
206
207 return $classes;
208 }
209