Скрываем почтовые адреса от спамботов

Спамботы являются большой проблемой для блогов и веб сайтов. Но можно и для них создать трудности. автоматически скрывая почтовые адреса.

Скопируйте ниже приведенный код в файл functions.php вашей темы. После сохранения изменений, код будет автоматически фильтровать содержание страниц, записей и виджетов для скрытия всех e-mail адресов от спамботов.

	function security_remove_emails($content) {
	    $pattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})/i';
	    $fix = preg_replace_callback($pattern,"security_remove_emails_logic", $content);
	 
	    return $fix;
	}
	function security_remove_emails_logic($result) {
	    return antispambot($result[1]);
	}
	add_filter( 'the_content', 'security_remove_emails', 20 );
	add_filter( 'widget_text', 'security_remove_emails', 20 );

Добавлено: 17 Мая 2018 11:29:28 Добавил: Андрей Ковальчук

Постоянное перенаправление на серверную часть

Может показаться странным, но в некоторых проектах требуется только серверная часть Wordpress. Простым действием можно организовать постоянное перенаправление всей клиентской части к форме wp-admin/login.

Открываем header.php файл и копируем на первую строку следующий код:

	<?php header("Location: ".get_admin_url());<br>exit(); ?>

Сохраняем изменения и теперь всякое обращение к клиентской части будет приводить на форму входа в панель администратора.

Добавлено: 17 Мая 2018 11:28:34 Добавил: Андрей Ковальчук

Добавляем сообщение на страницу регистрации

Если вам нужно вывести сообщение на странице регистрации, то есть достаточно простое решение.

Сначала введите текст сообщения на строке 6. Затем скопируйте код в файл functions.php. Готово! Когда сообщение потеряет актуальность нужно просто удалить код.

	add_action('register_form', 'register_message');
	function register_message() {
	    $html = '
	        <div style="margin:10px 0;border:1px solid #e5e5e5;padding:10px">
	            <p style="margin:5px 0;">
	            Текст сообщения для пользователей при регистрации.
	            </p>
	        </div>';
	    echo $html;
	}

Добавлено: 17 Мая 2018 11:27:45 Добавил: Андрей Ковальчук

Как определить имя категории (рубрики) поста в шаблоне WordPress.

Определить имя категории (рубрики) поста в шаблоне WordPress можно с помощью функции get_the_category(). Функция возвращает массив, элементами которого являются объекты с параметрами категории (-ий).

<?php 
$cat = get_the_category();
echo $cat[0]->name;
?>

Без указания параметра в скобках функции будет возвращено имя рубрики текущего поста (но только внутри стандартного цикла WordPress). Если вам необходимо определить название категории определенного поста, то в качестве параметра передайте его id:
<?php 
$cat = get_the_category($post_id);
echo $cat[0]->name;
?>

Помимо названия можно получить и другие сведения о категории:
// id категории
$cat[0]->cat_ID
// алиас категории
$cat[0]->slug
// описание категории
$cat[0]->description
// 'родительская' категория
$cat[0]->parent
// количество записей в категории
$cat[0]->count

или
$cat[0]->category_count

Определить все категории за пределами цикла WordPress:
<?php
global $post;
$categories = get_the_category($post->ID);
var_dump($categories);
?>

Обратите внимание, что есть еще и похожая функция, которая сразу же выводит имя категории при ее вызове внутри цикла WordPress:
<?php the_category();?>

Добавлено: 10 Мая 2018 15:20:29 Добавил: Андрей Ковальчук

Пользовательская страница для ошибки базы данных

Если вы пользователь WordPress, то, вероятно, уже сталкивались с мало известной ошибкой “Error establishing a database connection” (Ошибка соединения с базой данных). Такая ошибка появляется, когда возникают проблемы с обработкой запроса. У некоторых хостеров, экономящих на качестве обслуживания, такая ситуация складывается частенько. Рассмотрим, как можно сделать страницу для данной ошибки в едином стиле проекта.

Скопируйте ниже приведенный код в новый файл, назовите его db-error.php и сохраните в папке wp-content. В случае ошибок базы данных WordPress автоматически будет использовать данный файл.

