PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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 / extensions / blocks / contact-info / class-jetpack-contact-info-block.php
jetpack / extensions / blocks / contact-info Last commit date
class-jetpack-contact-info-block.php 1 year ago contact-info.php 9 months ago
class-jetpack-contact-info-block.php
162 lines
1 <?php
2 /**
3 * Class Jetpack_Contact_Info_Block
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Blocks;
9
10 /**
11 * Helper class that lets us add schema attributes dynamically because they are not something that is store with the content.
12 * Due to the limitations of wp_kses.
13 *
14 * @since 7.1.0
15 */
16 class Jetpack_Contact_Info_Block {
17
18 /**
19 * Registers the block for use in Gutenberg
20 * This is done via an action so that we can disable
21 * registration if we need to.
22 */
23 public static function register_block() {
24
25 Blocks::jetpack_register_block(
26 __DIR__,
27 array(
28 'render_callback' => __NAMESPACE__ . '\render',
29 )
30 );
31
32 Blocks::jetpack_register_block(
33 'jetpack/address',
34 array(
35 'parent' => array( 'jetpack/contact-info' ),
36 'render_callback' => __NAMESPACE__ . '\render_adress',
37 )
38 );
39
40 Blocks::jetpack_register_block(
41 'jetpack/email',
42 array(
43 'parent' => array( 'jetpack/contact-info' ),
44 'render_callback' => __NAMESPACE__ . '\render_email',
45 )
46 );
47
48 Blocks::jetpack_register_block(
49 'jetpack/phone',
50 array(
51 'parent' => array( 'jetpack/contact-info' ),
52 'render_callback' => __NAMESPACE__ . '\render_phone',
53 )
54 );
55 }
56
57 /**
58 * Adds contact info schema attributes.
59 *
60 * @param array $attr Array containing the contact info block attributes.
61 * @param string $content String containing the contact info block content.
62 *
63 * @return string
64 */
65 public static function render( $attr, $content ) {
66 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
67 return str_replace(
68 'class="wp-block-jetpack-contact-info', // Closing " intentionally ommited to that the user can also add the className as expected.
69 'itemprop="location" itemscope itemtype="http://schema.org/Organization" class="wp-block-jetpack-contact-info',
70 $content
71 );
72 }
73
74 /**
75 * Adds address schema attributes.
76 *
77 * @param array $attr Array containing the address block attributes.
78 * @param string $content String containing the address block content.
79 *
80 * @return string
81 */
82 public static function render_address( $attr, $content ) {
83 // Returns empty content if the only attribute set is linkToGoogleMaps.
84 if ( ! self::has_attributes( $attr, array( 'linkToGoogleMaps', 'className' ) ) ) {
85 return '';
86 }
87 $find = array(
88 'class="wp-block-jetpack-address"',
89 'class="jetpack-address__address',
90 // Closing " left out on purpose - there are multiple address fields and they all need to be updated with the same itemprop.
91 'class="jetpack-address__region"',
92 'class="jetpack-address__city"',
93 'class="jetpack-address__postal"',
94 'class="jetpack-address__country"',
95 );
96 $replace = array(
97 'itemprop="address" itemscope itemtype="http://schema.org/PostalAddress" class="wp-block-jetpack-address" ',
98 'itemprop="streetAddress" class="jetpack-address__address', // Closing " left out on purpose.
99 'itemprop="addressRegion" class="jetpack-address__region"',
100 'itemprop="addressLocality" class="jetpack-address__city"',
101 'itemprop="postalCode" class="jetpack-address__postal"',
102 'itemprop="addressCountry" class="jetpack-address__country"',
103 );
104
105 return str_replace( $find, $replace, $content );
106 }
107
108 /**
109 * Helper function that lets us determine if a block has any valid attributes.
110 *
111 * @param array $attr Array containing the block attributes.
112 * @param array $omit Array containing the block attributes that we ignore.
113 *
114 * @return bool
115 */
116 public static function has_attributes( $attr, $omit = array() ) {
117 foreach ( $attr as $attribute => $value ) {
118 if ( ! in_array( $attribute, $omit, true ) && ! empty( $value ) ) {
119 return true;
120 }
121 }
122
123 return false;
124 }
125
126 /**
127 * Adds email schema attributes.
128 *
129 * @param array $attr Array containing the email block attributes.
130 * @param string $content String containing the email block content.
131 *
132 * @return string
133 */
134 public static function render_email( $attr, $content ) {
135 $content = self::has_attributes( $attr, array( 'className' ) ) ?
136 str_replace( 'href="mailto:', 'itemprop="email" href="mailto:', $content ) :
137 '';
138 return $content;
139 }
140
141 /**
142 * Adds phone schema attributes. Also wraps the tel link in a span so that
143 * it's recognized as a telephone number in Google's Structured Data.
144 *
145 * @param array $attr Array containing the phone block attributes.
146 * @param string $content String containing the phone block content.
147 *
148 * @return string
149 */
150 public static function render_phone( $attr, $content ) {
151 if ( self::has_attributes( $attr, array( 'className' ) ) ) {
152 return str_replace(
153 array( '<a href="tel:', '</a>' ),
154 array( '<span itemprop="telephone"><a href="tel:', '</a></span>' ),
155 $content
156 );
157 }
158
159 return '';
160 }
161 }
162