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