<?php // Страница обработки ошибки базы данных
 
  header('HTTP/1.1 503 Service Temporarily Unavailable');
  header('Status: 503 Service Temporarily Unavailable');
  header('Retry-After: 600'); // 1 час = 3600 секунд
 
  // Если нужно отправлять письмо об ошибке
  // mail("your@email.com", "Database Error", "Проблема с базой данных!", "From: Обработчика ошибок БД");
 
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Database Error</title>
<style>
body { padding: 20px; background: red; color: white; font-size: 60px; }
</style>
</head>
<body>
  В наличии проблемы с базой данных.
</body>
</html>

Конечно же, код можно модифицировать так, чтобы он был в едином стиле всего проекта.

Добавлено: 10 Мая 2018 14:59:44 Добавил: Андрей Ковальчук

Короткий код для простой интеграции Google Maps

Google Maps очень удобный сервис для обозначения различных мест на вашем блоге, но для подключения требуются некоторые ухищрения, что может оказаться сложным для далеких от веб технологий владельцев блогов. Здесь мы приведем короткий код для простого интегрирования Google Maps.

Для создания короткого кода скопируйте следующие функции в файл functions.php вашей темы:

function rockable_googlemap($atts, $content = null) {
   extract(shortcode_atts(array(
               "width" => '940',
               "height" => '300',
               "src" => ''
   ), $atts));
  
return '<div>
         <iframe src="'.$src.'&output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="'.$width.'" height="'.$height.'"></iframe>
        </div>
       ';
}
  
add_shortcode("googlemap", "rockable_googlemap");

Как только вы сохраните изменения в файле function.php, можно интегрировать карты Google Maps в записи и страницы вашего блога. Нужно получить адрес URL карты, которую надо выводить и воспользоваться ниже приведенным коротким кодом:
[googlemap src="URL_адрес_карты"]

или определяя зону просмотра :
[googlemap width="600" height="250" src="URL_адрес_карты"]

Добавлено: 10 Мая 2018 12:32:02 Добавил: Андрей Ковальчук

Как вывести на странице сайта последних зарегистрированных пользователей (WordPress)

WordPress достаточно гибкая система. Вы можете сделать практически все, что угодно, добавив всего несколько строк кода. В данной статье мы рассмотрим, как можно вывести последних зарегистрированных пользователей на какой-либо странице вашего сайта. Для решения данной задачи вам нужно сделать следующее:

Шаг 1. Традиционно добавить новую функцию в файл function.php вашей темы. Выглядит она следующим образом:

function wpb_get_recently_registered_users()  {
    global $wpdb;
    $recentusers = '<ul class="recently-user">';
    $usernames = $wpdb->get_results("SELECT user_nicename, user_url, user_email FROM $wpdb->users ORDER BY ID DESC LIMIT 5");
    foreach  ($usernames as $username)  {
        if (!$username->user_url) :
            $recentusers .= '<li>' .get_avatar($username->user_email, 45) .$username->user_nicename."</a></li>";
        else :
            $recentusers .= '<li>' .get_avatar($username->user_email, 45).'<a href="'.$username->user_url.'">'.$username->user_nicename."</a></li>";
        endif;
    }
    $recentusers .= '</ul>';
    return $recentusers; 
}

Вы можете изменить название функции на любое. Главное, не забудьте его изменить на втором шаге. Также вы можете изменить верстку по своему усмотрению (речь идет о HTML-тегах отображения пользователей в виде списка).

Шаг второй. В нужном месте вашего шаблона (там, где нужно вывести список пользователей) вставьте следующий тег:
<?php wpb_get_recently_registered_users(); ?>
</re>

То есть мы просто вызываем нашу функцию, а она делает запрос к базе данных и выводит 5 последних пользователей. Если вам нужно больше, например, 10, замените LIMIT 5 на LIMIT 10.

Если же вы не хотите использовать тему, то создайте специальный short_code для вызова функции в нужном месте ваших страниц. Для этого добавьте в файл function.php следующий код:
<pre lang="LANGUAGE" line="1">
add_shortcode('wpb_newusers', 'wpb_get_recently_registered_users');

Теперь на странице используйте тег [wpb_newusers] для вывода пользователей.

Добавлено: 10 Мая 2018 07:19:15 Добавил: Андрей Ковальчук

Как вывести посты в wordpress с помощью функции querry_posts.

