Yoast\WP\SEO\Dashboard\User_Interface\Time_Based_SEO_Metrics
Time_Based_SEO_Metrics_Route{} │ Yoast 1.0
Abstract scores route.
Хуков нет.
Использование
$Time_Based_SEO_Metrics_Route = new Time_Based_SEO_Metrics_Route(); // use class methods
Методы
- public __construct(
- public static get_conditionals()
- public get_time_based_seo_metrics( WP_REST_Request $request )
- public permission_manage_options()
- public register_routes()
- public set_comparison_date_range_parameters( Parameters $request_parameters )
- public set_date_range_parameters( Parameters $request_parameters )
Код Time_Based_SEO_Metrics_Route{} Time Based SEO Metrics Route{} Yoast 25.0
final class Time_Based_SEO_Metrics_Route implements Route_Interface { /** * The namespace of the route. * * @var string */ public const ROUTE_NAMESPACE = Main::API_V1_NAMESPACE; /** * The prefix of the route. * * @var string */ public const ROUTE_NAME = '/time_based_seo_metrics'; /** * The data provider for page based search rankings. * * @var Top_Page_Repository */ private $top_page_repository; /** * The data provider for query based search rankings. * * @var Top_Query_Repository */ private $top_query_repository; /** * The data provider for comparison organic session traffic. * * @var Organic_Sessions_Compare_Repository */ private $organic_sessions_compare_repository; /** * The data provider for daily organic session traffic. * * @var Organic_Sessions_Daily_Repository */ private $organic_sessions_daily_repository; /** * The data provider for searching ranking comparison. * * @var Search_Ranking_Compare_Repository */ private $search_ranking_compare_repository; /** * Holds the capabilit helper instance. * * @var Capability_Helper */ private $capability_helper; /** * Returns the needed conditionals. * * @return array<string> The conditionals that must be met to load this. */ public static function get_conditionals(): array { return [ Google_Site_Kit_Feature_Conditional::class ]; } /** * The constructor. * * @param Top_Page_Repository $top_page_repository The data provider for page based search rankings. * @param Top_Query_Repository $top_query_repository The data provider for query based search rankings. * @param Organic_Sessions_Compare_Repository $organic_sessions_compare_repository The data provider for comparison organic session traffic. * @param Organic_Sessions_Daily_Repository $organic_sessions_daily_repository The data provider for daily organic session traffic. * @param Search_Ranking_Compare_Repository $search_ranking_compare_repository The data provider for searching ranking comparison. * @param Capability_Helper $capability_helper The capability helper. */ public function __construct( Top_Page_Repository $top_page_repository, Top_Query_Repository $top_query_repository, Organic_Sessions_Compare_Repository $organic_sessions_compare_repository, Organic_Sessions_Daily_Repository $organic_sessions_daily_repository, Search_Ranking_Compare_Repository $search_ranking_compare_repository, Capability_Helper $capability_helper ) { $this->top_page_repository = $top_page_repository; $this->top_query_repository = $top_query_repository; $this->organic_sessions_compare_repository = $organic_sessions_compare_repository; $this->organic_sessions_daily_repository = $organic_sessions_daily_repository; $this->search_ranking_compare_repository = $search_ranking_compare_repository; $this->capability_helper = $capability_helper; } /** * Registers routes for scores. * * @return void */ public function register_routes() { \register_rest_route( self::ROUTE_NAMESPACE, self::ROUTE_NAME, [ [ 'methods' => 'GET', 'callback' => [ $this, 'get_time_based_seo_metrics' ], 'permission_callback' => [ $this, 'permission_manage_options' ], 'args' => [ 'limit' => [ 'type' => 'int', 'sanitize_callback' => 'absint', 'default' => 5, ], 'options' => [ 'type' => 'object', 'required' => true, 'properties' => [ 'widget' => [ 'type' => 'string', 'required' => true, 'sanitize_callback' => 'sanitize_text_field', ], ], ], ], ], ] ); } /** * Gets the time based SEO metrics. * * @param WP_REST_Request $request The request object. * * @return WP_REST_Response The success or failure response. * * @throws Repository_Not_Found_Exception When the given widget name is not implemented yet. */ public function get_time_based_seo_metrics( WP_REST_Request $request ): WP_REST_Response { try { $widget_name = $request->get_param( 'options' )['widget']; switch ( $widget_name ) { case 'query': $request_parameters = new Search_Console_Parameters(); $request_parameters = $this->set_date_range_parameters( $request_parameters ); $request_parameters->set_limit( $request->get_param( 'limit' ) ); $request_parameters->set_dimensions( [ 'query' ] ); $time_based_seo_metrics_container = $this->top_query_repository->get_data( $request_parameters ); break; case 'page': $request_parameters = new Search_Console_Parameters(); $request_parameters = $this->set_date_range_parameters( $request_parameters ); $request_parameters->set_limit( $request->get_param( 'limit' ) ); $request_parameters->set_dimensions( [ 'page' ] ); $time_based_seo_metrics_container = $this->top_page_repository->get_data( $request_parameters ); break; case 'organicSessionsDaily': $request_parameters = new Analytics_4_Parameters(); $request_parameters = $this->set_date_range_parameters( $request_parameters ); $request_parameters->set_dimensions( [ 'date' ] ); $request_parameters->set_metrics( [ 'sessions' ] ); $request_parameters->set_dimension_filters( [ 'sessionDefaultChannelGrouping' => [ 'Organic Search' ] ] ); $request_parameters->set_order_by( 'dimension', 'date' ); $time_based_seo_metrics_container = $this->organic_sessions_daily_repository->get_data( $request_parameters ); break; case 'organicSessionsCompare': $request_parameters = new Analytics_4_Parameters(); $request_parameters = $this->set_date_range_parameters( $request_parameters ); $request_parameters = $this->set_comparison_date_range_parameters( $request_parameters ); $request_parameters->set_metrics( [ 'sessions' ] ); $request_parameters->set_dimension_filters( [ 'sessionDefaultChannelGrouping' => [ 'Organic Search' ] ] ); $time_based_seo_metrics_container = $this->organic_sessions_compare_repository->get_data( $request_parameters ); break; case 'searchRankingCompare': $request_parameters = new Search_Console_Parameters(); $request_parameters = $this->set_date_range_parameters( $request_parameters ); $request_parameters = $this->set_comparison_date_range_parameters( $request_parameters ); $request_parameters->set_dimensions( [ 'date' ] ); $time_based_seo_metrics_container = $this->search_ranking_compare_repository->get_data( $request_parameters ); break; default: throw new Repository_Not_Found_Exception(); } } catch ( Exception $exception ) { return new WP_REST_Response( [ 'error' => $exception->getMessage(), ], $exception->getCode() ); } return new WP_REST_Response( $time_based_seo_metrics_container->to_array(), 200 ); } /** * Sets date range parameters. * * @param Parameters $request_parameters The request parameters. * * @return Parameters The request parameters with configured date range. */ public function set_date_range_parameters( Parameters $request_parameters ): Parameters { $date = new DateTime( 'now', new DateTimeZone( 'UTC' ) ); $date->modify( '-28 days' ); $start_date = $date->format( 'Y-m-d' ); $date = new DateTime( 'now', new DateTimeZone( 'UTC' ) ); $date->modify( '-1 days' ); $end_date = $date->format( 'Y-m-d' ); $request_parameters->set_start_date( $start_date ); $request_parameters->set_end_date( $end_date ); return $request_parameters; } /** * Sets comparison date range parameters. * * @param Parameters $request_parameters The request parameters. * * @return Parameters The request parameters with configured comparison date range. */ public function set_comparison_date_range_parameters( Parameters $request_parameters ): Parameters { $date = new DateTime( 'now', new DateTimeZone( 'UTC' ) ); $date->modify( '-29 days' ); $compare_end_date = $date->format( 'Y-m-d' ); $date->modify( '-27 days' ); $compare_start_date = $date->format( 'Y-m-d' ); $request_parameters->set_compare_start_date( $compare_start_date ); $request_parameters->set_compare_end_date( $compare_end_date ); return $request_parameters; } /** * Permission callback. * * @return bool True when user has the 'wpseo_manage_options' capability. */ public function permission_manage_options() { return $this->capability_helper->current_user_can( 'wpseo_manage_options' ); } }