Konstantin

WP All-In-One tools – Многофункциональный плагин

Описание:

Этот плагин представляет собой небольшой, но функциональный плагин-менеджер, сочетающий в себе небольшие, но, как показывает практика использования WordPress, необходимых функций и «заплаток». Теперь нет необходимости закачивать множество отдельных плагинов, можно воспользоваться одним, и уже в нем выбрать необходимый функционал. На данный момент он объединяет в себе следующие:

* Replace WP-Version (сокрытие версии используемого WordPress);
* Disable WordPress Core Update (отключение функции проверки новых версий, в показа сообщения о необходимости обновления);
* Disable WordPress Plugin Updates (аналогично Disable WordPress Core Update, но только плагинов);
* Show Me Options (отображает при активации плагина прямую ссылку к его странице настроек);
* Minimum Comment Length (выбор минимальной длинны комментария);
* Iodized_Salt (при авторизации на сайте, ключ сессии в cookie дополнительно шифруется с IP пользователя);

Установка / Использование:

* Скачайте последнюю версию плагина (отсюда);
* Распакуйте архив в «/wp-content/plugins/» вашего сайта;
* Активируйте на странице управлениями плагинами;
* Перейдите на страницу «Настройки» → «All in One tools» и выполните необходимые настройки;

Скриншот(ы):

Скачать:

WP All-In-One Tools (infine.ru server)
WP All-In-One Tools (wordpress.org server)

Hidden Content – Плагин сокрытия контента (скрытый текст)

Plugin: Hidden Content

Что он делает?
Рано или поздно, но при интенсивном развитии проекта возникает вопрос о правах доступа к той или иной информации. Не зависимо, статья это или комментарий, довольно часто возникает необходимость показать ту-же ссылку или кусок кода “своим” людям, но не простым посетителям или поисковым роботам. А иногда несколько иначе (как поступают варезники) – для поисковых роботов открывают полный доступ, но при просмотре страницы, если вы не зарегистрированы или не зашли на сайт под своим логином/паролем – приватную информацию вы не получите.

Как он работает?
Достаточно поместить необходимый блок (картинки, текст, etc) между <!–beginHide–> и <!–endHide–> (метки можно изменить в настройках).

Где скачать?
http://www.infine.ru/support/wp_plugins/hidden-content.htm

Протестировать верстку в IE разных версий – в одном месте? Да!..

Остался предельно довольным после того как познакомился "поближе" с отличной, но молодой утилитой IETester. Итак, это утилита для тестирования верстки в IE разных версий. Для каждой версии отводится просто своя закладка. Здорово одним словом. Прощай WMWare, который держал ради ie6, прощай глючный эмуль ie7 в ie8.. По этому случаю написал небольшой отзыв у себя на сайте.

Ссылки для загрузки (размер: 23.8 Мб):
с my-debugbar.com – http://www.my-debugbar.com/ietester/install-ietester-v0.2.2.exe
с infine.ru – http://www.infine.ru/download/12/

wp_list_pages => array()

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

  # подключаем массивы, храняшие настройки, и прописанные в functions.php
  global $portfolioImages, $previewObjectsIDs, $indexPreviewData;
  # локальные переменные тоже оглашаем
  static $i = 0;
  $indexPreviewData = array(); # этот массив будет хранить данные для формирования превью на индексе

  # получаем посты из категории портфолио
  $portfolioPosts = new WP_Query('cat='.$infinePostsCats['portfolio'][categoryId].'&showposts=5&orderby=ID');
  while($portfolioPosts->have_posts()) {
    $portfolioPosts->the_post();
    $indexPreviewData[$i] = array( # пишем и парсим необходимые данные в массив
      id => $post->ID,
      title => $post->post_title,
      guid => $post->guid,
      permalink => get_permalink(),
      liClass => $previewObjectsIDs[$i],
      imageId => preg_replace("/(.*)".$portfolioImages[previewRegular]."(.*)/is", '$2', $post->post_content)
    );
    $i++;
  }