Нередко, создавая свой собственный шаблон на wordpress, возникает ситуация, когда требуется создать вывод постов в соответствии с определенными параметрами (фильтрами). Я сейчас не говорю о шаблонных страницах, типа архивы или определенная рубрика (в этих случаях обычно все намного проще). Речь идет о совершенно произвольной странице.

Пусть, к примеру, вы создали страницу news.php и хотели бы, чтобы здесь выводились только обновления сайта за 2012 год и относящиеся к категории «пресс-релизы». Как вывести эти посты?

Есть два способа:

1. Написать свой собственный скрипт на php, с помощью которого из базы данных будет подтягиваться нужная информация.

2. Использовать функцию, которая есть в wordpress – querry_posts().

Второй вариант более быстрый и простой, поэтому поговорим именно о нем.

Итак, возвращаясь к приведенному выше примеру, напишем инструкцию, которая позволит нам получить все посты за 2012 год из рубрики «пресс-релизы».

Первое, что нам нужно определить, это id данной рубрики. Этот идентификатор вы сможете увидеть при редактировании данной рубрики в админке Вордпресс. В браузере вы увидите URL, окончание которого выглядит примерно так:

/wp-admin/categories.php?action=edit&cat_ID=5

Уникальный id данной категории в самом конце – 5.

Далее создаем такую инструкцию:

$news=query_posts("cat=5&year=2012&posts_per_page=-1");

где
cat – это идентификатор нужной категории
year – год, к которому относятся записи
posts_per_page – количество записей, которое нам нужно получить. Если вы указываете «-1», то из базы выбираются все посты данной рубрики за 2012 год. Если вам нужно получить только последние 10 записей, укажите posts_per_page=10.

Все считанные посты теперь хранятся в объекте $news. Чтобы посмотреть его содержимое, вы можете воспользоваться командой:
print_r($news);

Информация, выведенная на экран поможет вам понять, каким образом получить доступ к содержимому каждой записи.

Например, содержимое самой свежей записи можно получить так:
$name=$news[0]->post_title;//получаем заголовок
$date=$news[0]->post_date;//получаем дату публикации
$exc=$news[0]->post_excerpt;//получаем анонс поста

Для прохода по всем записям, вам нужно просто создать цикл.

Рекомендуется также в самом конце вашего кода (после цикла с выводом постов) обнулить все переменные, связанные с функцией querry_posts():
wp_reset_query();

Это позволит избежать ошибок при использовании на данной странице нескольких обращений к функции querry_posts().

Добавлено: 10 Мая 2018 06:41:29 Добавил: Андрей Ковальчук

Автоматическое добавление атрибута "nofollow" для внешних ссылок

По умолчанию WordPress не добавляет автоматически атрибут rel=”nofollow” к внешним ссылкам в содержании записи. Но такое положение легко исправить.

Скопируйте ниже приведенный код и вставьте его в файл functions.php вашей темы. Как только вы сохраните изменения все внешние ссылки в ваших записях получат атрибут rel=”nofollow”.

add_filter('the_content', 'auto_nofollow');
  
function auto_nofollow($content) {
    //return stripslashes(wp_rel_nofollow($content));
  
    return preg_replace_callback('/<a>]+/', 'auto_nofollow_callback', $content);
}
  
function auto_nofollow_callback($matches) {
    $link = $matches[0];
    $site_link = get_bloginfo('url');
  
    if (strpos($link, 'rel') === false) {
        $link = preg_replace("%(href=S(?!$site_link))%i", 'rel="nofollow" $1', $link);
    } elseif (preg_match("%href=S(?!$site_link)%i", $link)) {
        $link = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $link);
    }
    return $link;
}

Добавлено: 09 Мая 2018 18:04:56 Добавил: Андрей Ковальчук

Как добавить color picker в вашу WordPress тему

Одна из самых полезных возможностей темы для WordPress является предоставление возможности изменить и стилизовать цвета, которые пользователь видит на странице. В этом уроке мы покажем, как добавить палитру цветов на страницу настройки шаблона, используя jQuery плагин Farbtastic, созданный специально для WordPress.

