PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.1.5
Jetpack – WP Security, Backup, Speed, & Growth v13.1.5
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 / related-posts / class.related-posts-customize.php
jetpack / modules / related-posts Last commit date
rtl 11 years ago class.related-posts-customize.php 2 years ago jetpack-related-posts.php 2 years ago readme.md 3 years ago related-posts-customizer.js 6 years ago related-posts-rtl.css 2 years ago related-posts.css 2 years ago related-posts.js 3 years ago
class.related-posts-customize.php
313 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 use Automattic\Jetpack\Assets;
4
5 // Exit if file is accessed directly.
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit;
8 }
9
10 /**
11 * Class to include elements to modify Related Posts look in Customizer.
12 *
13 * @since 4.4.0
14 */
15 class Jetpack_Related_Posts_Customize {
16
17 /**
18 * Key for panel, section and prefix for options. Same option name than in Options > Reading.
19 *
20 * @var string
21 */
22 public $prefix = 'jetpack_relatedposts';
23
24 /**
25 * Control to focus when customizer loads
26 *
27 * @var string
28 */
29 public $focus = '';
30
31 /**
32 * Class initialization.
33 *
34 * @since 4.4.0
35 */
36 public function __construct() {
37 if ( ! wp_is_block_theme() ) {
38 add_action( 'customize_register', array( $this, 'customize_register' ) );
39 add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_controls_enqueue_scripts' ) );
40 }
41 }
42
43 /**
44 * Initialize Customizer controls.
45 *
46 * @since 4.4.0
47 *
48 * @param WP_Customize_Manager $wp_customize Customizer instance.
49 */
50 public function customize_register( $wp_customize ) {
51
52 $wp_customize->add_section(
53 $this->prefix,
54 array(
55 'title' => esc_html__( 'Related Posts', 'jetpack' ),
56 'description' => '',
57 'capability' => 'edit_theme_options',
58 'priority' => 200,
59 )
60 );
61
62 $selective_options = array();
63
64 foreach ( $this->get_options( $wp_customize ) as $key => $field ) {
65 $control_id = "$this->prefix[$key]";
66 $selective_options[] = $control_id;
67 $wp_customize->add_setting(
68 $control_id,
69 array(
70 'default' => isset( $field['default'] ) ? $field['default'] : '',
71 'type' => isset( $field['setting_type'] ) ? $field['setting_type'] : 'option',
72 'capability' => isset( $field['capability'] ) ? $field['capability'] : 'edit_theme_options',
73 'transport' => isset( $field['transport'] ) ? $field['transport'] : 'postMessage',
74 )
75 );
76 $control_settings = array(
77 'label' => isset( $field['label'] ) ? $field['label'] : '',
78 'description' => isset( $field['description'] ) ? $field['description'] : '',
79 'settings' => $control_id,
80 'type' => isset( $field['control_type'] ) ? $field['control_type'] : 'text',
81 'section' => $this->prefix,
82 'priority' => 10,
83 'active_callback' => isset( $field['active_callback'] ) ? $field['active_callback'] : __CLASS__ . '::is_single',
84 );
85 switch ( $field['control_type'] ) {
86 case 'text':
87 case 'checkbox':
88 default:
89 $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
90 break;
91 case 'select':
92 if ( isset( $field['choices'] ) ) {
93 $control_settings['choices'] = $field['choices'];
94 $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
95 }
96 break;
97 case 'message':
98 $wp_customize->add_control( new Jetpack_Message_Control( $wp_customize, $control_id, $control_settings ) );
99 break;
100 }
101 }
102
103 // If selective refresh is available, implement it.
104 if ( isset( $wp_customize->selective_refresh ) ) {
105 $wp_customize->selective_refresh->add_partial(
106 "$this->prefix",
107 array(
108 'selector' => '.jp-relatedposts:not(.jp-relatedposts-block)',
109 'settings' => $selective_options,
110 'render_callback' => __CLASS__ . '::render_callback',
111 'container_inclusive' => false,
112 )
113 );
114 }
115 }
116
117 /**
118 * Callback that outputs the headline based on user choice.
119 *
120 * @since 4.4.0
121 */
122 public static function render_callback() {
123 echo Jetpack_RelatedPosts::init()->get_headline(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- content escaped in get_headline method
124 }
125
126 /**
127 * Check whether the current post contains a Related Posts block.
128 *
129 * @since 6.9.0
130 *
131 * @return bool
132 */
133 public static function contains_related_posts_block() {
134 if ( has_block( 'jetpack/related-posts' ) ) {
135 return true;
136 }
137
138 return false;
139 }
140
141 /**
142 * Check that we're in a single post view.
143 * Will return `false` if the current post contains a Related Posts block,
144 * because in that case we want to hide the Customizer controls.
145 *
146 * @since 4.4.0
147 *
148 * @return bool
149 */
150 public static function is_single() {
151 if ( self::contains_related_posts_block() ) {
152 return false;
153 }
154 return is_single();
155 }
156
157 /**
158 * Check that we're not in a single post view.
159 * Will return `false` if the current post contains a Related Posts block,
160 * because in that case we want to hide the Customizer controls.
161 *
162 * @since 4.4.0
163 *
164 * @return bool
165 */
166 public static function is_not_single() {
167 if ( self::contains_related_posts_block() ) {
168 return false;
169 }
170 return ! is_single();
171 }
172
173 /**
174 * Return list of options to modify.
175 *
176 * @since 4.4.0
177 *
178 * @param object $wp_customize Instance of WP Customizer.
179 *
180 * @return mixed|void
181 */
182 public function get_options( $wp_customize ) {
183 $transport = isset( $wp_customize->selective_refresh ) ? 'postMessage' : 'refresh';
184
185 $switched_locale = switch_to_locale( get_user_locale() );
186 $headline = __( 'Related', 'jetpack' );
187 if ( $switched_locale ) {
188 restore_previous_locale();
189 }
190
191 /**
192 * The filter allows you to change the options used to display Related Posts in the Customizer.
193 *
194 * @module related-posts
195 *
196 * @since 4.4.0
197 *
198 * @param array $options Array of options used to display Related Posts in the Customizer.
199 */
200 return apply_filters(
201 'jetpack_related_posts_customize_options',
202 array(
203 'enabled' => array(
204 'control_type' => 'hidden',
205 'default' => 1,
206 'setting_type' => 'option',
207 'transport' => $transport,
208 ),
209 'show_headline' => array(
210 'label' => esc_html__( 'Show a headline', 'jetpack' ),
211 'description' => esc_html__( 'This helps to clearly separate the related posts from post content.', 'jetpack' ),
212 'control_type' => 'checkbox',
213 'default' => 1,
214 'setting_type' => 'option',
215 'transport' => $transport,
216 ),
217 'headline' => array(
218 'label' => '',
219 'description' => esc_html__( 'Enter text to use as headline.', 'jetpack' ),
220 'control_type' => 'text',
221 'default' => esc_html( $headline ),
222 'setting_type' => 'option',
223 'transport' => $transport,
224 ),
225 'show_thumbnails' => array(
226 'label' => esc_html__( 'Show thumbnails', 'jetpack' ),
227 'description' => esc_html__( 'Show a thumbnail image where available.', 'jetpack' ),
228 'control_type' => 'checkbox',
229 'default' => 1,
230 'setting_type' => 'option',
231 'transport' => $transport,
232 ),
233 'show_date' => array(
234 'label' => esc_html__( 'Show date', 'jetpack' ),
235 'description' => esc_html__( 'Display date when entry was published.', 'jetpack' ),
236 'control_type' => 'checkbox',
237 'default' => 1,
238 'setting_type' => 'option',
239 'transport' => $transport,
240 ),
241 'show_context' => array(
242 'label' => esc_html__( 'Show context', 'jetpack' ),
243 'description' => esc_html__( "Display entry's category or tag.", 'jetpack' ),
244 'control_type' => 'checkbox',
245 'default' => 1,
246 'setting_type' => 'option',
247 'transport' => $transport,
248 ),
249 'layout' => array(
250 'label' => esc_html__( 'Layout', 'jetpack' ),
251 'description' => esc_html__( 'Arrange entries in different layouts.', 'jetpack' ),
252 'control_type' => 'select',
253 'choices' => array(
254 'grid' => esc_html__( 'Grid', 'jetpack' ),
255 'list' => esc_html__( 'List', 'jetpack' ),
256 ),
257 'default' => 'grid',
258 'setting_type' => 'option',
259 'transport' => $transport,
260 ),
261 'msg_go_to_single' => array(
262 'description' => esc_html__( 'Please visit a single post view to reveal the customization options.', 'jetpack' ),
263 'control_type' => 'message',
264 'active_callback' => __CLASS__ . '::is_not_single',
265 ),
266 'msg_example' => array(
267 'description' => esc_html__( 'Please note that the related posts displayed now are only for previewing purposes.', 'jetpack' ),
268 'control_type' => 'message',
269 ),
270 )
271 );
272 }
273
274 /**
275 * Enqueue assets for Customizer controls.
276 *
277 * @since 4.4.0
278 */
279 public function customize_controls_enqueue_scripts() {
280 wp_enqueue_script(
281 'jetpack_related-posts-customizer',
282 Assets::get_file_url_for_environment(
283 '_inc/build/related-posts/related-posts-customizer.min.js',
284 'modules/related-posts/related-posts-customizer.js'
285 ),
286 array( 'customize-controls' ),
287 JETPACK__VERSION,
288 false
289 );
290 }
291 } // class end
292
293 /**
294 * Control that displays a message in Customizer.
295 *
296 * @since 4.4.0
297 * @todo break this out into its own file.
298 */
299 class Jetpack_Message_Control extends WP_Customize_Control { // phpcs:ignore
300
301 /**
302 * Render the message.
303 *
304 * @since 4.4.0
305 */
306 public function render_content() {
307 echo '<p class="description">' . esc_html( $this->description ) . '</p>';
308 }
309 } // class end
310
311 // Initialize controls.
312 new Jetpack_Related_Posts_Customize();
313