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