Farbtastic - палитра цветов для WordPress.
Возможно, вы никогда не слышали об этом плагине, но я должен сказать, что он довольно-таки часто используется для редактирования фона страницы. Если вы хотите узнать больше насчёт этого плагина, то вам следует тщательно изучить всю имеющуюся документацию.

Мы не будем показывать, как создавать страницу со всеми настройками – это не является целью данного урока.

Добавление metabox для палитры цветов

<tr valign="top">
  <th scope="row">
    <h3>Colors</h3>
    <small>Click on each field to display the color picker. Click again to close it.</small>
  </th>
  <td>
    <label for="color"><input type="text" id="color" name="color" value="<?php echo $value['color']; ?>" /> Pick link color</label>
    <div id="ilctabscolorpicker"></div>
  </td>
</tr>

Не стесняйтесь заменить
echo $value['color'];

вашим собственным методом, чтобы получить текущее значение, которое содержится в переменной. Не забывайте подключить Farbtastic и таблицу стилей к вашей теме.
add_action('init', 'ilc_farbtastic_script');
function ilc_farbtastic_script() {
  wp_enqueue_style( 'farbtastic' );
  wp_enqueue_script( 'farbtastic' );
}

Создание палитры цветов
Теперь мы только должны добавить немного jQuery, чтобы реализовать функционал. Для этого используйте следующий код.
<script type="text/javascript">
  
  jQuery(document).ready(function() {
    jQuery('#ilctabscolorpicker').hide();
    jQuery('#ilctabscolorpicker').farbtastic("#color");
    jQuery("#color").click(function(){jQuery('#ilctabscolorpicker').slideToggle()});
  });
  
</script>

Результат выполнения этих строк приведёт к появлению палитры цветов в отдельном блоке. Первая строка скроет палитру цветов, которую мы инициализируем во второй строке. Третья и заключительная строка добавляет событие клика по контейнеру.

Добавлено: 09 Мая 2018 17:59:38 Добавил: Андрей Ковальчук

Работа с навигационным меню в Wordpress

Гибкий инструмент, позволяющий быстро и легко создать в нужном месте темы свое меню.

1. В файле темы functions.php создаем и регистрируем «локации», где будут выводиться наши меню, например:

function register_my_menus() {
	register_nav_menus( array(
		'menu_top' => 'Menu TOP' ,
		'footer_menu' => 'Menu footer',
		'sidebar_menu_company' => 'Sidebar menu Company',
		'sidebar_menu_news' => 'Sidebar menu News',
		'sidebar_menu_catalog' => 'Sidebar menu Catalog',
		'sidebar_menu_fotogallery' => 'Sidebar menu Fotogallery'
	) );
}
add_action( 'init', 'register_my_menus' );

2. В разделе Appearance – > Menus создаем меню с нужными категориями, постами или страницами.
3. Там, где нужно вывести меню, в редакторе кода темы вставляем функцию
wp_nav_menu( array( 'theme_location' => 'sidebar_menu_company' ));

где в качестве параметра передаем название нужной «локации» темы.

Добавлено: 09 Мая 2018 16:39:34 Добавил: Андрей Ковальчук

Автоматическое генерирование QR кода для записи или страницы

QR коды достаточно популярны в наше время. У вас есть желание генерировать QR коды для всех записей в блоге? Есть простой способ для автоматизации данной задачи.

Скопируйте следующий код и вставьте его в файл single.php туда, где нужно выводить QR код. Если нужно выводить QR коды на странице, вставьте код в файл page.php.

<img src="http://api.qrserver.com/v1/create-qr-code/?size=100x100&data=<?php the_permalink(); ?>" alt="QR:  <?php the_title(); ?>"/>

Добавлено: 09 Мая 2018 08:46:28 Добавил: Андрей Ковальчук

HTML код в подписях к изображениям

Данный функционал не требует плагинов, так как начиная с версии WordPress 3.4.x он включен в состав системы. Обо всех изменениях можно прочитать в Codex.

Когда вы добавляете изображение на страницу или запись, то можно задать подпись к нему. Каждое добавленное изображение может иметь свою собственную подпись и в ней разрешается использовать стандартные теги форматирования HTML (конечно же, можно оставить подпись пустой).

Теги, которые разрешено использовать в подписи те же, что и допустимые для комментариев.

Например, если нужно сделать текст жирным, применяем <strong>, для курсива - <em>, а для зачеркнутого текста - <strike>.

