Add upstream
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
/**
|
||||
* Class Jetpack_Contact_Info_Block
|
||||
*
|
||||
* @package 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.
|
||||
*
|
||||
* @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 ) {
|
||||
$content = self::has_attributes( $attr, array( 'className' ) ) ?
|
||||
str_replace( 'href="tel:', 'itemprop="telephone" href="tel:', $content ) :
|
||||
'';
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Contact Info block and its child blocks.
|
||||
*
|
||||
* @since 7.1.0
|
||||
*
|
||||
* @package Jetpack
|
||||
*/
|
||||
|
||||
jetpack_register_block(
|
||||
'jetpack/contact-info',
|
||||
array(
|
||||
'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render' ),
|
||||
)
|
||||
);
|
||||
|
||||
jetpack_register_block(
|
||||
'jetpack/address',
|
||||
array(
|
||||
'parent' => array( 'jetpack/contact-info' ),
|
||||
'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_address' ),
|
||||
)
|
||||
);
|
||||
|
||||
jetpack_register_block(
|
||||
'jetpack/email',
|
||||
array(
|
||||
'parent' => array( 'jetpack/contact-info' ),
|
||||
'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_email' ),
|
||||
)
|
||||
);
|
||||
|
||||
jetpack_register_block(
|
||||
'jetpack/phone',
|
||||
array(
|
||||
'parent' => array( 'jetpack/contact-info' ),
|
||||
'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_phone' ),
|
||||
)
|
||||
);
|
||||
require_once dirname( __FILE__ ) . '/class-jetpack-contact-info-block.php';
|
||||
Reference in New Issue
Block a user