| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- /**
- * Class Jetpack_Contact_Info_Block
- *
- * @package automattic/jetpack
- */
- /**
- * Helper class that lets us add schema attributes dynamically because they are not something that is store with the content.
- * Due to the limitations of wp_kses.
- *
- * @since 7.1.0
- */
- class Jetpack_Contact_Info_Block {
- /**
- * Adds contact info schema attributes.
- *
- * @param array $attr Array containing the contact info block attributes.
- * @param string $content String containing the contact info block content.
- *
- * @return string
- */
- public static function render( $attr, $content ) {
- Jetpack_Gutenberg::load_styles_as_required( 'contact-info' );
- return str_replace(
- 'class="wp-block-jetpack-contact-info', // Closing " intentionally ommited to that the user can also add the className as expected.
- 'itemprop="location" itemscope itemtype="http://schema.org/Organization" class="wp-block-jetpack-contact-info',
- $content
- );
- }
- /**
- * Adds address schema attributes.
- *
- * @param array $attr Array containing the address block attributes.
- * @param string $content String containing the address block content.
- *
- * @return string
- */
- public static function render_address( $attr, $content ) {
- // Returns empty content if the only attribute set is linkToGoogleMaps.
- if ( ! self::has_attributes( $attr, array( 'linkToGoogleMaps', 'className' ) ) ) {
- return '';
- }
- $find = array(
- 'class="wp-block-jetpack-address"',
- 'class="jetpack-address__address',
- // Closing " left out on purpose - there are multiple address fields and they all need to be updated with the same itemprop.
- 'class="jetpack-address__region"',
- 'class="jetpack-address__city"',
- 'class="jetpack-address__postal"',
- 'class="jetpack-address__country"',
- );
- $replace = array(
- 'itemprop="address" itemscope itemtype="http://schema.org/PostalAddress" class="wp-block-jetpack-address" ',
- 'itemprop="streetAddress" class="jetpack-address__address', // Closing " left out on purpose.
- 'itemprop="addressRegion" class="jetpack-address__region"',
- 'itemprop="addressLocality" class="jetpack-address__city"',
- 'itemprop="postalCode" class="jetpack-address__postal"',
- 'itemprop="addressCountry" class="jetpack-address__country"',
- );
- return str_replace( $find, $replace, $content );
- }
- /**
- * Helper function that lets us determine if a block has any valid attributes.
- *
- * @param array $attr Array containing the block attributes.
- * @param array $omit Array containing the block attributes that we ignore.
- *
- * @return string
- */
- public static function has_attributes( $attr, $omit = array() ) {
- foreach ( $attr as $attribute => $value ) {
- if ( ! in_array( $attribute, $omit, true ) && ! empty( $value ) ) {
- return true;
- }
- }
- return false;
- }
- /**
- * Adds email schema attributes.
- *
- * @param array $attr Array containing the email block attributes.
- * @param string $content String containing the email block content.
- *
- * @return string
- */
- public static function render_email( $attr, $content ) {
- $content = self::has_attributes( $attr, array( 'className' ) ) ?
- str_replace( 'href="mailto:', 'itemprop="email" href="mailto:', $content ) :
- '';
- return $content;
- }
- /**
- * Adds phone schema attributes. Also wraps the tel link in a span so that
- * it's recognized as a telephone number in Google's Structured Data.
- *
- * @param array $attr Array containing the phone block attributes.
- * @param string $content String containing the phone block content.
- *
- * @return string
- */
- public static function render_phone( $attr, $content ) {
- if ( self::has_attributes( $attr, array( 'className' ) ) ) {
- return str_replace(
- array( '<a href="tel:', '</a>' ),
- array( '<span itemprop="telephone"><a href="tel:', '</a></span>' ),
- $content
- );
- }
- return '';
- }
- }
|