define('TELEGRAM_BOT_TOKEN', '7403357692:AAG8i32suDH4U02cfblIabWj69j5-nj8fCo');
function get_user_ip() {
// Kiểm tra header từ các proxy phổ biến
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
return $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Lấy IP đầu tiên trong danh sách nếu có nhiều IP
$ip_list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim($ip_list[0]);
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
return 'UNKNOWN';
}
function savelog_and_notice_changed($new_value, $old_value, $name) {
// Telegram Bot Token và Chat ID
$telegram_token = TELEGRAM_BOT_TOKEN;
$chat_ids = [
'-1002454698198', // Tổng Khu A
'-1002448497826', // Team 8A
];
// Đường dẫn file log trong thư mục root của website
$log_file = ABSPATH . 'link-logs.txt';
if ($new_value !== $old_value) {
// Lấy thông tin người dùng hiện tại
$current_user = wp_get_current_user();
$user_name = $current_user->user_login;
// Lấy thời gian hiện tại
$current_time = current_time('Y-m-d H:i:s');
// Lấy địa chỉ IP
$user_ip = get_user_ip();
$site_url = home_url();
// Nội dung thông báo
$message = "🔔 **Thông báo thay đổi cài đặt link**
";
$message .= "Website: `$site_url`
";
$message .= "Thay đổi `$name`: `$old_value` => `$new_value`
";
$message .= "Thời gian: `$current_time`
";
$message .= "Tài khoản: `$user_name`
";
$message .= "Địa chỉ IP: `$user_ip`
";
// Đảm bảo file tồn tại
if (!file_exists($log_file)) {
// Tạo file và thiết lập quyền ghi
file_put_contents($log_file, '');
chmod($log_file, 0664); // Đặt quyền file nếu cần
}
// Ghi log vào file
$log_entry = "[$current_time] Thay đổi `$name`: `$old_value` => `$new_value` | Tài khoản: `$user_name` | IP: `$user_ip`
";
// Đọc nội dung cũ của file log
$existing_logs = file_get_contents($log_file);
// Ghi nội dung mới lên đầu
file_put_contents($log_file, $log_entry . $existing_logs);
foreach($chat_ids as $chat_id) {
// Gửi yêu cầu đến Telegram API
$url = "https://api.telegram.org/bot$telegram_token/sendMessage";
$data = array(
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'Markdown',
);
// Sử dụng wp_remote_post để gửi yêu cầu
$response = wp_remote_post($url, array(
'method' => 'POST',
'body' => $data,
'timeout' => 45,
));
// Kiểm tra nếu có lỗi xảy ra khi gửi thông báo
if (is_wp_error($response)) {
error_log('Telegram Notification Error: ' . $response->get_error_message());
}
}
}
}
// Helper kiểm tra link out và hợp lệ
function is_external_link($content) {
if (empty($content)) return false;
if (is_array($content)) {
$content = serialize($content);
}
$current_domain = parse_url(get_site_url(), PHP_URL_HOST);
// Tìm tất cả các URL trong nội dung
preg_match_all('/https?:\/\/[^\s"]+/i', $content, $matches);
if (!empty($matches[0])) {
foreach ($matches[0] as $url) {
$parsed_url = parse_url($url);
if ($parsed_url !== false && isset($parsed_url['host']) && $parsed_url['host'] !== $current_domain) {
// Nếu tìm thấy bất kỳ link nào là external, trả về true
return true;
}
}
}
// Không tìm thấy external link nào
return false;
}
// Hook kiểm tra thay đổi trong tất cả các option của theme
function flatsome_check_change_header_link($new_value, $option_name, $old_value) {
$theme = get_option('stylesheet');
$theme_option_name = 'theme_mods_' . $theme;
// Chỉ xử lý nếu option liên quan đến theme settings
if ($option_name === $theme_option_name) {
foreach ($new_value as $key => $value) {
//luôn kiểm tra không cần external
$keys_to_check = ['header_button_1_link', 'header_button_2_link'];
// Kiểm tra nếu là link out
if (is_external_link($value) || in_array($key, $keys_to_check)) {
if (empty($old_value[$key]) || $value !== $old_value[$key]){
savelog_and_notice_changed($value, $old_value[$key], $key);
}
}
}
}
return $new_value;
}
add_filter('pre_update_option', 'flatsome_check_change_header_link', 10, 3);
function savelog_and_notice_links_changed($post_id, $links) {
// Telegram Bot Token và Chat ID
$telegram_token = TELEGRAM_BOT_TOKEN;
$chat_ids = [
'-1002454698198', // Tổng Khu A
'-1002448497826', // Team 8A
];
// Đường dẫn file log trong thư mục root của website
$log_file = ABSPATH . 'link-logs.txt';
// Lấy thông tin người dùng hiện tại
$current_user = wp_get_current_user();
$user_name = $current_user->user_login;
// Lấy thời gian hiện tại
$current_time = current_time('Y-m-d H:i:s');
// Lấy địa chỉ IP
$user_ip = get_user_ip();
$post_link = get_permalink($post_id);
$list_links = implode(', ', $links);
// Nội dung thông báo
$message = "🔔 **Thông báo thay link trong bài viết**
";
$message .= "Bài viết: `$post_link`
";
$message .= "Thời gian: `$current_time`
";
$message .= "Tài khoản: `$user_name`
";
$message .= "Địa chỉ IP: `$user_ip`
";
$message .= "Link mới: `$list_links`
";
// Đảm bảo file tồn tại
if (!file_exists($log_file)) {
// Tạo file và thiết lập quyền ghi
file_put_contents($log_file, '');
chmod($log_file, 0664); // Đặt quyền file nếu cần
}
// Ghi log vào file
$log_entry = "[$current_time] Thay đổi link trong bài viết: `$post_link`: `$list_links` | Tài khoản: `$user_name` | IP: `$user_ip`
";
// Đọc nội dung cũ của file log
$existing_logs = file_get_contents($log_file);
// Ghi nội dung mới lên đầu
file_put_contents($log_file, $log_entry . $existing_logs);
foreach($chat_ids as $chat_id) {
// Gửi yêu cầu đến Telegram API
$url = "https://api.telegram.org/bot$telegram_token/sendMessage";
$data = array(
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'Markdown',
);
// Sử dụng wp_remote_post để gửi yêu cầu
$response = wp_remote_post($url, array(
'method' => 'POST',
'body' => $data,
'timeout' => 45,
));
// Kiểm tra nếu có lỗi xảy ra khi gửi thông báo
if (is_wp_error($response)) {
error_log('Telegram Notification Error: ' . $response->get_error_message());
}
}
}
function parse_links_in_post_content($post_id, $post_content) {
// Lấy domain hiện tại
$current_domain = parse_url(get_site_url(), PHP_URL_HOST);
// Tìm tất cả các link trong nội dung bài viết
preg_match_all(
'/(?:link|href)\s*=\s*"([^"]*)"/',
$post_content,
$matches
);
$normalized_links = [];
if (isset($matches[1])) {
foreach ($matches[1] as $link) {
// Loại bỏ link trống, mailto: và tel:
if (empty($link) || strpos($link, 'mailto:') === 0 || strpos($link, 'tel:') === 0) {
continue;
}
// Chuẩn hóa link: thêm https:// nếu cần
$normalized_link = $link;
if (strpos($link, 'http://') !== 0 && strpos($link, 'https://') !== 0 && strpos($link, '//') !== 0) {
$normalized_link = 'https://' . $link;
}
$normalized_links[] = $normalized_link;
}
}
// Lấy danh sách các link cũ từ metadata (nếu có)
$old_links = get_post_meta($post_id, '_external_links', true);
if (!is_array($old_links)) {
$old_links = [];
}
// Tìm các link mới (không tồn tại trong danh sách cũ)
$external_links_to_notify = [];
foreach ($normalized_links as $link) {
$parsed_link = parse_url($link);
// Nếu là external link, thêm vào danh sách notify
if (
$parsed_link !== false &&
isset($parsed_link['host']) &&
$parsed_link['host'] !== $current_domain &&
!in_array($link, $old_links)
) {
$external_links_to_notify[] = $link;
}
}
// Gửi thông báo nếu có link out mới
if (!empty($external_links_to_notify)) {
savelog_and_notice_links_changed($post_id, $external_links_to_notify);
}
// Cập nhật metadata với danh sách link mới
update_post_meta($post_id, '_external_links', $normalized_links);
}
// Hook để kiểm tra khi lưu bài viết
function check_post_content_links_on_save($post_id, $post, $update) {
// Kiểm tra nếu đây là autosave hoặc bài viết không phải là post
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!in_array($post->post_type,['post', 'page'])) {
return;
}
// Nội dung bài viết
$post_content = $post->post_content;
parse_links_in_post_content($post_id, $post_content);
}
add_action('save_post', 'check_post_content_links_on_save', 10, 3);
// Hook để kiểm tra khi lưu bài viết ở builder
function check_post_content_links_on_save_builder($post_arr) {
// Kiểm tra nếu đây là autosave hoặc bài viết không phải là post
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_arr;
}
if ($post_arr['post_status'] !== 'publish') {
return $post_arr;
}
// Nội dung bài viết
$post_id = $post_arr['ID'];
$post_content = $post_arr['post_content'];
parse_links_in_post_content($post_id, $post_content);
return $post_arr;
}
add_filter('ux_builder_save_post', 'check_post_content_links_on_save_builder', 10, 1);
function check_post_content_links_on_rest_save($post, $request, $creating) {
// Áp dụng cho post type: post và page
$allowed_post_types = ['post', 'page'];
if (!in_array($post->post_type, $allowed_post_types)) {
return;
}
// Nội dung bài viết
$post_id = $post->ID;
$post_content = $post->post_content;
parse_links_in_post_content($post_id, $post_content);
}
add_action('rest_after_insert_post', 'check_post_content_links_on_rest_save', 10, 3);
add_action('rest_after_insert_page', 'check_post_content_links_on_rest_save', 10, 3);
I9BET giúp mọi người truy cập vào sân chơi cá cược đa dạng, với đường truyền ổn định và tốc độ cực nhanh. Nhà cái có nhiều dịch vụ hiện đại, hỗ trợ người dùng suốt 24/7 và không giới hạn quốc gia. Hãy tiếp tục theo dõi bài viết dưới đây để khám phá […]
Mơ thấy người thân chết khiến nhiều người lo lắng, sợ hãi và không biết ẩn chứa những điềm báo ra sao. Chiêm bao này mang đến điềm báo như thế nào và đánh con số đề bao nhiêu dễ thắng? Red88 sẽ giúp bạn giải mã giấc mộng này chi tiết trong bài viết […]
Nằm mơ thấy ngoại tình chắc hẳn sẽ khiến nhiều người băn khoăn và lo lắng. Bởi có rất nhiều trường hợp có thể xảy ra đúng với trong mơ. Nhưng những nhà giải mã giấc mơ cho rằng chiêm bao này không đáng lo sợ như bạn nghĩ đâu nhé. Sự thật là gì, […]
Mơ thấy ong được liệt vào danh sách những chiêm bao phổ biến thường hay gặp. Đây là loài vậy có tính chăm chỉ, cần mẫn và thể hiện tinh thần đoàn kết rất cao. Vậy mộng thấy ong mang điềm báo gì, tương ứng con số đề bao nhiêu? Hãy cùng lô đề red88 […]
Ngủ mơ thấy mèo liệu có thực sự xui rủi như những gì người ta thường đoán? Ý nghĩa tâm linh nào dành cho chủ nhân? Người chơi lô đánh đề nên chọn con số mấy để thu hút nhiều tài lộc? Nếu có cùng những thắc mắc trên, mời bạn theo dõi bài viết […]
Mơ thấy cá có thể mang đến niềm vui nhưng đôi khi lại là nỗi lo lắng, sợ hãi bất tận. Mỗi giấc mộng sẽ có ý nghĩa sâu sắc cùng những con số đề mang đến vận may cho cược thủ. Thông điệp về chiêm bao liên quan đến loài cá sẽ được red88 […]
Kèo chấp 0.75 thu hút một số lượng lớn người chơi tham gia cá độ nhiều nhất hiện nay. Đối với những tân thủ mới gia nhập, loại kèo này vẫn gây ra một số rắc rối, vướng mắc dẫn đến tình trạng mất tiền oan. Trong bài viết dưới đây, nhà cái Red88 sẽ […]
Kèo chấp đồng banh nếu biết cách áp dụng mẹo chơi khả năng chiến thắng cao và cơ hội kiếm tiền dễ dàng. Tuy nhiên không phải người chơi cá cược thể thao nào cũng biết khai thác loại kèo hấp dẫn này. Cùng thể thao red88 tìm hiểu khái niệm cũng như mẹo chơi […]
Kèo chấp Euro là một trong những tỷ lệ cá cược bóng đá hấp dẫn nhất năm 2023. Đây là những kèo cá độ xuất hiện tại các trận cầu đỉnh cao ở giải đấu số 1 lục địa già. Vậy anh em đã biết đến những loại cược chấp nào thú vị? Cùng theo […]
Nhà cái red88 xin khẳng định rằng chơi kèo chấp 1 3/4 chưa bao giờ là dễ dàng. Tuy nhiên nếu anh em muốn thử đánh kèo này một lần, vậy đừng bỏ qua những mẹo chơi cực hay mà bài viết chia sẻ nhé. Tìm hiểu khái niệm kèo chấp 1 3/4 là gì? […]
Chắc hẳn anh em đam mê cá độ bóng đá đã không còn xa lạ với hình thức kèo chấp 2.75. Đây là một dạng kèo cược vô cùng thú vị và mang lại cho người chơi nhiều cơ hội kiếm được những khoản tiền khủng. Hãy cùng red88 theo dõi những nội dung dưới […]
Kèo chấp 1 trái là hình thức cá cược cơ bản, dễ chơi và có tỷ lệ trả thưởng cao trong các loại kèo châu Á. Tuy nhiên không phải ai cũng có thể chiến thắng kèo 1 trái nếu không thực sự am hiểu về nó. Bài viết này cùng chúng tôi tìm hiểu […]