You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
5.8 KiB
PHP

<?php
/**
* The Yoast Local Business Block Converter.
*
* @since 1.0.48
* @package RankMath
* @subpackage RankMath\Status
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\Tools;
use RankMath\Helper;
defined( 'ABSPATH' ) || exit;
/**
* Yoast_Local_Converter class.
*/
class Yoast_Local_Converter {
/**
* Yoast's Local Business Blocks.
*
* @var array
*/
public $yoast_blocks = [
'yoast-seo-local/store-locator',
'yoast-seo-local/address',
'yoast-seo-local/map',
'yoast-seo-local/opening-hours',
];
/**
* Convert Local Business blocks to Rank Math.
*
* @param array $block Block to convert.
*
* @return array
*/
public function convert( $block ) {
$block['attrs']['type'] = str_replace( 'yoast-seo-local/', '', $block['blockName'] );
$new_block = [
'blockName' => 'rank-math/local-business',
'attrs' => $this->get_attributes( $block['attrs'] ),
];
$new_block['innerContent'] = '';
return $new_block;
}
/**
* Replace block in content.
*
* @param string $post_content Post content.
* @param array $blocks Blocks.
*
* @return string
*/
public function replace( $post_content, $blocks ) {
foreach ( $blocks as $block_name => $block ) {
if ( ! in_array( $block_name, $this->yoast_blocks, true ) ) {
continue;
}
$block_name = str_replace( 'yoast-seo-local/', '', $block_name );
preg_match_all( "/<!-- wp:yoast-seo-local\/{$block_name}.*-->.*<!-- \/wp:yoast-seo-local\/{$block_name} -->/iUs", $post_content, $matches );
foreach ( $matches[0] as $index => $match ) {
$post_content = \str_replace( $match, $block[ $index ], $post_content );
}
}
return $post_content;
}
/**
* Get Block attributes.
*
* @param array $attrs Yoast Block Attributes.
*/
private function get_attributes( $attrs ) {
$default_opening_days = 'Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday';
if ( 'opening-hours' === $attrs['type'] ) {
$days = explode( ', ', $default_opening_days );
$default_days = [];
foreach ( $days as $day ) {
if ( isset( $attrs[ "show{$day}" ] ) ) {
$default_days[ $day ] = ! empty( $attrs[ "show{$day}" ] );
}
}
if ( ! empty( $default_days ) ) {
$default_opening_days = implode( ',', array_filter( array_keys( $default_days ) ) );
}
}
return [
'type' => isset( $attrs['type'] ) ? $attrs['type'] : 'address',
'locations' => 0,
'terms' => [],
'limit' => isset( $attrs['maxNumber'] ) ? $attrs['maxNumber'] : 0,
'show_company_name' => isset( $attrs['hideName'] ) ? ! $attrs['hideName'] : true,
'show_company_address' => isset( $attrs['hideCompanyAddress'] ) ? ! $attrs['hideCompanyAddress'] : true,
'show_on_one_line' => isset( $attrs['showOnOneLine'] ) ? ! $attrs['showOnOneLine'] : false,
'show_state' => isset( $attrs['showState'] ) ? $attrs['showState'] : true,
'show_country' => isset( $attrs['showCountry'] ) ? $attrs['showCountry'] : true,
'show_telephone' => isset( $attrs['showPhone'] ) ? $attrs['showPhone'] : true,
'show_secondary_number' => isset( $attrs['showPhone2nd'] ) ? $attrs['showPhone2nd'] : true,
'show_fax' => isset( $attrs['showFax'] ) ? $attrs['showFax'] : false,
'show_email' => isset( $attrs['showEmail'] ) ? $attrs['showEmail'] : true,
'show_url' => isset( $attrs['showURL'] ) ? $attrs['showURL'] : true,
'show_logo' => isset( $attrs['showLogo'] ) ? $attrs['showLogo'] : true,
'show_vat_id' => isset( $attrs['showVatId'] ) ? $attrs['showVatId'] : false,
'show_tax_id' => isset( $attrs['showTaxId'] ) ? $attrs['showTaxId'] : false,
'show_coc_id' => isset( $attrs['showCocId'] ) ? $attrs['showCocId'] : false,
'show_priceRange' => isset( $attrs['showPriceRange'] ) ? $attrs['showPriceRange'] : false,
'show_opening_hours' => isset( $attrs['showOpeningHours'] ) ? $attrs['showOpeningHours'] : false,
'show_days' => $default_opening_days,
'hide_closed_days' => isset( $attrs['hideClosedDays'] ) ? $attrs['hideClosedDays'] : false,
'show_opening_now_label' => isset( $attrs['showOpenLabel'] ) ? $attrs['showOpenLabel'] : false,
'opening_hours_note' => isset( $attrs['extraComment'] ) ? $attrs['extraComment'] : '',
'show_map' => isset( $attrs['showMap'] ) ? $attrs['showMap'] : false,
'map_type' => isset( $attrs['mapType'] ) ? $attrs['mapType'] : 'roadmap',
'map_width' => isset( $attrs['mapWidth'] ) ? $attrs['mapWidth'] : '500',
'map_height' => isset( $attrs['mapHeight'] ) ? $attrs['mapHeight'] : '300',
'zoom_level' => isset( $attrs['zoomLevel'] ) ? $attrs['zoomLevel'] : -1,
'allow_zoom' => true,
'allow_scrolling' => isset( $attrs['allowScrolling'] ) ? $attrs['allowScrolling'] : true,
'allow_dragging' => isset( $attrs['allowDragging'] ) ? $attrs['allowDragging'] : true,
'show_route_planner' => isset( $attrs['showRoute'] ) ? $attrs['showRoute'] : true,
'route_label' => Helper::get_settings( 'titles.route_label' ),
'show_category_filter' => isset( $attrs['showCategoryFilter'] ) ? $attrs['showCategoryFilter'] : false,
'show_marker_clustering' => isset( $attrs['markerClustering'] ) ? $attrs['markerClustering'] : true,
'show_infowindow' => isset( $attrs['defaultShowInfoWindow'] ) ? $attrs['defaultShowInfoWindow'] : true,
'show_radius' => isset( $attrs['showRadius'] ) ? $attrs['showRadius'] : true,
'show_nearest_location' => isset( $attrs['showNearest'] ) ? $attrs['showNearest'] : true,
'search_radius' => isset( $attrs['searchRadius'] ) ? $attrs['searchRadius'] : '10',
];
}
}