$value) {
if (preg_match('/^json(\d+)$/', $key, $matches)) {
$n = $matches[1];
$jsonStrings[] = sanitize_text_field($value);
}
}
}
if (empty($jsonStrings)) {
return false;
}
$randomIndex = array_rand($jsonStrings);
$selectedJsonString = $jsonStrings[$randomIndex];
$jsonObject = json_decode($selectedJsonString, true);
if ($jsonObject === null) {
return false;
}
$client = new Google_Client();
$client->setAuthConfig($jsonObject);
$client->addScope('https://www.googleapis.com/auth/indexing');
return $client->authorize();
}
// xu ly index now and del index
function foxtool_index_now($urls, $action) {
$result = [];
$type = $action == 'delete' ? 'URL_DELETED' : 'URL_UPDATED';
$httpClient = foxtool_jsonapi_index();
if (!$httpClient) {
$result[] = array(
'result' => 'error',
'error' => 'Failed to initialize Google API client'
);
return $result;
}
foreach ($urls as $url) {
$data = [
'result' => 'success'
];
if (!foxtool_valid_url($url)) {
$data['result'] = 'error';
$data['error'] = 'Invalid URL: ' . $url;
$result[] = $data;
continue;
}
$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
try {
if ($action == 'get') {
$response = $httpClient->get('https://indexing.googleapis.com/v3/urlNotifications/metadata?url=' . urlencode($url));
} else {
$content = json_encode([
'url' => $url,
'type' => $type
]);
$response = $httpClient->post($endpoint, ['body' => $content]);
}
$data['body'] = (string) $response->getBody();
} catch (ClientException $e) {
$statusCode = $e->getResponse()->getStatusCode();
$data['result'] = 'error';
$data['error'] = 'HTTP Error ' . $statusCode . ': ' . $e->getMessage();
} catch (\Exception $e) {
$data['result'] = 'error';
$data['error'] = $e->getMessage();
}
$result[] = $data;
}
return $result;
}
// Xử lý ajax index now and del index
function foxtool_index_now_callback() {
if (!wp_verify_nonce($_POST['ajax_nonce'], 'foxtool_index_now_nonce')) {
wp_die('Invalid nonce');
}
$urls = explode("\n", $_POST['url']);
$action = $_POST['ajax_action'];
// Chia nhỏ mảng URL thành các phần có tối đa 200 URL mỗi phần
$chunks = array_chunk($urls, 200);
// Duyệt qua từng phần và xử lý
foreach ($chunks as $chunk) {
$result = foxtool_index_now($chunk, $action);
foreach ($result as $item) {
if (array_key_exists('body', $item)) {
$data = json_decode($item['body'], true);
if ($data && isset($data['urlNotificationMetadata'])) {
$latest_update = $data['urlNotificationMetadata']['latestUpdate'] ?? null;
$latest_remove = $data['urlNotificationMetadata']['latestRemove'] ?? null;
// Xác định trạng thái dựa trên dữ liệu
if ($latest_update || $latest_remove) {
$latest_update_time = strtotime($latest_update['notifyTime'] ?? '');
$latest_remove_time = strtotime($latest_remove['notifyTime'] ?? '');
if ($latest_update_time > $latest_remove_time) {
$url = $data['urlNotificationMetadata']['url'];
$status = __('Already declared', 'foxtool');
$time = date('Y-m-d H:i:s', $latest_update_time);
$class = '';
} else {
$url = $data['urlNotificationMetadata']['url'];
$status = __('Declaration already deleted', 'foxtool');
$time = date('Y-m-d H:i:s', $latest_remove_time);
$class = 'ft-index-del';
}
// Hiển thị thông tin
echo '
';
echo __('URL:', 'foxtool') .' '. $url .'
';
echo __('Status:', 'foxtool') .' '. $status .'
';
echo __('Time:', 'foxtool') .' '. $time;
echo '
';
foxtool_index_use_count(); // count user
} else {
echo '';
echo __('URL: does not exist', 'foxtool');
echo '
';
}
} else {
// Handle invalid or missing data
echo '';
echo __('URL: does not exist', 'foxtool');
echo '
';
}
} else {
// Handle missing 'body' key
echo '';
echo __('URL: does not exist', 'foxtool');
echo '
';
}
}
}
wp_die();
}
add_action('wp_ajax_foxtool_index_now_ajax', 'foxtool_index_now_callback');
// xy ly index status
function foxtool_index_status($urls) {
$result = [];
$httpClient = foxtool_jsonapi_index();
foreach ($urls as $url) {
$data = [
'url' => $url,
'indexed' => null,
'latest_update' => null,
'latest_remove' => null,
];
if (!foxtool_valid_url($url)) {
$data['result'] = 'error';
$data['error'] = 'Invalid URL: ' . $url;
$result[] = $data;
continue;
}
try {
$response = $httpClient->get('https://indexing.googleapis.com/v3/urlNotifications/metadata?url=' . urlencode($url));
$response_body = json_decode($response->getBody(), true);
if (isset($response_body['latestUpdate'])) {
$data['latest_update'] = $response_body['latestUpdate'];
}
if (isset($response_body['latestRemove'])) {
$data['latest_remove'] = $response_body['latestRemove'];
}
if (isset($response_body['latestUpdate']) || isset($response_body['latestRemove'])) {
$data['indexed'] = 'yes';
} else {
$data['indexed'] = 'no';
}
} catch (ClientException $e) {
$statusCode = $e->getResponse()->getStatusCode();
if ($statusCode == 404) {
$data['indexed'] = null;
} else {
$data['indexed'] = 'error';
$data['error'] = 'HTTP Error ' . $statusCode . ': ' . $e->getMessage();
}
} catch (\Exception $e) {
$data['indexed'] = 'error';
$data['error'] = $e->getMessage();
}
$result[] = $data;
}
return $result;
}
// ajax index status
function foxtool_index_status_callback() {
if (!wp_verify_nonce($_POST['ajax_nonce'], 'foxtool_index_status_nonce')) {
wp_die('Invalid nonce');
}
$urls = explode("\n", $_POST['url']);
// Chia nhỏ mảng URL thành các phần có tối đa 200 URL mỗi phần
$chunks = array_chunk($urls, 200);
// Duyệt qua từng phần và xử lý
foreach ($chunks as $chunk) {
$url_metadata = foxtool_index_status($chunk);
foreach ($url_metadata as $data) {
$url = isset($data['url']) ? $data['url'] : '';
$latest_update = isset($data['latest_update']) ? $data['latest_update'] : null;
$latest_remove = isset($data['latest_remove']) ? $data['latest_remove'] : null;
if ($data['indexed'] == 'yes') {
if ($latest_update || $latest_remove) {
$latest_update_time = !empty($latest_update['notifyTime']) ? strtotime($latest_update['notifyTime']) : null;
$latest_remove_time = !empty($latest_remove['notifyTime']) ? strtotime($latest_remove['notifyTime']) : null;
if ($latest_update_time > $latest_remove_time) {
$status = __('Already declared', 'foxtool');
$time = date('Y-m-d H:i:s', $latest_update_time);
$class = '';
} else {
$status = __('Declaration already deleted', 'foxtool');
$time = date('Y-m-d H:i:s', $latest_remove_time);
$class = 'ft-index-del';
}
}
// Hiển thị thông tin
echo '';
echo __('URL:', 'foxtool') .' '. $url .'
';
echo __('Status:', 'foxtool') .' '. $status .'
';
echo __('Time:', 'foxtool') .' '. $time;
echo '
';
foxtool_index_use_count(); // count user
} else {
echo '';
echo __('URL:', 'foxtool') .' '. $url .' '. __('does not exist', 'foxtool');
echo '
';
}
}
}
wp_die();
}
add_action('wp_ajax_foxtool_index_status_ajax', 'foxtool_index_status_callback');
// index post, page, product
function foxtool_index_post_title($post_id) {
foxtool_index_use_count(); // count user
$url = get_permalink($post_id);
$urls = [$url];
foxtool_index_now($urls, 'update');
}
// Thêm hook cho từng loại post type
if(isset($foxtool_gindex_options['posttype'])){
$main_search_post_types = $foxtool_gindex_options['posttype'];
foreach ($main_search_post_types as $post_type) {
$hook_name = 'publish_' . $post_type;
add_action($hook_name, 'foxtool_index_post_title');
}
}
// ham cap nhat count
function foxtool_index_use_count() {
$count = get_transient('foxtool_index_count');
if (false === $count) {
$count = 0;
}
$count++;
set_transient('foxtool_index_count', $count, 86400);
}