PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.6.2
Jetpack – WP Security, Backup, Speed, & Growth v13.6.2
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 4 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 4 years ago
blog-display.php
275 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 /**
34 * Apply Content filters.
35 *
36 * @since 9.7.0 Deprecated $content parameter.
37 *
38 * @param string $content Post content. Deprecated.
39 */
40 function jetpack_blog_display_custom_excerpt( $content = '' ) {
41 if ( ! empty( $content ) ) {
42 _doing_it_wrong(
43 'jetpack_blog_display_custom_excerpt',
44 esc_html__( 'You do not need to pass a $content parameter anymore.', 'jetpack' ),
45 'jetpack-9.7.0'
46 );
47 }
48
49 $post = get_post();
50 if ( empty( $post ) ) {
51 return '';
52 }
53
54 if ( empty( $post->post_excerpt ) ) {
55 $text = strip_shortcodes( $post->post_content );
56 $text = str_replace( ']]>', ']]&gt;', $text );
57 $text = wp_strip_all_tags( $text );
58 /** This filter is documented in wp-includes/formatting.php */
59 $excerpt_length = apply_filters( 'excerpt_length', 55 );
60 /** This filter is documented in wp-includes/formatting.php */
61 $excerpt_more = apply_filters( 'excerpt_more', ' [...]' );
62
63 /*
64 * translators: If your word count is based on single characters (e.g. East Asian characters),
65 * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
66 * Do not translate into your own language.
67 */
68 if ( strpos( _x( 'words', 'Word count type. Do not translate!', 'jetpack' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
69 $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
70 preg_match_all( '/./u', $text, $words );
71 $words = array_slice( $words[0], 0, $excerpt_length + 1 );
72 $sep = '';
73 } else {
74 $words = preg_split( "/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY );
75 $sep = ' ';
76 }
77
78 if ( count( $words ) > $excerpt_length ) {
79 array_pop( $words );
80 $text = implode( $sep, $words );
81 $text = $text . $excerpt_more;
82 } else {
83 $text = implode( $sep, $words );
84 }
85 } else {
86 $text = wp_kses_post( $post->post_excerpt );
87 }
88 return sprintf( '<p>%s</p>', $text );
89 }
90
91 /**
92 * Display Excerpt instead of Content.
93 *
94 * @param string $content Post content.
95 */
96 function jetpack_the_content_to_the_excerpt( $content ) {
97 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
98 if ( post_password_required() ) {
99 $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
100 } else {
101 $excerpt = jetpack_blog_display_custom_excerpt();
102 }
103 }
104 if ( empty( $excerpt ) ) {
105 return $content;
106 } else {
107 return $excerpt;
108 }
109 }
110
111 /**
112 * Display Content instead of Excerpt.
113 *
114 * @param string $content The post excerpt.
115 */
116 function jetpack_the_excerpt_to_the_content( $content ) {
117 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
118 ob_start();
119 the_content(
120 sprintf(
121 wp_kses(
122 /* translators: %s: Name of current post. Only visible to screen readers */
123 __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
124 array(
125 'span' => array(
126 'class' => array(),
127 ),
128 )
129 ),
130 get_the_title()
131 )
132 );
133 $content = ob_get_clean();
134 }
135 return $content;
136 }
137
138 /**
139 * Display both Content and Excerpt instead of Content in the Customizer so live preview can switch between them.
140 *
141 * @param string $content The post content.
142 */
143 function jetpack_the_content_customizer( $content ) {
144 $class = jetpack_the_content_customizer_class();
145 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
146 if ( post_password_required() ) {
147 $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
148 } else {
149 $excerpt = jetpack_blog_display_custom_excerpt();
150 }
151 }
152 if ( empty( $excerpt ) ) {
153 return $content;
154 } else {
155 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 );
156 }
157 }
158
159 /**
160 * Display both Content and Excerpt instead of Excerpt in the Customizer so live preview can switch between them.
161 *
162 * @param string $excerpt The post excerpt.
163 */
164 function jetpack_the_excerpt_customizer( $excerpt ) {
165 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
166 ob_start();
167 the_content(
168 sprintf(
169 wp_kses(
170 /* translators: %s: Name of current post. Only visible to screen readers */
171 __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
172 array(
173 'span' => array(
174 'class' => array(),
175 ),
176 )
177 ),
178 get_the_title()
179 )
180 );
181 $content = ob_get_clean();
182 }
183 if ( empty( $content ) ) {
184 return $excerpt;
185 } else {
186 return sprintf( '<div class="jetpack-blog-display jetpack-the-content">%s</div><div class="jetpack-blog-display jetpack-the-excerpt">%s</div>', $content, $excerpt );
187 }
188 }
189
190 /**
191 * Display Content instead of Excerpt in the Customizer when theme uses a 'Mixed' display.
192 *
193 * @param string $content The post excerpt.
194 */
195 function jetpack_the_excerpt_mixed_customizer( $content ) {
196 if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
197 jetpack_the_content_customizer_class( 'output-the-excerpt' );
198 ob_start();
199 the_content();
200 $content = ob_get_clean();
201 }
202 return $content;
203 }
204
205 /**
206 * Returns a class value, `output-the-content` by default.
207 * Used for themes with a 'Mixed' Blog Display so we can tell which output is by default.
208 *
209 * @param string|null $new_class CSS class added to content container.
210 */
211 function jetpack_the_content_customizer_class( $new_class = null ) {
212 static $class;
213 if ( isset( $new_class ) ) {
214 // Assign a new class and return.
215 $class = $new_class;
216 } elseif ( isset( $class ) ) {
217 // Reset the class after getting value.
218 $prev_class = $class;
219 $class = null;
220 return $prev_class;
221 } else {
222 // Return default class value.
223 return 'output-the-content';
224 }
225 }
226
227 if ( is_customize_preview() ) {
228 /*
229 * Display Content and Excerpt if the default Blog Display is 'Content'
230 * and we are in the Customizer.
231 */
232 if ( 'content' === $blog_display ) {
233 add_filter( 'the_content', 'jetpack_the_content_customizer' );
234 }
235
236 /*
237 * Display Content and Excerpt if the default Blog Display is 'Excerpt'
238 * and we are in the Customizer.
239 */
240 if ( 'excerpt' === $blog_display ) {
241 add_filter( 'the_excerpt', 'jetpack_the_excerpt_customizer' );
242 }
243
244 /*
245 * Display Content and Excerpt if the default Blog Display is 'Mixed'
246 * and we are in the Customizer.
247 */
248 if ( 'mixed' === $blog_display ) {
249 add_filter( 'the_content', 'jetpack_the_content_customizer' );
250 add_filter( 'the_excerpt', 'jetpack_the_excerpt_mixed_customizer' );
251 }
252 } else {
253 $display_option = get_option( 'jetpack_content_blog_display', $blog_display );
254
255 /*
256 * Display Excerpt if the default Blog Display is 'Content'
257 * or default Blog Display is 'Mixed'
258 * and the Option picked is 'Post Excerpt'
259 * and we aren't in the Customizer.
260 */
261 if ( ( 'content' === $blog_display || 'mixed' === $blog_display ) && 'excerpt' === $display_option ) {
262 add_filter( 'the_content', 'jetpack_the_content_to_the_excerpt' );
263 }
264
265 /*
266 * Display Content if the default Blog Display is 'Excerpt'
267 * or default Blog Display is 'Mixed'
268 * and the Option picked is 'Full Post'
269 * and we aren't in the Customizer.
270 */
271 if ( ( 'excerpt' === $blog_display || 'mixed' === $blog_display ) && 'content' === $display_option ) {
272 add_filter( 'the_excerpt', 'jetpack_the_excerpt_to_the_content' );
273 }
274 }
275