Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
<?php
|
||||
/**
|
||||
* The Local_Seo Module
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMathPro
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMathPro\Local_Seo;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Sitemap\Cache_Watcher;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Local_Seo class.
|
||||
*/
|
||||
class Local_Seo {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Post Singular Name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $post_singular_name = 'Location';
|
||||
|
||||
/**
|
||||
* Post Type.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $post_type = 'rank_math_locations';
|
||||
|
||||
/**
|
||||
* The Constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->action( 'init', 'init' );
|
||||
$this->action( 'rank_math/schema/update', 'update_post_schema_info', 10, 2 );
|
||||
$this->action( 'save_post', 'invalidate_cache' );
|
||||
|
||||
$this->filter( 'classic_editor_enabled_editors_for_post_type', 'force_block_editor', 20, 2 );
|
||||
$this->filter( 'rank_math/sitemap/locations', 'add_kml_file' );
|
||||
|
||||
$this->filter( "manage_{$this->post_type}_posts_columns", 'posts_columns' );
|
||||
$this->filter( "manage_{$this->post_type}_posts_custom_column", 'posts_custom_column', 10, 2 );
|
||||
$this->filter( "bulk_actions-edit-{$this->post_type}", 'post_bulk_actions', 20 );
|
||||
|
||||
$this->includes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update post info for analytics.
|
||||
*
|
||||
* @param int $object_id Object ID.
|
||||
* @param array $schemas Schema data.
|
||||
* @param string $object_type Object type.
|
||||
*/
|
||||
public function update_post_schema_info( $object_id, $schemas, $object_type = 'post' ) {
|
||||
if ( 'post' !== $object_type || 'rank_math_locations' !== get_post_type( $object_id ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$schema = current( $schemas );
|
||||
if ( ! isset( $schema['geo'], $schema['geo']['latitude'], $schema['geo']['longitude'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
update_post_meta( $object_id, 'rank_math_local_business_latitide', $schema['geo']['latitude'] );
|
||||
update_post_meta( $object_id, 'rank_math_local_business_longitude', $schema['geo']['longitude'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Intialize.
|
||||
*/
|
||||
public function init() {
|
||||
if ( ! Helper::get_settings( 'titles.use_multiple_locations', false ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->post_singular_name = Helper::get_settings( 'titles.locations_post_type_label', 'Location' );
|
||||
|
||||
$this->register_location_post_type();
|
||||
$this->register_location_taxonomy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the editors that are enabled for the post type.
|
||||
*
|
||||
* @param array $editors Associative array of the editors and whether they are enabled for the post type.
|
||||
* @param string $post_type The post type.
|
||||
*/
|
||||
public function force_block_editor( $editors, $post_type ) {
|
||||
if ( 'rank_math_locations' !== $post_type || ! $this->do_filter( 'schema/cpt_force_gutenberg', true ) ) {
|
||||
return $editors;
|
||||
}
|
||||
|
||||
$editors['classic_editor'] = false;
|
||||
return $editors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Locations KML file in the sitemap
|
||||
*/
|
||||
public function add_kml_file() {
|
||||
return Helper::get_settings( 'sitemap.local_sitemap', true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Include required files.
|
||||
*/
|
||||
private function includes() {
|
||||
if ( is_admin() ) {
|
||||
new Admin();
|
||||
new RM_Pointers();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Helper::get_settings( 'titles.use_multiple_locations', false ) ) {
|
||||
new Frontend();
|
||||
new Location_Shortcode();
|
||||
new KML_File();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Locations post type.
|
||||
*/
|
||||
private function register_location_post_type() {
|
||||
$plural_label = Helper::get_settings( 'titles.locations_post_type_plural_label', 'RM Locations' );
|
||||
$post_type_slug = Helper::get_settings( 'titles.locations_post_type_base', 'locations' );
|
||||
$labels = [
|
||||
'name' => $this->post_singular_name,
|
||||
'singular_name' => $this->post_singular_name,
|
||||
'menu_name' => $plural_label,
|
||||
/* translators: Post Type Plural Name */
|
||||
'all_items' => sprintf( esc_html__( 'All %s', 'rank-math-pro' ), $plural_label ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'add_new_item' => sprintf( esc_html__( 'Add New %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'new_item' => sprintf( esc_html__( 'New %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'edit_item' => sprintf( esc_html__( 'Edit %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'update_item' => sprintf( esc_html__( 'Update %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'view_item' => sprintf( esc_html__( 'View %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Plural Name */
|
||||
'view_items' => sprintf( esc_html__( 'View %s', 'rank-math-pro' ), $plural_label ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'search_items' => sprintf( esc_html__( 'Search %s', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'not_found' => sprintf( esc_html__( 'No %s found.', 'rank-math-pro' ), $plural_label ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'not_found_in_trash' => sprintf( esc_html__( 'No %s found in Trash.', 'rank-math-pro' ), $plural_label ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'item_published' => sprintf( esc_html__( '%s published.', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'item_published_privately' => sprintf( esc_html__( '%s published privately.', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'item_reverted_to_draft' => sprintf( esc_html__( '%s reverted to draft.', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'item_scheduled' => sprintf( esc_html__( '%s scheduled.', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'item_updated' => sprintf( esc_html__( '%s updated.', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
];
|
||||
|
||||
$capability = 'rank_math_general';
|
||||
$args = [
|
||||
'label' => $this->post_singular_name,
|
||||
'labels' => $labels,
|
||||
'public' => true,
|
||||
'publicly_queryable' => true,
|
||||
'show_ui' => true,
|
||||
'hierarchical' => false,
|
||||
'has_archive' => $post_type_slug,
|
||||
'menu_icon' => 'dashicons-location',
|
||||
'query_var' => true,
|
||||
'show_in_rest' => true,
|
||||
'rest_base' => 'rank-math-locations',
|
||||
'supports' => [ 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'revisions', 'custom-fields', 'page-attributes', 'publicize' ],
|
||||
'rewrite' => [
|
||||
'slug' => $post_type_slug,
|
||||
'with_front' => $this->filter( 'locations/front', true ),
|
||||
],
|
||||
'capabilities' => [
|
||||
'edit_post' => $capability,
|
||||
'read_post' => $capability,
|
||||
'delete_post' => $capability,
|
||||
'edit_posts' => $capability,
|
||||
'edit_others_posts' => $capability,
|
||||
'publish_posts' => $capability,
|
||||
'read_private_posts' => $capability,
|
||||
'create_posts' => $capability,
|
||||
],
|
||||
];
|
||||
|
||||
register_post_type( $this->post_type, $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Locations Category taxonomy.
|
||||
*/
|
||||
private function register_location_taxonomy() {
|
||||
$category_slug = esc_html( Helper::get_settings( 'titles.locations_category_base', 'locations-category' ) );
|
||||
$labels = [
|
||||
/* translators: Post Type Singular Name */
|
||||
'name' => sprintf( esc_html__( '%s categories', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'singular_name' => sprintf( esc_html__( '%s category', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'all_items' => sprintf( esc_html__( 'All %s categories', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'edit_item' => sprintf( esc_html__( 'Edit %s category', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'update_item' => sprintf( esc_html__( 'Update %s category', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'add_new_item' => sprintf( esc_html__( 'Add New %s category', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'new_item_name' => sprintf( esc_html__( 'New %s category', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
/* translators: Post Type Singular Name */
|
||||
'menu_name' => sprintf( esc_html__( '%s categories', 'rank-math-pro' ), $this->post_singular_name ),
|
||||
'search_items' => esc_html__( 'Search categories', 'rank-math-pro' ),
|
||||
'parent_item' => esc_html__( 'Parent Category', 'rank-math-pro' ),
|
||||
'parent_item_colon' => esc_html__( 'Parent Category:', 'rank-math-pro' ),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'hierarchical' => true,
|
||||
'labels' => $labels,
|
||||
'show_ui' => true,
|
||||
'show_admin_column' => true,
|
||||
'query_var' => true,
|
||||
'show_in_rest' => true,
|
||||
'rewrite' => [ 'slug' => $category_slug ],
|
||||
];
|
||||
|
||||
register_taxonomy( 'rank_math_location_category', [ $this->post_type ], $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for relevant post type before invalidation.
|
||||
*
|
||||
* @param int $post_id Post ID to possibly invalidate for.
|
||||
*/
|
||||
public function invalidate_cache( $post_id ) {
|
||||
if ( get_post_type( $post_id ) !== $this->post_type ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Cache_Watcher::clear( [ 'locations' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add custom columns for post type.
|
||||
*
|
||||
* @param array $columns Current columns.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function posts_columns( $columns ) {
|
||||
$columns['address'] = __( 'Address', 'rank-math-pro' );
|
||||
$columns['telephone'] = __( 'Phone', 'rank-math-pro' );
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the content in the custom columns.
|
||||
*
|
||||
* @param string $column Column name.
|
||||
* @param int $post_id Post ID.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function posts_custom_column( $column, $post_id ) {
|
||||
$schemas = \RankMath\Schema\DB::get_schemas( $post_id );
|
||||
if ( empty( $schemas ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$schema = reset( $schemas );
|
||||
if ( empty( $schema[ $column ] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( $column ) {
|
||||
case 'address':
|
||||
unset( $schema['address']['@type'] );
|
||||
echo esc_html( join( ' ', $schema['address'] ) );
|
||||
break;
|
||||
|
||||
case 'telephone':
|
||||
echo esc_html( $schema['telephone'] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove unneeded bulk actions.
|
||||
*
|
||||
* @param array $actions Actions.
|
||||
* @return array New actions.
|
||||
*/
|
||||
public function post_bulk_actions( $actions ) {
|
||||
unset( $actions['rank_math_bulk_schema_none'], $actions['rank_math_bulk_schema_default'] );
|
||||
return $actions;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user