: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace Yoast\WP\SEO\Actions\SEMrush;
use Yoast\WP\SEO\Config\SEMrush_Client;
* Class SEMrush_Phrases_Action
class SEMrush_Phrases_Action {
* The transient cache key.
public const TRANSIENT_CACHE_KEY = 'wpseo_semrush_related_keyphrases_%s_%s';
* The SEMrush keyphrase URL.
public const KEYPHRASES_URL = 'https://oauth.semrush.com/api/v1/keywords/phrase_fullsearch';
* The SEMrush_Client instance.
* SEMrush_Phrases_Action constructor.
* @param SEMrush_Client $client The API client.
public function __construct( SEMrush_Client $client ) {
* Gets the related keyphrases and data based on the passed keyphrase and database country code.
* @param string $keyphrase The keyphrase to search for.
* @param string $database The database's country code.
* @return object The response object.
public function get_related_keyphrases( $keyphrase, $database ) {
$transient_key = \sprintf( static::TRANSIENT_CACHE_KEY, $keyphrase, $database );
$transient = \get_transient( $transient_key );
if ( $transient !== false ) {
return $this->to_result_object( $transient );
'export_columns' => 'Ph,Nq,Td',
'display_sort' => 'nq_desc',
'display_filter' => '%2B|Nq|Lt|1000',
$results = $this->client->get( self::KEYPHRASES_URL, $options );
\set_transient( $transient_key, $results, \DAY_IN_SECONDS );
return $this->to_result_object( $results );
} catch ( Exception $e ) {
'error' => $e->getMessage(),
'status' => $e->getCode(),
* Converts the passed dataset to an object.
* @param array $result The result dataset to convert to an object.
* @return object The result object.
protected function to_result_object( $result ) {
'results' => $result['data'],
'status' => $result['status'],