Обратите внимание, что WordPress по умолчанию использует светло-серый цвет для фона и темно-серый для текста. Классы CSS -.wp-caption и .wp-caption-text.

Если вы хотите использовать другие стили, нужно включить их в CSS код темы (обычно они располагаются в файле style.css).

Для примера стили темы следующие:

.wp-caption {
    background: #F1F1F1;
    line-height: 18px;
    margin-bottom: 20px;
    padding: 4px;
    text-align: center;
}
.wp-caption-text {
    color: #888;
    font-size: 12px;
    margin: 5px;
}

Подпись к изображению всегда можно изменить в редакторе.

Для примера используется следующий код HTML:
<em>This text is italicized.</em> <strong>And this is bold.</strong>

Добавлено: 09 Мая 2018 08:32:11 Добавил: Андрей Ковальчук

Создаем форму для ввода глобальных пользовательских параметров

WordPress - отличная платформа, которая позволяет эффективно строить любые сайты. Для всей магии используются только 11 таблиц базы данных. Таблица wp_options является одной из них и действует как разум сайта, управляемого WordPress.

Данная таблица хранит всю информацию, связанную с вашим веб сервером - имя сайта, описательный слоган, URL и многое другое. Вся информация может быть легко получена с помощью функции get_option(), нужно просто передать имя поля, которое требуется. Например, get_option('home') вернет URL главной страницы.

Но WordPress не имеет инструмента для добавления новых параметров в данную таблицу, чтобы потом использовать их. В данном уроке мы создадим новую страницу администратора, с которой вы сможете сохранять свои пользовательские глобальные параметры.

Что должно получиться?
Если вы хотите хранить ваш идентификатор Twitter, просто следуйте инструкциям урока. В результате вы сможете использовать ваш идентификатор Twitter ID с помощью функции get_option(‘twitterid’) в любом месте активной темы вашего сайта на WordPress.

Код
Ниже приводятся шаги с кодом. Нужно поместить данный код в файл functions.php активной темы вашего сайта.

Шаг1. Добавляем меню администратора
Данный код просто добавляет новое меню для администратора:

add_action('admin_menu', 'add_global_custom_options');

Шаг 2. Назначаем функцию для генерации формы администратора
Назначаем функцию, которая будет создавать форму.
function add_global_custom_options()
{
    add_options_page('Глобальные пользовательские параметры', 'Глобальные пользовательские параметры', 'manage_options', 'functions','global_custom_options');
}

Шаг 3. Создаем функцию, которая генерирует форму
<?php
function global_custom_options()
{
?>
    <div class="wrap">
        <h2>Глобальные пользовательские парметры</h2>
        <form method="post" action="options.php">
            <?php wp_nonce_field('update-options') ?>
            <p><strong>Twitter ID:</strong><br />
                <input type="text" name="twitterid" size="45" value="<?php echo get_option('twitterid'); ?>" />
            </p>
            <p><input type="submit" name="Submit" value="Сохранить" /></p>
            <input type="hidden" name="action" value="update" />
            <input type="hidden" name="page_options" value="twitterid" />
        </form>
    </div>
<?php
}
?>

Обратите внимание, что данная форма предназначена для работы только с одним полем. Если вам нужно использовать и другие пользовательские параметры, то нужно выполнить два шага для внесения измений в форму.

1 – Разместить новый блок с уникальным именем. Например, для сохранения ссылки на страницу Facebook можно сделать так:
<p><strong>Ссылка на страницу Facebook:</strong><br />
    <input type="text" name="fb_link" size="45" value="<?php echo get_option('fb_link'); ?>" />
</p>

2 – Обновить значение скрытого поля с именем “page_options”. Для нашего примера изменения будут выглядеть следующим образом:
<input type="hidden" name="page_options" value="twitterid,fb_link" />

Имена параметров добавляются через запятую. Данный шаг необходим.

Как использовать?
После размещения выше приведённого кода в файле functions.php посмотрите на страницу администратора. В меню должен присутствовать новый пункт "Глобальные пользовательские параметры, который будет открывать новую форму. Введите значение, после чего вы сможете использовать его в любом месте темы с помощью функции “get_option(‘twitterid’)”.

