PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 28.6
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v28.6
28.6 28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 All 130 releases
wordpress-seo / src / dashboard / domain / search-rankings / comparison-search-ranking-data.php

comparison-search-ranking-data.php in Yoast SEO – Advanced SEO with real-time guidance and built-in AI 28.6, at src/dashboard/domain/search-rankings/comparison-search-ranking-data.php

89 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
4 namespace Yoast\WP\SEO\Dashboard\Domain\Search_Rankings;
5
6 use Yoast\WP\SEO\Dashboard\Domain\Data_Provider\Data_Interface;
7
8 /**
9 * Domain object that represents a Comparison Search Ranking record.
10 */
11 class Comparison_Search_Ranking_Data implements Data_Interface {
12
13 /**
14 * The current search ranking data.
15 *
16 * @var Search_Ranking_Data[]
17 */
18 private $current_search_ranking_data = [];
19
20 /**
21 * The previous search ranking data.
22 *
23 * @var Search_Ranking_Data[]
24 */
25 private $previous_search_ranking_data = [];
26
27 /**
28 * Sets the current search ranking data.
29 *
30 * @param Search_Ranking_Data $current_search_ranking_data The current search ranking data.
31 *
32 * @return void
33 */
34 public function add_current_traffic_data( Search_Ranking_Data $current_search_ranking_data ): void {
35 \array_push( $this->current_search_ranking_data, $current_search_ranking_data );
36 }
37
38 /**
39 * Sets the previous search ranking data.
40 *
41 * @param Search_Ranking_Data $previous_search_ranking_data The previous search ranking data.
42 *
43 * @return void
44 */
45 public function add_previous_traffic_data( Search_Ranking_Data $previous_search_ranking_data ): void {
46 \array_push( $this->previous_search_ranking_data, $previous_search_ranking_data );
47 }
48
49 /**
50 * The array representation of this domain object.
51 *
52 * @return array<array<string, int>>
53 */
54 public function to_array(): array {
55 return [
56 'current' => $this->parse_data( $this->current_search_ranking_data ),
57 'previous' => $this->parse_data( $this->previous_search_ranking_data ),
58 ];
59 }
60
61 /**
62 * Parses search ranking data into the expected format.
63 *
64 * @param Search_Ranking_Data[] $search_ranking_data The search ranking data to be parsed.
65 *
66 * @return array<string, int> The parsed data
67 */
68 private function parse_data( array $search_ranking_data ): array {
69 $parsed_data = [
70 'total_clicks' => 0,
71 'total_impressions' => 0,
72 ];
73 $weighted_postion = 0;
74
75 foreach ( $search_ranking_data as $search_ranking ) {
76 $parsed_data['total_clicks'] += $search_ranking->get_clicks();
77 $parsed_data['total_impressions'] += $search_ranking->get_impressions();
78 $weighted_postion += ( $search_ranking->get_position() * $search_ranking->get_impressions() );
79 }
80
81 if ( $parsed_data['total_impressions'] !== 0 ) {
82 $parsed_data['average_ctr'] = ( $parsed_data['total_clicks'] / $parsed_data['total_impressions'] );
83 $parsed_data['average_position'] = ( $weighted_postion / $parsed_data['total_impressions'] );
84 }
85
86 return $parsed_data;
87 }
88 }
89