с постами понятно, но со страницами чего-то запарился. ваши мысли, коллеги?

Метод пактной загрузки стилей и скриптов. Долой лишний код!

Итак, вопрос: а нужны ли пачки строк в шапке вида "<script src="…" type="text/javascript"></script><style type="text/css" media="screen">@import url(‘…’);</style>" и так далее. с увеличением "фишечек" количество их заставляет задуматься – а оно того стоит? у мну когда одни мета-поля стали вырастать более чем за 70 строк (включая php условия) – задумался..
Ведь можно сделать проще – отдавать браузеру весть кантент одним потоком – увеличим скорость загрузки страницы, и добьемся поставленной цели – избавимся от лишнего кода. Формат запроса будет: скрипт.php?режим;файлы, остается лищь сформировать вызов к скрипту и собственно его самого наколбасить.
Плавно переходим к кодингу. В functions.php добавляем:

define('INFINE_FILES_LOADER',   'metaloader.php'); // загрузчик файлов, юзаемый для скриптов и ксс
function infine_include_file($filename) { # эту функцию юзаю и для других целей
  if(file_exists($filename)) include_once($filename);
}
infine_include_file(TEMPLATEPATH.'/'.INFINE_FILES_LOADER);

в корень темы аккуратно ложим файл metaloader.php, со следующим содержанием:

<?php

define('INFINE_METALOAD_BRCHAR',  ';');

function infine_load_files($mode = 'css', $files = '', $echo = false, $printBefore = '') {
  if($files !== '' && is_array($files)) {
    switch ($mode) {
      case 'css':
        $prefix = "<style type=\"text/css\" media=\"screen\">@import url('";
        $postfix = "');</style>\n";
        break;
      case 'js':
        $prefix = "<script src=\"";
        $postfix = "\" type=\"text/javascript\"></script>\n";
        break;
    }
    $request = get_bloginfo('template_url').'/'.INFINE_FILES_LOADER;
    $request .= "?$mode".INFINE_METALOAD_BRCHAR;
    $files = array_unique($files);
    for ($i = 0; $i < count($files); $i++) {
      $request .= $files[$i];
      if($i != count($files)-1)
        $request .= INFINE_METALOAD_BRCHAR;
    };
    $request = $printBefore.$prefix.$request.$postfix;
    if($echo){
      print $request;
    } else {
      return $request;
    }
  }
}

$request = $_SERVER['QUERY_STRING'];

if(isset($request)) {
  static $contentType, $charset;
  $files = array();
  $i = 0;
  $charset = 'UTF-8';

  # выполняем проверку
  $request_files = str_ireplace("..", "", $request);

  # из запроса формируем массив с именами файлов
  $f = strtok($request_files, INFINE_METALOAD_BRCHAR);
  while ($f) {
    $files[$i] = $f;
    $f = strtok(INFINE_METALOAD_BRCHAR);
    $i++;
  }

  $request_mode = array_shift($files);

  foreach($files as $file) {
    #print "/* filename: ".$file." */\n";
    $content .= @file_get_contents($file);
  }

  $content = str_replace(array("  ", "\n", "\r\r"), "", $content); # more compress, but js maybe not work
  //$content = preg_replace("/\/\*+.*?\*\/+/", "", $content); # вырезаем комментарии между /* */

  switch ($request_mode) {
    case 'css':
      $contentType = "text/css";
      break;
    case 'js':
      $contentType = "text/javascript";
      break;
    break;
  }
  ob_start("ob_gzhandler");
  header("Content-type: $contentType; charset: $charset");
  header("Cache-Control: must-revalidate");
  header("Expires: ".gmdate("D, d M Y H:i:s",time() + 3600 /* 60*60 */) . " GMT");
  print $content;
}

оттак. с файлами вроде разобрались. теперь доберемся до шапки нашей любимой темы. В нулевую строку вписываем:

