PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.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 / social-links.php
jetpack / modules / theme-tools Last commit date
compat 2 years ago content-options 2 years ago js 6 years ago responsive-videos 3 years ago site-logo 2 years ago social-menu 2 years ago content-options.php 2 years ago devicepx.php 2 years ago featured-content.php 2 years ago infinite-scroll.php 4 years ago responsive-videos.php 2 years ago site-breadcrumbs.php 3 years ago site-logo.php 2 years ago social-links.php 2 years ago social-menu.php 2 years ago
social-links.php
268 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Theme Tools: Social Links.
4 *
5 * This feature will only be activated for themes that declare their support.
6 * This can be done by adding code similar to the following during the
7 * 'after_setup_theme' action:
8 *
9 * add_theme_support( 'social-links', array(
10 * 'facebook', 'twitter', 'linkedin', 'tumblr',
11 * ) );
12 *
13 * @package automattic/jetpack
14 */
15
16 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
17
18 if ( ! function_exists( 'jetpack_theme_supports_social_links' ) ) {
19 /**
20 * Init Social_Links if the theme declares support.
21 */
22 function jetpack_theme_supports_social_links() {
23 if ( ! wp_is_block_theme() && current_theme_supports( 'social-links' ) && function_exists( 'publicize_init' ) ) {
24 new Social_Links();
25 }
26 }
27 add_action( 'init', 'jetpack_theme_supports_social_links', 30 );
28 }
29
30 if ( ! class_exists( 'Social_Links' ) ) {
31
32 /**
33 * Social_Links main class.
34 */
35 class Social_Links {
36
37 /**
38 * The links the user set for each service.
39 *
40 * @var array
41 */
42 private $links;
43
44 /**
45 * A Publicize object.
46 *
47 * @var Publicize
48 */
49 private $publicize;
50
51 /**
52 * An array with all services that are supported by both Publicize and the
53 * currently active theme.
54 *
55 * @var array
56 */
57 private $services = array();
58
59 /**
60 * An array of the services the theme supports
61 *
62 * @var array
63 */
64 private $theme_supported_services = array();
65
66 /**
67 * Constructor.
68 */
69 public function __construct() {
70 $theme_support = get_theme_support( 'social-links' );
71
72 /*
73 An array of named arguments must be passed as the second parameter
74 * of add_theme_support().
75 */
76 if ( empty( $theme_support[0] ) ) {
77 return;
78 }
79
80 $this->theme_supported_services = $theme_support[0];
81 $this->links = Jetpack_Options::get_option( 'social_links', array() );
82
83 $this->admin_setup();
84
85 add_filter( 'jetpack_has_social_links', array( $this, 'has_social_links' ) );
86 add_filter( 'jetpack_get_social_links', array( $this, 'get_social_links' ) );
87
88 foreach ( $theme_support[0] as $service ) {
89 add_filter( "pre_option_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // - `get_option( 'jetpack-service' );`
90 add_filter( "theme_mod_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // - `get_theme_mod( 'jetpack-service' );`
91 }
92 }
93
94 /**
95 * Init the admin setup.
96 */
97 public function admin_setup() {
98 if ( ! current_user_can( 'manage_options' ) ) {
99 return;
100 }
101
102 if ( ! is_admin() && ! $this->is_customize_preview() ) {
103 return;
104 }
105
106 $this->publicize = publicize_init();
107 $publicize_services = $this->publicize->get_services( 'connected' );
108 $this->services = array_intersect( array_keys( $publicize_services ), $this->theme_supported_services );
109
110 add_action( 'publicize_connected', array( $this, 'check_links' ), 20 );
111 add_action( 'publicize_disconnected', array( $this, 'check_links' ), 20 );
112 add_action( 'customize_register', array( $this, 'customize_register' ) );
113 add_filter( 'sanitize_option_jetpack_options', array( $this, 'sanitize_link' ) );
114 }
115
116 /**
117 * Compares the currently saved links with the connected services and removes
118 * links from services that are no longer connected.
119 *
120 * @return void
121 */
122 public function check_links() {
123 $active_links = array_intersect_key( $this->links, array_flip( $this->services ) );
124
125 if ( $active_links !== $this->links ) {
126 $this->links = $active_links;
127 Jetpack_Options::update_option( 'social_links', $active_links );
128 }
129 }
130
131 /**
132 * Add social link dropdown to the Customizer.
133 *
134 * @param WP_Customize_Manager $wp_customize Theme Customizer object.
135 */
136 public function customize_register( $wp_customize ) {
137 $wp_customize->add_section(
138 'jetpack_social_links',
139 array(
140 'title' => esc_html__( 'Connect', 'jetpack' ),
141 'priority' => 35,
142 )
143 );
144
145 foreach ( array_keys( $this->publicize->get_services( 'all' ) ) as $service ) {
146 $choices = $this->get_customize_select( $service );
147
148 if ( empty( $choices ) ) {
149 continue;
150 }
151
152 $wp_customize->add_setting(
153 "jetpack_options[social_links][$service]",
154 array(
155 'type' => 'option',
156 'default' => '',
157 )
158 );
159
160 $wp_customize->add_control(
161 "jetpack-$service",
162 array(
163 'label' => $this->publicize->get_service_label( $service ),
164 'section' => 'jetpack_social_links',
165 'settings' => "jetpack_options[social_links][$service]",
166 'type' => 'select',
167 'choices' => $choices,
168 )
169 );
170 }
171 }
172
173 /**
174 * Sanitizes social links.
175 *
176 * @param array $option The incoming values to be sanitized.
177 * @return array
178 */
179 public function sanitize_link( $option ) {
180 foreach ( $this->services as $service ) {
181 if ( ! empty( $option['social_links'][ $service ] ) ) {
182 $option['social_links'][ $service ] = esc_url_raw( $option['social_links'][ $service ] );
183 } else {
184 unset( $option['social_links'][ $service ] );
185 }
186 }
187
188 return $option;
189 }
190
191 /**
192 * Returns whether there are any social links set.
193 *
194 * @return bool
195 */
196 public function has_social_links() {
197 return ! empty( $this->links );
198 }
199
200 /**
201 * Return available social links.
202 *
203 * @return array
204 */
205 public function get_social_links() {
206 return $this->links;
207 }
208
209 /**
210 * Short-circuits get_option and get_theme_mod calls.
211 *
212 * @param string $link The incoming value to be replaced.
213 * @return string $link The social link that we've got.
214 */
215 public function get_social_link_filter( $link ) {
216 if ( preg_match( '/_jetpack-(.+)$/i', current_filter(), $matches ) && ! empty( $this->links[ $matches[1] ] ) ) {
217 return $this->links[ $matches[1] ];
218 }
219
220 return $link;
221 }
222
223 /**
224 * Puts together an array of choices for a specific service.
225 *
226 * @param string $service The social service.
227 * @return array An associative array with profile links and display names.
228 */
229 private function get_customize_select( $service ) {
230 $choices = array(
231 '' => __( '&mdash; Select &mdash;', 'jetpack' ),
232 );
233
234 if ( isset( $this->links[ $service ] ) ) {
235 $choices[ $this->links[ $service ] ] = $this->links[ $service ];
236 }
237
238 $connected_services = $this->publicize->get_services( 'connected' );
239 if ( isset( $connected_services[ $service ] ) ) {
240 foreach ( $connected_services[ $service ] as $c ) {
241 $profile_link = $this->publicize->get_profile_link( $service, $c );
242
243 if ( false === $profile_link ) {
244 continue;
245 }
246
247 $choices[ $profile_link ] = $this->publicize->get_display_name( $service, $c );
248 }
249 }
250
251 if ( 1 === count( $choices ) ) {
252 return array();
253 }
254
255 return $choices;
256 }
257
258 /**
259 * Back-compat function for versions prior to 4.0.
260 */
261 private function is_customize_preview() {
262 global $wp_customize;
263 return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
264 }
265 }
266
267 } // - end if ( ! class_exists( 'Social_Links' )
268