PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.8.3
Jetpack – WP Security, Backup, Speed, & Growth v13.8.3
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 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / theme-tools / content-options / blog-display.php
jetpack / modules / theme-tools / content-options Last commit date
author-bio.php 2 years ago blog-display.php 2 years ago customizer.js 6 years ago customizer.php 2 years ago featured-images-fallback.php 2 years ago featured-images.php 2 years ago post-details.php 2 years ago
blog-display.php
303 lines
1 <?php
2 /**
3 * Theme Tools: the functions to display Content or Excerpt in a theme.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * If the theme doesn't support 'jetpack-content-options', don't continue.
10 */
11 if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
12 return;
13 }
14
15 /**
16 * Get the Blog Display setting.
17 * If theme is using both 'Content' and 'Excerpt' then this setting will be called 'Mixed'.
18 */
19 $options = get_theme_support( 'jetpack-content-options' );
20 $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
21 $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
22 sort( $blog_display );
23 $blog_display = implode( ', ', $blog_display );
24 $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
25
26 /**
27 * If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', don't continue.
28 */
29 if ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
30 return;
31 }
32
33 if ( ! function_exists( 'jetpack_blog_display_custom_excerpt' ) ) {
34
35 /**
36 * Apply Content filters.
37 *
38 * @since 9.7.0 Deprecated $content parameter.
39 *
40 * @param string $content Post content. Deprecated.
41 */
42 function jetpack_blog_display_custom_excerpt( $content = '' ) {
43 if ( ! empty( $content ) ) {
44 _doing_it_wrong(
45 'jetpack_blog_display_custom_excerpt',
46 esc_html__( 'You do not need to pass a $content parameter anymore.', 'jetpack' ),
47 'jetpack-9.7.0'
48 );
49 }
50
51 $post = get_post();
52 if ( empty( $post ) ) {
53 return '';
54 }
55
56 if ( empty( $post->post_excerpt ) ) {
57 $text = strip_shortcodes( $post->post_content );
58 $text = str_replace( ']]>', ']]&gt;', $text );
59 $text = wp_strip_all_tags( $text );
60 /** This filter is documented in wp-includes/formatting.php */
61 $excerpt_length = apply_filters( 'excerpt_length', 55 );
62 /** This filter is documented in wp-includes/formatting.php */
63 $excerpt_more = apply_filters( 'excerpt_more', ' [...]' );
64
65 /*
66 * translators: If your word count is based on single characters (e.g. East Asian characters),
67 * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
68 * Do not translate into your own language.
69 */
70 if ( strpos( _x( 'words', 'Word count type. Do not translate!', 'jetpack' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
71 $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
72 preg_match_all( '/./u', $text, $words );
73 $words = array_slice( $words[0], 0, $excerpt_length + 1 );
74 $sep = '';
75 } else {
76 $words = preg_split( "/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY );
77 $sep = ' ';
78 }
79
80 if ( count( $words ) > $excerpt_length ) {
81 array_pop( $words );
82 $text = implode( $sep, $words );
83 $text = $text . $excerpt_more;
84 } else {
85 $text = implode( $sep, $words );
86 }
87 } else {
88 $text = wp_kses_post( $post->post_excerpt );
89 }
90 return sprintf( '<p>%s</p>', $text );
91 }
92
93 }
94
95 if ( ! function_exists( 'jetpack_the_content_to_the_excerptt' ) ) {
96
97 /**
98 * Display Excerpt instead of Content.
99 *
100 * @param string $content Post content.
101 */
102 function jetpack_the_content_to_the_excerpt( $content ) {
103 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
104 if ( post_password_required() ) {
105 $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
106 } else {
107 $excerpt = jetpack_blog_display_custom_excerpt();
108 }
109 }
110 if ( empty( $excerpt ) ) {
111 return $content;
112 } else {
113 return $excerpt;
114 }
115 }
116
117 }
118
119 if ( ! function_exists( 'jetpack_the_excerpt_to_the_content' ) ) {
120
121 /**
122 * Display Content instead of Excerpt.
123 *
124 * @param string $content The post excerpt.
125 */
126 function jetpack_the_excerpt_to_the_content( $content ) {
127 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
128 ob_start();
129 the_content(
130 sprintf(
131 wp_kses(
132 /* translators: %s: Name of current post. Only visible to screen readers */
133 __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
134 array(
135 'span' => array(
136 'class' => array(),
137 ),
138 )
139 ),
140 get_the_title()
141 )
142 );
143 $content = ob_get_clean();
144 }
145 return $content;
146 }
147
148 }
149
150 if ( ! function_exists( 'jetpack_the_content_customizer' ) ) {
151
152 /**
153 * Display both Content and Excerpt instead of Content in the Customizer so live preview can switch between them.
154 *
155 * @param string $content The post content.
156 */
157 function jetpack_the_content_customizer( $content ) {
158 $class = jetpack_the_content_customizer_class();
159 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
160 if ( post_password_required() ) {
161 $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
162 } else {
163 $excerpt = jetpack_blog_display_custom_excerpt();
164 }
165 }
166 if ( empty( $excerpt ) ) {
167 return $content;
168 } else {
169 return sprintf( '<div class="jetpack-blog-display %s jetpack-the-content">%s</div><div class="jetpack-blog-display %s jetpack-the-excerpt">%s</div>', $class, $content, $class, $excerpt );
170 }
171 }
172
173 }
174
175 if ( ! function_exists( 'jetpack_the_excerpt_customizer' ) ) {
176
177 /**
178 * Display both Content and Excerpt instead of Excerpt in the Customizer so live preview can switch between them.
179 *
180 * @param string $excerpt The post excerpt.
181 */
182 function jetpack_the_excerpt_customizer( $excerpt ) {
183 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
184 ob_start();
185 the_content(
186 sprintf(
187 wp_kses(
188 /* translators: %s: Name of current post. Only visible to screen readers */
189 __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
190 array(
191 'span' => array(
192 'class' => array(),
193 ),
194 )
195 ),
196 get_the_title()
197 )
198 );
199 $content = ob_get_clean();
200 }
201 if ( empty( $content ) ) {
202 return $excerpt;
203 } else {
204 return sprintf( '<div class="jetpack-blog-display jetpack-the-content">%s</div><div class="jetpack-blog-display jetpack-the-excerpt">%s</div>', $content, $excerpt );
205 }
206 }
207
208 }
209
210 if ( ! function_exists( 'jetpack_the_excerpt_mixed_customizer' ) ) {
211
212 /**
213 * Display Content instead of Excerpt in the Customizer when theme uses a 'Mixed' display.
214 *
215 * @param string $content The post excerpt.
216 */
217 function jetpack_the_excerpt_mixed_customizer( $content ) {
218 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
219 jetpack_the_content_customizer_class( 'output-the-excerpt' );
220 ob_start();
221 the_content();
222 $content = ob_get_clean();
223 }
224 return $content;
225 }
226
227 }
228
229 if ( ! function_exists( 'jetpack_the_content_customizer_class' ) ) {
230
231 /**
232 * Returns a class value, `output-the-content` by default.
233 * Used for themes with a 'Mixed' Blog Display so we can tell which output is by default.
234 *
235 * @param string|null $new_class CSS class added to content container.
236 */
237 function jetpack_the_content_customizer_class( $new_class = null ) {
238 static $class;
239 if ( isset( $new_class ) ) {
240 // Assign a new class and return.
241 $class = $new_class;
242 } elseif ( isset( $class ) ) {
243 // Reset the class after getting value.
244 $prev_class = $class;
245 $class = null;
246 return $prev_class;
247 } else {
248 // Return default class value.
249 return 'output-the-content';
250 }
251 }
252
253 }
254
255 if ( is_customize_preview() ) {
256 /*
257 * Display Content and Excerpt if the default Blog Display is 'Content'
258 * and we are in the Customizer.
259 */
260 if ( 'content' === $blog_display ) {
261 add_filter( 'the_content', 'jetpack_the_content_customizer' );
262 }
263
264 /*
265 * Display Content and Excerpt if the default Blog Display is 'Excerpt'
266 * and we are in the Customizer.
267 */
268 if ( 'excerpt' === $blog_display ) {
269 add_filter( 'the_excerpt', 'jetpack_the_excerpt_customizer' );
270 }
271
272 /*
273 * Display Content and Excerpt if the default Blog Display is 'Mixed'
274 * and we are in the Customizer.
275 */
276 if ( 'mixed' === $blog_display ) {
277 add_filter( 'the_content', 'jetpack_the_content_customizer' );
278 add_filter( 'the_excerpt', 'jetpack_the_excerpt_mixed_customizer' );
279 }
280 } else {
281 $display_option = get_option( 'jetpack_content_blog_display', $blog_display );
282
283 /*
284 * Display Excerpt if the default Blog Display is 'Content'
285 * or default Blog Display is 'Mixed'
286 * and the Option picked is 'Post Excerpt'
287 * and we aren't in the Customizer.
288 */
289 if ( ( 'content' === $blog_display || 'mixed' === $blog_display ) && 'excerpt' === $display_option ) {
290 add_filter( 'the_content', 'jetpack_the_content_to_the_excerpt' );
291 }
292
293 /*
294 * Display Content if the default Blog Display is 'Excerpt'
295 * or default Blog Display is 'Mixed'
296 * and the Option picked is 'Full Post'
297 * and we aren't in the Customizer.
298 */
299 if ( ( 'excerpt' === $blog_display || 'mixed' === $blog_display ) && 'content' === $display_option ) {
300 add_filter( 'the_excerpt', 'jetpack_the_excerpt_to_the_content' );
301 }
302 }
303