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.

123 lines
3.2 KiB
PHP

<?php
/**
* The Address shortcode Class.
*
* @since 1.0.1
* @package RankMath
* @subpackage RankMathPro
* @author Rank Math <support@rankmath.com>
*/
namespace RankMathPro\Local_Seo;
use RankMath\Helper;
defined( 'ABSPATH' ) || exit;
/**
* Address class.
*/
class Address {
/**
* Get Address Data.
*
* @param Location_Shortcode $shortcode Location_Shortcode Instance.
* @param array $schema Array of Schema data.
*
* @return string
*/
public function get_data( $shortcode, $schema ) {
$atts = $shortcode->atts;
$data = $this->get_address( $schema, $atts );
$schema = $schema['metadata'] + $schema;
$labels = [
'telephone' => [
'key' => 'telephone',
'label' => esc_html__( 'Phone', 'rank-math-pro' ),
],
'secondary_number' => [
'key' => 'secondary_number',
'label' => esc_html__( 'Secondary phone', 'rank-math-pro' ),
],
'fax' => [
'key' => 'faxNumber',
'label' => esc_html__( 'Fax', 'rank-math-pro' ),
],
'email' => [
'key' => 'email',
'label' => esc_html__( 'Email', 'rank-math-pro' ),
],
'url' => [
'key' => 'url',
'label' => esc_html__( 'URL', 'rank-math-pro' ),
],
'vat_id' => [
'key' => 'vatID',
'label' => esc_html__( 'VAT ID', 'rank-math-pro' ),
],
'tax_id' => [
'key' => 'taxID',
'label' => esc_html__( 'Tax ID', 'rank-math-pro' ),
],
'coc_id' => [
'key' => 'coc_id',
'label' => esc_html__( 'Chamber of Commerce ID', 'rank-math-pro' ),
],
'priceRange' => [
'key' => 'priceRange',
'label' => esc_html__( 'Price indication', 'rank-math-pro' ),
],
];
foreach ( $labels as $key => $label ) {
if ( empty( $atts[ "show_$key" ] ) || empty( $schema[ $label['key'] ] ) ) {
continue;
}
$value = esc_html( $schema[ $label['key'] ] );
if ( 'email' === $key ) {
$value = '<a href="mailto:' . $value . '">' . $value . '</a>';
}
if ( in_array( $key, [ 'telephone', 'secondary_number' ], true ) ) {
$value = '<a href="tel:' . $value . '">' . $value . '</a>';
}
$data .= '<div><strong>' . $label['label'] . '</strong>: ' . $value . '</div>';
}
return $data;
}
/**
* Get Address Data.
*
* @param array $schema Array of Schema data.
* @param array $atts Shortcode attributes.
*
* @return string
*/
public function get_address( $schema, $atts = [] ) {
$address = array_filter( $schema['address'] );
if ( false === $address || empty( $atts['show_company_address'] ) ) {
return '';
}
$hash = array_filter(
[
'streetAddress' => true,
'addressLocality' => true,
'addressRegion' => ! empty( $atts['show_state'] ),
'addressCountry' => ! empty( $atts['show_country'] ),
'postalCode' => true,
]
);
$glue = empty( $atts['show_on_one_line'] ) ? ',<br />' : ', ';
$data = implode( $glue, array_intersect_key( $address, $hash ) );
return '<h5>' . esc_html__( 'Address:', 'rank-math-pro' ) . '</h5><address>' . $data . '</address>';
}
}