Files
2026-04-28 15:13:50 +02:00

59 lines
1.8 KiB
PHP

<?php
namespace AIOSEO\Plugin\Pro\SearchStatistics;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\SearchStatistics as CommonSearchStatistics;
class RelatedKeywords {
/**
* The prefix to use for cache keys.
*
* @since 4.7.8
*
* @var string
*/
private $cachePrefix = 'aioseo_related_keywords_';
/**
* Get related keywords for a given keyword.
*
* @since 4.7.8
*
* @param string $keyword The keyword to find related terms for.
* @param int $limit The maximum number of related keywords to return.
* @return array An array of related keywords.
*/
public function getRelatedKeywords( $keyword, $limit = 10 ) {
$cacheKey = $this->cachePrefix . aioseo()->helpers->createHash( $keyword );
$cachedResults = aioseo()->core->cache->get( $cacheKey );
if ( null !== $cachedResults ) {
return array_filter( array_slice( (array) $cachedResults, 0, $limit ) );
}
$requestArgs = [
'keywords' => [ $keyword ],
];
$api = new CommonSearchStatistics\Api\Request( 'google-search-console/related-keywords/', $requestArgs, 'GET' );
$response = $api->request();
$results = false;
$expiration = MONTH_IN_SECONDS; // Set the default expiration to 1 month.
if ( is_wp_error( $response ) || ! empty( $response['error'] ) ) {
$expiration = MINUTE_IN_SECONDS; // Decrease the expiration in case the request was unsuccessful.
} elseif ( ! empty( $response['data'][ $keyword ] ) ) {
$results = $response['data'][ $keyword ];
$results = array_filter( $results, function ( $result ) use ( $keyword ) {
return $keyword !== $result;
} );
}
aioseo()->core->cache->update( $cacheKey, $results, $expiration );
return array_filter( array_slice( (array) $results, 0, $limit ) );
}
}