forked from LiveCarta/LiveCartaWP
103 lines
2.8 KiB
PHP
103 lines
2.8 KiB
PHP
<?php
|
|
/* IndexNow class */
|
|
|
|
class GoogleSitemapGeneratorIndexNow {
|
|
|
|
private $siteUrl;
|
|
private $version;
|
|
private $prefix = "gsg_indexnow-";
|
|
|
|
public function start($indexUrl){
|
|
$this->siteUrl = get_home_url();
|
|
$this->version = $this->getVersion();
|
|
$apiKey = $this->getApiKey();
|
|
|
|
return $this->sendToIndex($this->siteUrl, $indexUrl, $apiKey, false);
|
|
}
|
|
|
|
public function getApiKey() {
|
|
$meta_key = $this->prefix . "admin_api_key";
|
|
$apiKey = is_multisite() ? get_site_option($meta_key) : get_option($meta_key);
|
|
if ($apiKey) return base64_decode($apiKey);
|
|
|
|
return false;
|
|
}
|
|
|
|
private function sendToIndex($site_url, $url, $api_key, $is_manual_submission){
|
|
|
|
$data = json_encode(
|
|
array(
|
|
'host' => $this->remove_scheme( $site_url ),
|
|
'key' => $api_key,
|
|
'keyLocation' => trailingslashit( $site_url ) . $api_key . '.txt',
|
|
'urlList' => array( $url ),
|
|
)
|
|
);
|
|
|
|
$response = wp_remote_post(
|
|
'https://api.indexnow.org/indexnow/',
|
|
array(
|
|
'body' => $data,
|
|
'headers' => array(
|
|
'Content-Type' => 'application/json',
|
|
'X-Source-Info' => 'https://wordpress.com/' . $this->version . '/' . $is_manual_submission
|
|
),
|
|
)
|
|
);
|
|
|
|
if (is_wp_error( $response )) {
|
|
if ( true === WP_DEBUG && true === WP_DEBUG_LOG) {
|
|
error_log(__METHOD__ . " error:WP_Error: ".$response->get_error_message()) ;
|
|
}
|
|
return "error:WP_Error";
|
|
}
|
|
if ( isset( $response['errors'] ) ) {
|
|
return 'error:RequestFailed';
|
|
}
|
|
try {
|
|
if (in_array($response['response']['code'], [200, 202])) {
|
|
return 'success';
|
|
} else {
|
|
if ( 400 === $response['response']['code'] ) {
|
|
return 'error:InvalidRequest';
|
|
} else
|
|
if ( 403 === $response['response']['code'] ) {
|
|
return 'error:InvalidApiKey';
|
|
} else
|
|
if ( 422 === $response['response']['code'] ) {
|
|
return 'error:InvalidUrl';
|
|
}else
|
|
if ( 429 === $response['response']['code'] ) {
|
|
return 'error:UnknownError';
|
|
}else {
|
|
return 'error: ' . $response['response']['message'];
|
|
if ( true === WP_DEBUG && true === WP_DEBUG_LOG) {
|
|
error_log(__METHOD__ . " body : ". json_decode($response['body'])->message) ;
|
|
}
|
|
}
|
|
}
|
|
} catch ( \Throwable $th ) {
|
|
return 'error:RequestFailed';
|
|
}
|
|
|
|
}
|
|
|
|
private function remove_scheme( $url ) {
|
|
if ( 'http://' === substr( $url, 0, 7 ) ) {
|
|
return substr( $url, 7 );
|
|
}
|
|
if ( 'https://' === substr( $url, 0, 8 ) ) {
|
|
return substr( $url, 8 );
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
private function getVersion(){
|
|
if ( isset( $GLOBALS['sm_version']) ) {
|
|
$this->version = $GLOBALS['sm_version'];
|
|
} else {
|
|
$this->version = '1.0.1';
|
|
}
|
|
}
|
|
|
|
} |