Архив рубрики ‘Разработка’

  • Защита продажных ссылок

    3

    Озаботился не так давно защитой своих сайтов от детекторов продажных ссылок, типа http://www.venality.ru. Если вы не защищаете продажные ссылки, попробуйте ввести туда адрес страницы, на которой у вас проданы ссылки, он скорее всего определит их. Работает он просто: к адресу страницы добавляются динамические параметры, вроде ?sape=1, в результате чего страница для скрипта биржи ссылок становится уже другой, и ссылки с нее пропадают. Хотя, ппо факту, ничего другого на странице не меняется.

    Конечно, сомнительно, что поисковики будут так фильтровать продажные ссылки, но лучше перестраховаться =)

    В сети полно скриптов на эту тему, некоторые занимают по 100 и больше строк! Я обошелся всего двумя =) Но скажу сразу, у меня почти все сайты на Wordpress, и скрипт писался именно под вордпресс с включенным ЧПУ. Вот эти строки нужно добавить в шаблон header.php, они должны быть самыми первыми, до тега HTML и DOCUTYPE:

    < ?
    $url = explode('?', $_SERVER['REQUEST_URI']);
    if ($url[1] AND (!$_GET['s'])) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0]);
    ?>

    В первой строке мы делим URL-адрес на две части: в одной адрес самой страницы, типа index.html, а в другой — все дополнительные параметры, все, что после знака вопроса.

    Во второй строке мы проверяем, есть ли что-то во второй части адреса, и не производился ли поиск ($_GET['s'] проверяет, не установлена ли переменная s, в кооторой задается строка поиска в вордпрессе)

    Если есть какие-то дополнительные параметры в строке, и если это не строка поиска, то идет перенаправление на страницу без параметров. Элементарно =)

    На самом деле, мне кажется тут нужно быть немного строже, делать не перенаправление, а отдавать ошибку 404, типа «страница не найдена», ибо это логично — нет такой страницы, с такими параметрами. Посмотрите, например, как сделано в Гугле, если подставить левый параметр, то выдается ошибка 404.

    Если кто хочет отдавать ошибку, то замените вторую строку скрипта на:

    if ($url[1] AND (!$_GET['s'])) header('HTTP/1.0 404 Not Found');

    Я пока поставил оба варианта, на разных сайтах. Ни один детектор продажных ссылок не определяет факт продажности =) Пользуйтесь, на здоровье!

    Кстати, спустя какое-то время доработал скрипт, теперь уже в две строки не уложился, зато предусмотрен список разрешенных параметров, которые не выбрасываются, зато все остальные вырезаются. Вот он:

    < ?php
    $url = explode('?', $_SERVER['REQUEST_URI']);
    $allows = array('s', 'cid', 'replytocom', 'action', 'ads_basecat', 'page_id', 'ADS_EDIT_POST');
    parse_str($url[1], $qv);
    foreach ($qv as $key => $val) {
    	if (in_array($key, $allows)) $q[] = $key.'='.$val;
    	else $dis = 1;
    }
    if ($dis == 1) {
    	if (sizeof($q) != 0) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0].'?'.implode('&', $q));
    	if (sizeof($q) == 0) header('Location: http://'.$_SERVER['HTTP_HOST'].$url[0]);
    }
    ?>

    В переменную $allows вписываем все параметры, которые нам не надо вырезать (через запятую, и в апострофах). В данном скрипте у меня записаны некоторые переменные вордпресса и плагинов, которыми я пользуюсь.

  • Модифицируем галерею Wordpress

    4

    Для сайта с рецептами приготовления блюд с иллюстрациями каждого шага, потребовалась простая и наглядная система добавления шагов-рисунков с кратким описанием каждого шага. В стандартной галерее вордпресса (шорткод GALLERY) уже реализован весь необходимый функционал: можно пачкой загружать фотки, прописывать к ним названия, описания и выводить в нужном порядке. Однако есть несколько «НО»:

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

    В общем, разработчикам вордпресса есть еще над чем работать, надеюсь, в третьей ветке значительным изменениям подвергнется и стандартная галерея, тогда можно будет со спокойной душой выкинуть тормознутые галереи-плагины типа «NextGEN Gallery». Кстати, используя данный плагин вполне возможно выполнить поставленную задачу, однако такое решение выглядит несколько туповато, учитывая что все необходимые возможности уже реализованы в стандартной галереи, и все дело лишь в ее внешнем виде. Зачем изобретать велосипед, если можно просто его модернизировать?

    Модернизируем наш «велосипед»

    Любителям на досуге пописать плагинчики для вордпресса конечно же известны функции add_shortcode и remove_shortcode, первая регистрирует, а вторая удаляет регистрацию  шорткода. Шорткоды, если кто не знает, это специальные кодовые слова, которые можно прописывать прямо в теле статьи, и которые вызывают какую-то функцию. Например, шорткод CAPTION служит для вставки изображения с подписью, а шорткод GALLERY — необходимую нам стандартную галерею вордпресс.

    Нам нужно всего лишь переписать функцию вывода на экран галереи и сделать так, чтобы шортег GALLERY вызывал именно нашу функцию, а не стандартную. Сделать это проще, чем вы можете подумать =)

    В первую очередь нам нужно отключить стандартную функцию галереи. Открываем файл functions.php, и вставляем в конец файла (до знака «?>») строку:

    remove_shortcode('gallery');

    Затем нам нужна новая функция вывода галереи. Крутые программисты наверняка напишут ее сами, но лично мне нужно всего лишь добавить пару фишек к стандартной галерее, поэтому я просто немного изменю стандартную функцию, текст которой находится в файле wp-includes/media.php и называется gallery_shortcode. Файл большой, поэтому воспользуйтесь функцией поиска.

    Для версии вордпресс 2.9.2 эта функция выглядит так:

    function gallery_shortcode($attr) {
    	global $post, $wp_locale;
     
    	static $instance = 0;
    	$instance++;
     
    	// Allow plugins/themes to override the default gallery template.
    	$output = apply_filters('post_gallery', '', $attr);
    	if ( $output != '' )
    		return $output;
     
    	// We're trusting author input, so let's at least make sure it looks like a valid orderby statement
    	if ( isset( $attr['orderby'] ) ) {
    		$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
    		if ( !$attr['orderby'] )
    			unset( $attr['orderby'] );
    	}
     
    	extract(shortcode_atts(array(
    		'order'      => 'ASC',
    		'orderby'    => 'menu_order ID',
    		'id'         => $post->ID,
    		'itemtag'    => 'dl',
    		'icontag'    => 'dt',
    		'captiontag' => 'dd',
    		'columns'    => 3,
    		'size'       => 'thumbnail',
    		'include'    => '',
    		'exclude'    => ''
    	), $attr));
     
    	$id = intval($id);
    	if ( 'RAND' == $order )
    		$orderby = 'none';
     
    	if ( !empty($include) ) {
    		$include = preg_replace( '/[^0-9,]+/', '', $include );
    		$_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
     
    		$attachments = array();
    		foreach ( $_attachments as $key => $val ) {
    			$attachments[$val->ID] = $_attachments[$key];
    		}
    	} elseif ( !empty($exclude) ) {
    		$exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
    		$attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    	} else {
    		$attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    	}
     
    	if ( empty($attachments) )
    		return '';
     
    	if ( is_feed() ) {
    		$output = "\n";
    		foreach ( $attachments as $att_id => $attachment )
    			$output .= wp_get_attachment_link($att_id, $size, true) . "\n";
    		return $output;
    	}
     
    	$itemtag = tag_escape($itemtag);
    	$captiontag = tag_escape($captiontag);
    	$columns = intval($columns);
    	$itemwidth = $columns > 0 ? floor(100/$columns) : 100;
    	$float = $wp_locale->text_direction == 'rtl' ? 'right' : 'left'; 
     
    	$selector = "gallery-{$instance}";
     
    	$output = apply_filters('gallery_style', "
    		<style type='text/css'>
    			#{$selector} {
    				margin: auto;
    			}
    			#{$selector} .gallery-item {
    				float: {$float};
    				margin-top: 10px;
    				text-align: center;
    				width: {$itemwidth}%;			}
    			#{$selector} img {
    				border: 2px solid #cfcfcf;
    			}
    			#{$selector} .gallery-caption {
    				margin-left: 0;
    			}
    		</style>
    		<!-- see gallery_shortcode() in wp-includes/media.php -->
    		<div id='$selector' class='gallery galleryid-{$id}'>");
     
    	$i = 0;
    	foreach ( $attachments as $id => $attachment ) {
    		$link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
     
    		$output .= "< {$itemtag} class='gallery-item'>";
    		$output .= "
    			< {$icontag} class='gallery-icon'>
    				$link
    			";
    		if ( $captiontag && trim($attachment->post_excerpt) ) {
    			$output .= "
    				< {$captiontag} class='gallery-caption'>
    				" . wptexturize($attachment->post_excerpt) . "
    				";
    		}
    		$output .= "";
    		if ( $columns > 0 && ++$i % $columns == 0 )
    			$output .= '<br style="clear: both" />';
    	}
     
    	$output .= "
    			<br style='clear: both;' />
    		</div>\n";
     
    	return $output;
    }

    Эту функцию нужно просто вставить в файл functions.php вашей темы и внести нужные вам изменения. Скорее всего потребуются небольшие знания PHP. Я всего лишь добавил следующий код:

    		if (trim($attachment->post_content) ) {
    			$output .= "
    				< {$captiontag} class='gallery-description'>
    				" . wptexturize($attachment->post_content) . "
    				";
    		}

    сразу после:

    		if ( $captiontag && trim($attachment->post_excerpt) ) {
    			$output .= "
    				< {$captiontag} class='gallery-caption'>
    				" . wptexturize($attachment->post_excerpt) . "
    				";
    		}

    Благодаря этой вставке, в галерее теперь будут отображаться описания к файлам. Все просто!

    Если не хотите, чтобы в галерее отображалась миниатюра, просто замените строку:

    'exclude'    => ''

    На:

    'exclude'    => get_post_meta($post->ID, '_thumbnail_id', 1)

    Теперь нужно снова включить шортаг GALLERY, но уже с нашей функцией. Кстати, название функции необходимо изменить, иначе это вызовет фатальную ошибку (старая функция галереи все еще доступна в файле media.php, и я не советую ее удалять!) Просто переименуйте функцию из gallery_shortcode в, например, new_gallery_shortcode.

    Чтобы шортаг снова заработал, добавьте в functions.php строку:

    add_shortcode('gallery', 'new_gallery_shortcode');

    Она должна быть после remove_shortcode и нашей новой функции.

    Кстати, не обязательно отключать функцию стандартной галереи, можно сделать все тоже самое, но в add_shortcode написать, например:

    add_shortcode('new_gallery', 'new_gallery_shortcode');

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

    Вот, собственно, и все =) Сохраняем файл и смотрим результат! Для людей, немного знакомых с программированием, не будет проблемой дописать любые фишки к стандартной галерее, и значительно расширить ее функционал, без всяких плагинов.

  • Wordpress 3.0, как же я тебя жду!

    0

    Решил я присоединиться к волне блоггеров, пишуших о грядущей третьей версии популярного движка. Правда волну я буду гнать в другую сторону =)

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

    Теперь, благодаря слиянию WP и WPMU появилась возможность создавать, а главное расширять в дальнейшем, комьюнити пользователей на сайте. То есть, как только назревает потребность в расширении возможностей пользователя на сайте, не придется перерывать кучу плагинов в поисках нужного функционала, не придется адаптировать эти плагины к уже существующим, да практически вообще ничего не придется делат! Изменили пару настроек и вперед!

    Боже, сколько ночей я потратил на то, чтобы нормально настроить шаблоны по категориям, разбить теги по категориям, сделать несколько независящих друг от друга разделов на сайте, чтобы в каждом была своя фишка, свои особенности! Сколько пересматривал плагинов в поисках того единственного, который хоть как-то можно использовать, пусть и с переделками... Все это теперь можно будет сделать за минуты, притом даже без знания программирования и без плагинов!

    Вордпресс превращается в CMS. Немного запоздало, так как очень многие именно как CMS ее и используют уже давно, но уж лучше поздно =) И я бесконечно рад этому факту! Хочу хотя бы со страниц своего блога выразить благодарность всем разработчикам и активным тестерам вордпресса: ребята, вы делаете по-настоящиму удобную, простую, но современную CMS, именно такой, какой она нужна в данный момент многим!

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

  • Вставляем изображения в комментарии wordpress

    0

    Озаботился я сегодня проблемой вставки изображений в комментарии. То есть, стояла задача: дать комментаторам возможность вставлять свои изображения в комментарии. На самом деле, для этих целей нашелся уже готовый плагин (ну как за это не любить вордпресс?) под названием Comment Image, он делает именно то, что нужно! Более того, он еще автоматически создает миниатюры и автоматически вставляет их в тело комментария со ссылкой на оригинал. Настроек у скрипта минимум:

    Страница настроек плагина

    Image selection field — это метод вставки поля для загрузки изображения в форму.

    1. Inject via WordPress hook — вставит это поле автоматически, используя средства вордпресса. В большинстве случаев сработает, но если шаблон делался через заднее место, то ничего не отобразится
    2. Inject via Javascript — поле вставится через яваскрипт. Сработает обязательно, если у пользователя в браузере разрешены эти самые скрипты. В принципе, разрешены они сейчас у всех.
    3. Do not inject, manually added — это если вы сами захотите вставить поле в шаблон. Ручками =)

    В последнем случае вам нужно будет отредактировать файл comment.php в вашем шаблоне, найти там форму отправки комментария и вставить код, вроде этого:

    <input class="image" name="image" size="32" type="file" tabindex="4" />
    <label for="url">Приложить изображение (JPEG)</label>

    Не забыть сохранить его на сервере в кодировке UTF-8 без BOM.

    Image field label — это текст рядом с полем загрузки.

    Thumbnail width — это ширина создаваемой плагином миниатюры. Кстати, все миниатюры сохраняются в автоматически созданную папу /wp-content/comment-image/. Плюс этого в том, что все создается и сохраняется автоматически. Минус в том, что многие выносят папку uploads из папки wp-content, чтобы разделить пользовательское содержимое от программной части. Мелочь, думаю исправит автор в следующий релиз.

    Вот как все выглядит в итоге:

    Комментарий с загруженным рисунком

    Казалось бы, все готово, можно выпускать новую фичу на сайт? А нифига! Картинка в коммент загружается, ссылка с миниатюры на оригинал стоит, но вот мой любимый плагин lightbox 2 не хочет эти картинки делать всплывающими, при клике тупо загружается оригинал в браузере =(

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

    Я просто научил свой лайтбокс обрабатывать комментарии, и сейчас научу вас, как это сделать на вашем блоге и с вашим любимым плагином для изображений =)

    Открываете основной файл плагина, обычно он лежит в папке /wp-content/plugins/плагин/плагин.php и ищите там строку:

    add_filter('the_content'

    Именно такую, так как продолжение ее может отличаться в зависимости от плагина. Для Lightbox 2 она выглядит так:

    add_filter('the_content', 'autoexpand_rel_wlightbox', 99);

    Нам нужно добавить точно такую же строку после нее, только the_content поменять на comment_text, сохранить файл и залить его назад на сервер. Все =) Теперь изображения из комментариев тоже всплывающие.

    Если вы тоже пользуетесь плагином Lightbox 2, то можете просто скачать исправленную версию lightbox-2.

    Удачного дня =)

  • Проверяйте темы Вордпресс!

    0

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

    Мама родная, залез в single.php и офигел! Нет, многие бы и не заметили этого, но у меня уже глаз наметан: наровне с функцией bloginfo (), которая запрашивает основные данные о блоге, вроде заголовка и описания, там использовалась еще и bloqinfo (), то есть «q» вместо «g». Залез в functions.php и посмотрел, что делает эта функция. Оказалось ничего страшного, она просто показывает ссылки на сайт засранца. Притом они были скрытые, в таблицу стилей был добавлен особый класс с display:none для таких ссылок.

    В общем, господа, не стоит доверять всему, что вы скачиваете, даже если это крупные сборники чего-либо. Скачав новую тему для вордпресса или любого другого движка, обязательно проверьте исходники шаблона на наличие подобных вставок, если вы разбираетесь в программировании. Либо просто откройте исходный код страницы после активации шаблона, и найдите все ссылки, например по сочетанию «http://».

  • Делаем антиспам-ссылку

    0

    Для одного сайта потребовалось вынести ссылку «это спам» непосредственно в список комментариев, чтобы вебмастер и модераторы могли непосредственно с сайта помечать комменты как спам, не залезая в админку.

    Стандартных функций для вывода такой ссылки я не нашел, в итоге проблему решил такой вот функцией:

    function spam_comment_link($link = 'Spam', $before = '', $after = '') {
    	global $post, $comment;
    	if( $post-&gt;post_type == 'page' ){
    		if ( ! current_user_can('edit_page', $post-&gt;ID) ) return;
    	} else {
    		if ( ! current_user_can('edit_post', $post-&gt;ID) ) return;
    	}
    	$location = wp_nonce_url(get_option('siteurl') . '/wp-admin/comment.php?action=deletecomment&amp;dt=spam&amp;c=' . $comment-&gt;comment_ID, 'delete-comment_' . $comment-&gt;comment_ID);
    	echo $before . '<a href="' . $location . '">' . $link . '</a>' . $after;
    }

    Далее, в шаблоне вывода комментариев пишем что-то типа:

    <!--p spam_comment_link('Спам!',' ','');-->

    Вместо «Спам!» можете написать любое слово, оно будет ссылкой. Вторым и третим аргументом в этой функции можно добавить текст до и после ссылки соответственно.

  • Adman снова в строю!

    2

    Я просто обажаю плагин Adman, он не просто умеет вставлять рекламные блоки (например адсенса) в верх и низ статьи, он умеет автоматически ставить блок в середину! То есть именно автоматически, мне не приходится ручками определять место для блока в каждой статье (хотя и это он может). Проблема этого плагина в том, что он уже очень давно не обновлялся, а с выходом Wordpress 2.9.1 начал еще и глючить (галочка, позволяющая отключить рекламу для конкретной страницы всегда ставилась, и ее нужно было каждый раз снимать при обновлении поста)

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

    Не обошлось и без дополнений :) Например, при редактировании поста есть галочка, с помощью которой можно отключить рекламу на этой странице. Если реклама отключена, то в дополнительных полях появлялась запись об этом и несколько мозолила глаза. Теперь дополнительное поле скрыто от глаз пользователя, как и положено.

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

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

    Описание, инструкции и ссылку на плагин можно найти на странице плагина.

  • Ошибки в плагине iMoney

    0

    Вот недавно открыл для себя плагин iMoney — великолепное решение для российских и СНГ-шных вебмастеров, работающих с вордпрессом. Если кто не знает, то плагин позволяет прямо из админки вордпресса подключить коды бирж ссылок Sape, XAP, MainLink? iLinks, LinkFeed, а также контекстные блоки Бегуна, Adsense, рекламу Adskape, а также просто произвольно разместить HTML- или PHP-код, при этом можно выбрать где и сколько размещать ссылок и блоков (до или после контента, в сайдбаре или футере). От вас требуется только зарегистрироваться в нужных партнерках и ввести свои партнерские идентификаторы в плагине. Плагин сам создаст нужные папки и зальет туда скрипты бирж ссылок, сам расставит права на эти папки... в общем, прелесть.

    К сожалению, у автора плагина судя по всему мало времени на его поддержку, поэтому лично у меня возникли проблемы с настройкой скрипта, ссылки сапы и меинлинка упорно не хотели ставиться после контента, только в футер, что для меня неприемлимо. Я перелопатил весь код скрипта и нашел-таки в чем была ошибка.

    Так как сайт автора работает с большими тормозами, решил выложить исправленную версию у себя, может кто найдет, скачает, и скажет мне спасибо =) А автору желаю скорее разобраться с делами и продолжить радовать вебмастеров такими приятными плагинами!

  • Убираем category в url вордпресса

    0

    Не знаю как вас, а меня всегда раздражало слово «category»  в URL категорий в вордпрессе, мне кажется это слово лишним, поэтому всегда убирал его с помощью специального плагина Top Level Categories. А вот недавно прочитал о том, что убрать их можно без всяких плагинов, просто поставив «...» в поле category base в настройках пермалинков! Все гениальное — просто! Интересно, накой черт автор плагина понаписал столько кода? =)

    Однако, я не уверен будут ли грамотно работать страницы, slug которых совпадает со слагом категории, ведь URL будет идентичный, я страницы практически не использую. Скорее всего двиг будет всегда показывать только страницу или только категорию. Так что, просто не делайте одинаковый слаг у страницы и категории.

    Никаких других глюков при убранном из адреса "category" не обнаружил, а ведь плагином, например, я пользовался с самого дня его появления! А вот при использовании точек нашел практически сходу! Если используете плагин Idealien Category Enhancements для упрощения работы с шаблонами категорий, то точки уже не сработают, используйте плагин. Если знаете еще плагины, конфликтующие с «точками» — напишите, пожалуйста, в комментариях.

  • Ускоряем вордпресс в десятки раз!

    2

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

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

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

    В блоггерской среде большой популярностью пользуется плагин WP Super Cache, и неспроста! Он действительно отлично стравляется с кешированием, после установки этого плагина блог начинает просто летать! Однако, лично меня он оттолкнул процессом своей установки: десять не самых простых для технически не очень подкованного блоггера шагов. Поэтому я начал искать альтернативу и в итоге сузил выбор до двух кешей: Maxsite Cache и плагина Really Static.

    Maxsite Cache порадовал меня простотой установки и тем, что он по результатам тестов практически ничем не уступает WP Super Cache, при этом он простой и легкий, как и все сделанное Максом.

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

    • Пока вы залогинены, кэш автоматически отключается для тех страниц, на которые вы будете заходить. В это время ваши посетители будут видеть последнюю актуальную версию. После того, как вы поработаете в админ-панели нажмите ссылку Выход. Тем самым вы укажете скрипту, что вам можно отображать страницы из кэша. До тех пор, пока вы этого не сделаете, вы будете считаться залогиненным.
    • Корректная работа с посторонними скриптами, которые меняют входящий URL, в частности т.н. защита продажных ссылок (антиобнаружитель продажных ссылок).
    • При создании нового комментария происходит сброс кэша только текущей страницы.
    • Произвольная ссылка для ручного сброса кэша.
    • Произвольный формат вывода статистики кэша. Можно отключить ссылку на мой сайт.
    • Отслеживание некоторых «особеностей» WordPress, вроде запоминания полей комментаторов. В кэше будут «чистые» поля форм.
    • Можно задать список адресов, которые не нужно кэшировать.
    • Встроенная статистика позволяет отследить процент «попаданий» кэша.
    • Отслеживание 404-страниц. Они не попадают в кэш.
    • Кэш автоматически сбрасывается каждые 4-е часа. Можно указать произвольное время.

    Установка проходит легко и просто, дастаточно создать папку кеша с нужными правами и вставить пару строк в файл index.php вордпресса.

    Из плюсов скрипта можно отметить то, что Макс его регулярно обновляет, плюс русскоязычная поддержка и помощь в установке, если что-то не выходит. Из минусов – скрипт платный, его цена – 30 WMZ, для многих простых блоггеров слишком высока.

    Второй кеш называется Really Static, то есть «действительно статический». Реализован он в виде плагина что безусловно удобно, однако это не значит, что его установка проще, чем скрипта Макса. К сожалению, она скорее сложнее, придется немного разобраться.

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

    Минусы очевидны: нужно будет немного повозиться с копированием/переносом, прописать новый адрес в настройках и тп. Не сложно, но многих пугает. Из плюсов – повышается безопасность блога, ведь админка и все потенциально дырявые скрипты теперь в отдельной папке, и даже если будет найдена дыра в безопасности, хакер может просто не узнает как обратиться к этому дырявому файлу.

    Really Static куда более гибкий плагин кеша, чем скрипт Макса, например можно отключить кеш для отдельных шаблонов, не кешировать категории или теги. А еще порадовала возможность разместить свой реальный блог абсолютно в любом месте, хоть на своей локальной машине (с выходом в сеть, естественно) плагин умеет загружать статику по FTP на любой другой сервер! То есть, желающие выпендриться могут держать вордпресс-блог на хостинге без PHP/MySQL, просто нужно установить вордпресс на своем компьютере и в момент публикации/редактирования быть в сети.

    Ну и главное достоинство Really Static – он бесплатный.

    В заключение хочу сказать, что я лично не делал тестов на предмет выяснения какой из кешев самый-самый, так как не задавался целью максимально снизить нагрузку. Оба кеша делают примерно одно и тоже – сначала генерируют, а потом отдают посетителям готовые к употреблению HTML-файлы. Скажу лишь, что прежде чем выбрать, я установил оба кеша на разные сайты, и понял, что оба примерно одинакого снижают нагрузку (раз так в 60-70 ;) Выбор свой я остановил на Really Static так как он бесплатный, более функциональный и на мой взгляд перспективный.

    Ах, да, совсем забыл! Оба кеша естественно не справляются с динамическим содержимым вроде последних десяти комментариев в сайдбаре и пому подобных фишек, просто потому, что комментарии могут появляться каждую минуту, и придется каждую минуту сбрасывать кеш полностью (сайдбар-то как правило на всех страницах одинаковый) – пропадает вообще смысл в кешировании. Однако, если вас не смущает то, что данный блок будет обновляться скажем раз в час или реже – смело ставьте!

    И для любителей Сапы и прочих ссылочных бирж – кеш вряд ли отрицательно скажется на уровне вашего дохода, просто настройте кеш так, чтобы он полностью обновлялся до того, как робот биржи появится на сайте – оптимально часа четыре или меньше. У меня за три недели использования Really Static не было ни одного error’а по вине плагина.