<?php
$cssfiles = array(); #массив с путями к css-файлам
$js_files = array(); #массив с путями к скриптам
?>

м теперь заменяем цель нашей работы – все вызовы к стилям и скриптам заменяем соответственно:

array_push($cssfiles, get_bloginfo('template_url').'/mozilla.css'); /* CSS */
array_push($js_files, get_bloginfo('template_url').'/swfobject.js'); /* JS */

последний шаг: пора вывести сформированный запрос:

<?php infine_load_files('js', $js_files, true); ?>
<?php infine_load_files('css', $cssfiles, true); ?>

вот вроде и всё. теперь на выходе получим не

<script src="http://www.your-site.com/wp-content/themes/theme/js/script1.js" type="text/javascript">
<script src="http://www.your-site.com/wp-content/themes/theme/js/script2.js" type="text/javascript">
<script src="http://www.your-site.com/wp-content/themes/theme/js/script3.js" type="text/javascript">
<script src="http://www.your-site.com/wp-content/themes/theme/js/script4.js" type="text/javascript">

а

<script src="http://www.your-site.com/wp-content/themes/theme/metaloader.php?js;http://www.your-site.com/wp-content/themes/theme/js/script1.js;http://www.your-site.com/wp-content/themes/theme/js/script2.js;http://www.your-site.com/wp-content/themes/theme/js/script3.js;http://www.your-site.com/wp-content/themes/theme/js/script4.js" type="text/javascript">

из кода будут вырезаны комментарии /* … */, лишние пробелы, лишние переносы строк (повторяющиеся). Проверено, работает без проблем. таким методом подрезал на скриптах ещё порядка 8..12% от общей массы

upd. обновил скрипт. теперь работает как надо
upd. обновил metaloader.php – теперь он ещё и gz-ом жмет. экономим ещё порядка 30-40%

ps. нечто подобное уже встречал в сети, но на момент написания не нашел.

Трабла с версткой макета – DIV на высоту всего документа

Трабла такая – есть макет, ссылка вот:

Filename: imposition.zip
Filesize: 1.43 KB
Md5 Hash: c29a8f2dcd68503adc5b732d446d2578

http://download.infine.ru/temp/imposition.zip

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

Сделать дамп (backup) БД и упаковать его. Автоматически

Как сказал один умный человек – дампы (backup) делать надо. Но ручками каждый раз лезть в Базу Данных, или пользоваться плагинами, делающие его в полу-автоматическом режиме – тоже не наш метод. Нам надо сделать, поставить и забыть 🙂

Итак, что для этого необходимо сделать:

1. Скачать скрипт, выполняющий всю работу, написанный на php;
2. Распаковать архив, изменить данные доступа к серверу БД (271, 272 строки) на свои;
3. Создать на сервере директорию, в которой будут храниться наши дампы;
4. Загрузить в неё скрипт, сделать пробный запуск из командной строки (shell) – "/usr/bin/php -q /home/…/mysqldump.php";
5. Если в директории со скриптом появился файл (выполнить команду "ls") вида backup_DBNAME_YYYY_MM_DD_HH_MM.sql.gz – всё работает корректно. Иначе – проверить настройки и убрать символ "@" перед mysql_connect(".. (271 строка, включить показ ошибок и предупреждений);
6. Если директория доступна для просмотра "извне" (директория web-сервера, там, где находиться ваш сайт), для неё необходимо закрыть доступ. Делаем это следующим образом: создаем файл .htaccess в этой же директории со следующим содержанием:

<Files "*.*">
order allow,deny
deny from all
</Files>

7. Теперь дело за малым – поставить скрипт а CronTab вашего сервера. Подавляющее большенство хостеров предоставляют доступ к нему из своей панели управления, иначе можно воспользоваться shell-ом (описание, англ.). Запись должна иметь вид, аналогичной команде, при помощи которой мы запускали скрипт на проверку работоспособности: /usr/bin/php -q /home/…/mysqldump.php

Теперь можно откинуться на спинку стула, и забыть backup-ах Базы Данных.
(источник, комменарии)

получить количество постов в рубрике

решения есть, но не лучшие. можно запустить отдельный цикл, перебрать нужную категорию увеличивая счетчик. можно пропарсить вывод категорий. можно в БД искать объединяя таблицы, но разве нет простой функции (запроса), чтоб получить в переменную количество постов из определенной категории? похоже что что-то пропустил и теперь парюсь.
Подскажите более толковое решение друзья? О_о

wordpress mu – не шлет емаил с паролем

привед друзья. решил сделать подарок своей девушке в довесок к основному на новый год – собственный блог сервис. а то пользоваться от @маил.ру когда её парень разработчег – должно быть стыдно. решил исправляться:)

