97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * The KML File
 | 
						|
 *
 | 
						|
 * @since      2.1.2
 | 
						|
 * @package    RankMath
 | 
						|
 * @subpackage RankMathPro\Local_Seo
 | 
						|
 * @author     Rank Math <support@rankmath.com>
 | 
						|
 */
 | 
						|
 | 
						|
namespace RankMathPro\Local_Seo;
 | 
						|
 | 
						|
use RankMath\Helper;
 | 
						|
use RankMath\Traits\Hooker;
 | 
						|
use RankMath\Sitemap\Cache_Watcher;
 | 
						|
use RankMath\Schema\DB;
 | 
						|
 | 
						|
defined( 'ABSPATH' ) || exit;
 | 
						|
 | 
						|
/**
 | 
						|
 * KML_File class.
 | 
						|
 */
 | 
						|
class KML_File {
 | 
						|
 | 
						|
	use Hooker;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The Constructor.
 | 
						|
	 */
 | 
						|
	public function __construct() {
 | 
						|
		$this->filter( 'rank_math/sitemap/locations/data', 'add_location_data' );
 | 
						|
		$this->action( 'save_post_rank_math_locations', 'save_post' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Check for relevant post type before invalidation.
 | 
						|
	 *
 | 
						|
	 * @param int $post_id Post ID to possibly invalidate for.
 | 
						|
	 */
 | 
						|
	public function save_post( $post_id ) {
 | 
						|
		if (
 | 
						|
			wp_is_post_revision( $post_id ) ||
 | 
						|
			false === Helper::is_post_indexable( $post_id )
 | 
						|
		) {
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		Cache_Watcher::invalidate( 'locations' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Generate the KML file contents.
 | 
						|
	 *
 | 
						|
	 * @return string $kml KML file content.
 | 
						|
	 */
 | 
						|
	public function add_location_data() {
 | 
						|
		$rm_locations = get_posts(
 | 
						|
			[
 | 
						|
				'post_type'   => 'rank_math_locations',
 | 
						|
				'numberposts' => -1,
 | 
						|
			]
 | 
						|
		);
 | 
						|
		if ( empty( $rm_locations ) ) {
 | 
						|
			return [];
 | 
						|
		}
 | 
						|
 | 
						|
		$locations = [];
 | 
						|
		foreach ( $rm_locations as $rm_location ) {
 | 
						|
			$locations_data = current( DB::get_schemas( $rm_location->ID ) );
 | 
						|
			if ( empty( $locations_data ) ) {
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			rank_math()->variables->setup();
 | 
						|
			$name        = ! empty( $locations_data['name'] ) ? $locations_data['name'] : '%seo_title%';
 | 
						|
			$description = ! empty( $locations_data['description'] ) ? $locations_data['description'] : '%seo_description%';
 | 
						|
			$address     = '';
 | 
						|
			if ( ! empty( $locations_data['address'] ) && isset( $locations_data['address']['@type'] ) ) {
 | 
						|
				unset( $locations_data['address']['@type'] );
 | 
						|
				$address = $locations_data['address'];
 | 
						|
			}
 | 
						|
 | 
						|
			$locations[] = [
 | 
						|
				'name'        => Helper::replace_vars( $name, $rm_location ),
 | 
						|
				'description' => Helper::replace_vars( $description, $rm_location ),
 | 
						|
				'email'       => ! empty( $locations_data['email'] ) ? Helper::replace_vars( $locations_data['email'], $rm_location ) : '',
 | 
						|
				'phone'       => ! empty( $locations_data['telephone'] ) ? Helper::replace_vars( $locations_data['telephone'], $rm_location ) : '',
 | 
						|
				'url'         => get_the_permalink( $rm_location ),
 | 
						|
				'address'     => ! empty( $locations_data['address'] ) ? $locations_data['address'] : '',
 | 
						|
				'coords'      => ! empty( $locations_data['geo'] ) ? $locations_data['geo'] : '',
 | 
						|
			];
 | 
						|
		}
 | 
						|
 | 
						|
		return $locations;
 | 
						|
	}
 | 
						|
}
 |