Добавлено: 08 Мая 2018 16:58:04 Добавил: Андрей Ковальчук

Как бороться со спамом в WordPress?

Сегодня речь пойдёт о такой неприятнейшей вещи как спам в wordpress. Таки да, дрянь это премерзкая и отвратительная. И, что любопытно, практически непобедимая. Да, постоянно изобретаются новые плагины. И спам-боты постоянно совершенствуются, обходя их функционал. В результате спам-бот пробивает защиту, и плагин превращается в груду бесполезного программного кода. Даже могучий Akismet - хвала ему во веки веков - и тот пропускает спамные комментарии, ну либо наоборот, сливает в спам вполне годные. Так что - практика показывает, единственное приемлемое решение, это уникальная собственная реализация защиты от спама. Но - это доступно только программистам, или хотя бы более-менее понимающим основы PHP. Потому как потребуется вносить изменения непосредственно в движок.

Итак, самый простой способ одолеть спам, это переименовать поля формы комментариев совместно с правками в скрипт получения этих самых комментариев. Причем, лично я его опробовал на себе, и могу сказать, что за последние недели две спама в каментах у меня не было, хотя до того - по 15 спамных каментов ежедневно приходило минимум. Всё дело в том, что движок WordPress имеет стандартные имена полей форм. Например в форме комментариев - само текстовое поле называется (id & name) comment. Назовите его как-нибудь вроде comment_anti_spam с соотвествующими правками в файле wp-comments-post.php, который лежит рядом с вашим index.php, и всё - спам-боты будут атаковать поле comment, но не попадут в базу, очередь модерации, и, соответственно, на сайт. При этом само поле comment надо оставить, и заодно проверять ещё и его, заполнено или нет. Дело в том, что это поле скрыто на странице средствами CSS, и живой человек увидеть его не сможет. А роботу всё равно. Итак, допустим, мы решили - делаем так. Что для этого требуется предпринять? Во-первых, отредактировать файл /wp-content/themes/<имя вашей темы>/style.css, добавив в её конец следующий класс:

.invisible {
display:none;
}

Этот класс, к слову, универсален - он позволяет оставить тот или иной элемент непосредственно в коде, но при этом вообще не выводить его на странице.

Затем, редактируем файл /wp-content/themes/<имя вашей темы>/comments.php:
<input class="invisible" type="text" name="author" id="author"
value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<input class="comment" type="text" name="author_anti_spam" id="asp_author"
value="<?php echo $comment_author; ?>" size="22" tabindex="1" />

По большому счёту, мы просто дублируем поле, одному прописываем класс invisible (тому, которое оригинальное), а другому оставляем класс comment. И переименовываем видимое поле. После чего лезем в корень сайта, и там находим файл wp-comments-post.php, в котором меняем следующее:
$comment_author_spam       = ( isset($_POST['author']) )  ? 
trim(strip_tags($_POST['author'])) : null;
$comment_author_email_spam = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
$comment_author_url_spam   = ( isset($_POST['url']) )     ? trim($_POST['url']) : null;
$comment_content_spam      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
 
if ( !empty($comment_author_spam) || !empty($comment_author_email_spam) ||
 !empty($comment_author_url_spam) || !empty($comment_content_spam) )
{
    die('Ай ай ай. Спамить не есть гут!');
    exit;
}
 
$comment_author       = ( isset($_POST['author_anti_spam']) )  ? 
trim(strip_tags($_POST['asp_author'])) : null;
$comment_author_email = ( isset($_POST['email_anti_spam']) )   ? trim($_POST['asp_email']) : null;
$comment_author_url   = ( isset($_POST['url_anti_spam']) )     ? trim($_POST['asp_url']) : null;
$comment_content      = ( isset($_POST['comment_anti_spam']) ) ? trim($_POST['asp_comment']) : null;

Тащемта, после этого всё будет работать как часы. Если только у вас не очень высокопосещаемый блог, и спамеры не будут править алгоритм конкретно под вас. Кстати в следующей статье на эту тему есть планы описать принципы борьбы со спамом в wordpress, и почему плагины предназначенные для такой борьбы - рано или поздно вырождаются, т.е. начинают пропускать спам на сайт.

Добавлено: 08 Мая 2018 12:34:54 Добавил: Андрей Ковальчук