проблема замечена при тестировании на самом сервере, на локале под управлением денвера (apache2+php4.4.4+mysql4) всё на ура. на удаленном же – после заполнения регистрационных данных, в момент показа надписи, мол, проверяй емаил, умирает на моменте формирования кантента. с wp-signup.php и wp-activate.php ничего особого не делал, лишь встроил дизайн.

в собственных скриптах mail(); превосходно работает.

блоги создаются в директориях ( $base = ‘/’; ), версия 1.3 от лекактуса.

вывод кодержимого директорий в теле поста + ajax

нда, не только же отвечать на вопросы:) собственно, сабж. есть зверь http://filenice.com/demo/ приручил его, диз встроил, перевел, пару багов звлечил, всё как полагается. поставил на хост – умер падонаг. даж разбираццо желание пропало, отправился спать.
должен уметь работать с кантентом диры без перезагрузки страницы, быть в то же время лёгким и юзабильным. всё просто. ну а кто его знает, может уже есть готовое решение!..
а если на чистоту – то просто лень писать плагин и встраивать сие в вп, хотя было бы круто:) кстати, поделюсь наработками, опенсорс имхо:) мылом дам линк

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

Автоматические иконки к ссылкам, Google-map на сайте

http://downloads.wordpress.org/plugin/file-icons.zip – добавляет в автоматическом режиме иконки к ссылкам (мылу – письмо, архиву – иконку zip и многое другое), реализовано на уровне css

URL: http://downloads.wordpress.org/plugin/find-us.zip – (более подробно http://wordpress.designpraxis.at/plugins/find-us/) позволяет встроить google-map навигатор на сайт (иметь при себе Google API Key)

Методы защиты блога от взлома

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

используем в своем php скрипте wp-функции

не буду многословен: есть ajax либа (greybox, http://orangoo.com/labs/uploads/GreyBox_v5_53.zip), открывает поверх кантента div контейнер, содержимое его подгружает из файла (читай: любой урл). дабы прикрутить этого зверя в качестве способа добавления комментариев (открываем урл со скриптом, хде прописаны теги добавления каммента) необходимо заюзать wp-функции, такие как "bloginfo(‘template_url’);", "if ($comments)" и др.

ваши предложения как это лучше организовать, кроме того как вписать include(‘../../../wp-config.php’);
wp2.3-max

свой поисковый плагин по блогу/сайту для Firefox

Пользователям Firefox посвящается.

итак, наверняка вы знаете что в фаире есть замечательная тулза как поисковый бар. очень удобно, а главное – можно сделать и поиск на своём блоге/сайте. описание поисковой формы храниться в файле *.src, и должен он иметь примерно следующий вид:

http://www.your_host.domen/srhplugin.src
# Search Plug-in for Mozilla 
# and your comments must be here

<search
   version = "1.0" 
   name="Test search plugin"
   description="Firefox search plugin test"
   method="GET"
   action="http://your_host.domen" 
   queryCharset="utf-8"
>
<input name="s" user>
</search>

и, собственно, скрипт его обрабатывающий (универсальная функция):

function addEngine(url_src, url_img, info){
    if(typeof(url_src)=='undefined'){ var url_src = 'http://www.your_host.domen/srhplugin.src'; }
    if(typeof(url_img)=='undefined'){ var url_img = 'http://www.your_host.domen/search.gif'; }
    if(typeof(info)=='undefined'){ var info = 'Lebnik'; }
    
    if ((typeof window.sidebar == "object") && (typeof window.sidebar.addSearchEngine == "function")) { 
        window.sidebar.addSearchEngine(url_src, url_img, info, '0');
    } else {
        alert("Извините, чтобы установить плагин поиска, Вы должны использовать браузер Firefox.");
    }
    return false;
}

и метод его вызова:

<a onclick="return addEngine();" href="#" title="Плагин поиска для Firefox">Плагин поиска для Firefox</a>

search.gif можете смело использовать и .jpg и .gif, 16×16 px.

теперь достаточно выбрать нужный плагин для поиска в firefox-е и можно тестить 😎

вывод n случайных изображений на странице шаблона

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

.../wp-admin/options-misc.php (Разные настройки) -> Сохранять файлы в эту папку: (wp-content/uploads);
НЕ отмечаем "Сортировать мои загруженные файлы по папкам по месяцу и году"

теперь открываем нужный файл шаблона (например, index.php) и нежно вставляем в него следующий код:

[code- <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3">
<div id="randomcars">Три случайные фотографии автомобилей на продажу:</div>
</td></tr><tr>
<td id="rndimgtd"><?php

$uploaderpath = $_SERVER[‘DOCUMENT_ROOT’].’/wp-content/uploads’;
$archiveurl = ‘http://host.domain/wp-content/uploads/’;
$previewsdir = ”; // в случае, если захотите хранить превьюшки в отдельной папке
$valid_types = array(".THUMBNAIL.GIF","THUMBNAIL.JPEG", ".THUMBNAIL.PNG", ".THUMBNAIL.JPG");
$pics = 3;

$dDir = opendir($uploaderpath . $previewsdir);
$aFileList = array();
while ($sFileName=readdir($dDir)) {
if ($sFileName!=’.’ && $sFileName!=’..’) {
$aFileList
=$sFileName;
// echo $sFileName.'<br/>’;
}
}
closedir ($dDir);

$j = 0;
foreach ($aFileList as $aFileName) {
$fileindir = strtoupper(substr($aFileName,strlen($aFileName) – 14,
strlen($aFileName)));
if (in_array($fileindir, $valid_types)) {
$imagesarray[$j] = $aFileName;
// echo $imagesarray[$j].'<br />’;
$j++;
}
}

if ($j >= $pics){
$rndimgs = array(”,”,”);
$k = rand(0, $j);
for ($i = 0; $i <= 2; $i++) {
while (in_array($imagesarray[$k], $rndimgs)) {
$k = rand(0, $j);
}
$rndimgs[$i] = $imagesarray[$k];
}
for ($i = 0; $i <= $pics-1; $i++) {
?><img src="<?php print($archiveurl.$previewsdir.$rndimgs[$i]); ?>" width="144" height="108" alt="Loading…"
title="Превью" /><?php
//sleep(1);
if($i <= 1){ ?>
</td><td id="rndimgtd">
<?php }
}
} else {
echo(‘<div style="background-color:#E9967A;color:#000000;line-height:100%;padding:5px;border: double #aa0000 4px;">
<small><b>error</b><br />Невозможно вывести превью изображений: минимальное количество
изображений-превью должно быть не менее трех.</small></div>’);
}
?>
</tr></table>[/code]
теперь, при загрузке изображения (во время создания post-а) в аплоаде будет создаваться превьюшка, и скрипт будет её подгружать. количество картинок регулируется путем изменения переменной $pics.

как дополнение к вышенаписанному, опишу способ как в данном примере выводить изображения закругленные с произвольной рамкой (html only). дописываем перед тегом <img src… следующее:

<div style="position:absolute"><img src="<?php bloginfo('template_directory');?>/images/rnd-cars-border.gif" width="144" height="108"></div>

и кидаем гифку из аттача в папку с шаблоном.

проверка авторизации в cms сторонним php скриптом

условия: существует домен с установленным wordpress’ом. так-же существует под-домен (к примеру, files.domen.host), служащий для хранения (заливки) файлов через web-интерфейс.
постановка цели: необходимо сторонним скриптом, не входящим в состав wordpress’а проверить авторизацию в самой cms. немного поясню на примере: если вы залогинились в wordpress’е, то вы получаете доступ к данным закрытым для простых посетителей в пределах одного домена.

фуф, вроде как всё сказал. ваши предложения по этому поводу?

вывод списка рубрик в виде текста

необходимо организовать вывод списка рубрик в виде текста. фишка вся заключается в том, что надо привязать к рубрике (category) js при помощи которого открывается суб-меню с вложенными в нее рубриками.
поясню:
при стандартном вызове

<?php wp_list_cats('sort_column=name&child_of=1&children=0&hide_empty=0'); ?>

выводиться листинг следующего содержания:

    <li><a href="http://somesite/?cat=2" title="sometitle">some_sub-category_2</a>
</li>
    <li><a href="http://somesite/?cat=3" title="sometitle">some_sub-category_3</a>
</li>
    <li><a href="http://somesite/?cat=4" title="sometitle">some_sub-category_4</a>
</li>
    <li><a href="http://somesite/?cat=5" title="sometitle">some_sub-category_5</a>
</li>

а необходимо:

<div id="divTop1" class="clTop"><a href="somehref" onclick="menu(1); return false" onfocus="this.blur()">some_category_1</a><br>
<div id="divSub1" class="clSub">
    <a href="http://somesite/?cat=2" title="sometitle">some_sub-category_2</a><br>
    <a href="http://somesite/?cat=3" title="sometitle">some_sub-category_3</a><br>
    <a href="http://somesite/?cat=4" title="sometitle">some_sub-category_4</a><br>
    <a href="http://somesite/?cat=5" title="sometitle">some_sub-category_5</a><br>
</div><br />
</div>

код скрипта служит для того, что-бы раскрыть divSub1. а для этого надо вывести some_category_1 в виде текста и потом уж привязать в нему ссылку.

есть идеи как это сделать? 😎

Создание органайзера на сайте

Задача следующая: необходимо на сайте организовать страницу календаря текущего месяца (+возможность "промотки" по месяцам), а так-же посетители сайта могут добавлять свои заметки касательно определенного дня. Поясню. Пользователь заходит на страницу, выбирает день, удобный ему, кликает по нему (возможно организовать через простой ввод данных в форме, не обязательно клик) и оставляет заметку, с содержанием того, что-бы он хотел получить в этот день. здесь речь идет об организации спортивных игр, так-что желательно еще и администрировать все данные (при добавлении пользователь вводит тел. и емаил, которые видны только редакторам и администратору).

Вот такая вот задача. Слышал о том, что всё это реализуемо средствами wordpress при помощи соответствующего плагина, но мне ничего путнего найти не удалось.

подскажите как поступить плз!

проблемы с get_links()

при вызове функции get_links() без параметров она возвращает список всех ссылок с комментариями к ним. всё хорошо, но вот если необходимо отобразить листинг ссылок безо всяких комментариев, as is, то существует параметр show_description=false.
при следующем вызове:

<?php get_links('show_description=false'); ?>

не отображается вообще ничего, пустая категория ссылки. почему так происходит?
использую wordpress-2.1.3-rus

Изменение содержимого писем пользователям

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

имхо, стандартные как-то поп

Anonymous
Отправить
Ответ на: