FAQ по WordPress

Ответы на часто задаваемые вопросы по WordPress.

В урл страниц попадает кирилица и соответствующе выглядит…

установил в админке http://…………../wp-admin/options-permalink.php числовой шаблон ссылок как дано по умолчанию: /archives/%post_id%

а потом через время заметил что у страниц в урл появилась кириллица, соответствующим образом отображаемая: http://tvoydom.info/archives/26/oae-aiciiaeii-aoaao-auaeyaaou-x-seed-4000/

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

Как получать письма в кодировке windows 1251

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

Есть некоторые решения, одним из которых является плагин wp_mail_cyr
http://mywordpress.ru/plugins/wp_mail_cyr
но, к сожалению, на версии 2.2.3, по крайней мере на сборке maxsite.org он не работает.

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

Есть ли какие-то решения?
P/S кстати, этот же плагин на версии 2.0.x продолжает нормально функционировать.

Темы wordpress

Здраствуйте, поюзал немного поиск, но нашёл очень мало Русифицированых тем для WordPress. Подскажите пожалуста где еще можно посмотреть.

свой поисковый плагин по блогу/сайту для 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>

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

Вывод custom fields и wp 2.2.2

Что-то я понять не могу, в wp 2.1+ код из рассылки Макса про произвольные поля: http://maxsite.org/ras20#comment-6520
для вывода custom field работал, а сейчас заметила, что для wp 2.2.2 произвольные поля не выводятся способом, описанным в рассылке.

Никто не в курсе, какие изменения были в wp 2.2.2 и как код нужно подправить, чтобы сделать вывод произвольных полей в любом месте шаблона?

В шаблоне таким способом выводятся произвольные поля (wp 2.2.2):

    <?php
if (is_single() || is_page() )
   {
   $text_desc = trim($post_meta_cache[1][$post->ID]['top-title'][0]);
   if ( strlen($text_desc) > 0 ) 
       echo '<h1>' . $text_desc . '</h1>';
      else echo '<h1>Привед!</h1>';
   }
   else echo '<h1>И Вам привед!</h1>';
?>

а вот в title и meta — не выводятся! (wp 2.2.2)
Для 2.1+ работал такой код:

<meta name="description" content="<?php
if (is_single() || is_page() )
   {
   $text_desc = trim($post_meta_cache[1][$post->ID]['description'][0]);
   if ( strlen($text_desc) > 0 ) echo $text_desc;
      else echo 'описание по-умолчанию';
   }
   else echo 'описание по-умолчанию';
?>">

А что же делать с wp 2.2.2?
Или я туплю где-то?

Windows Live Writer теперь публикует русские сообщения в WordPress

Windows Live Writer при определенных условиях неправильно публикует русские сообщения в stand-alone блоги на базе WordPress. В сети была обнаружена подробная инструкция процедуры правки системного реестра Windows, чтобы вылечить WLW от нелюбви к русскому.

Что бы каждый раз не замарачиваться с реестром (да и не все это могут), написана удобная программа: WLW Fix. Просто запустите ее, выберите нужные блоги и нажмите ОК. Все.

Скачать WLW Fix можно здесь >>>

еще про тег more (как разнообразить текст ката)

Если хочется спрятать часть текста "под кат" мы привыкли пользоваться тегом <!–more–>. (для совсем новичков про этот тег подробнее тут: http://forum.maxsite.org/viewtopic.php?id=697)
При этом ссылкой на оставшуюся часть текста становятся слова, прописанные в шаблоне, – для всех постов одинаковые, типа "читать дальше".
Многим не хватает при этом того разнообразия, к которому они привыкли, скажем, в ЖЖ – чтоб для каждого поста можно было назначать свои слова-ссылки. Для фикса этой проблемы можно воспользоваться custom fields, но, оказывается, все гораздо проще.
В следующий раз попробуйте вместо тега <!–more–> использовать, например, такую конструкцию: <!–more а сейчас я расскажу вам, где ключ от квартиры, где деньги лежат!–>. Слова "а сейчас я расскажу вам, где ключ от квартиры, где деньги лежат!" теперь станут ссылкой на оставшуюся часть поста!

Помогите еще с одним | HELP

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

* Август 2007
* Июль 2007
* Май 2007
* Март 2007
* Февраль 2007
* Декабрь 2006
* Ноябрь 2006
* Октябрь 2006
* Сентябрь 2006
* Август 2006
* Июль 2006
* Июнь 2006
* Январь 2006

Мне нужно оставить только это:
* Август 2007
* Июль 2007

Как это сделать?

Спасибо!

Помогите сделать навигацию | HELP

Помогите сделать навигацию такую-же как на сайте flashblog.ru, точнее внизу страницы:

Как можно вот это сделать, подскажите пожалуйста. Спасибо!

—————————-
Блог о Web дизайне

Проблемы с кодировками на хостингах

Ко мне очень часто обращаются по поводу проблем с кодировками на наших хостингах. Поэтому я решил, собрать всё воедино. 🙂

На большинстве русских хостингах, включая и Мастерхост, стоит кодировка по-умолчанию cp-1251 (windows-1251). По этой причине все соединения с БД инициируются именно в этой кодировке. Для того, чтобы кодировка была, как и положено в utf-8, необходимо при создании соединения с базой данных послать её специальный запрос, указывающий, что ваш блог работает utf-8.

В WordPress’е (начиная с 2.2) можно указать значение DB_CHARSET, которое переводит соединение в utf-8. Но для наших хостингов этого мало, поскольку нужно выполнять еще одну команду (COLLATE), которая переводит и внутреннее хранение данных в utf-8.

Так вот. Возможность использования COLLATE существует только в моей сборке, поскольку во всех остальных, включая и официальную, хоть и введен параметр DB_COLLATE, но реально нигде не используется. Это просто заготовка на будущее. Поскольку я постоянно сталкиваюсь "особенностями" наших хостингов, и знаю как криво настроены кодировки, то решил реализовать сразу правильное решение.

Больше всего проблем возникает со сборкой от mywordpress.ru, поскольку когда-то Антон решил за всех пользователей, что они должны работать в utf-8. Он жестко прописал в WordPress команду перевода в utf-8, хотя реально базы продолжали работать в cp-1251. В итоге произошло достаточно странные метаморфозы.

Изначально база на хостинге работала в cp-1251, то есть кодировки по умолчанию. Данные же из блогов на сборке от mywordpress.ru поступали в utf-8. И хотя отображение было корректно, но только по той причине, что начиная с MySQL 4.1 внутреннее хранение было в юникоде. Если же база не могла "переварить" юникод, то это отображалось как выпадение символов "ш" и "и" (иногда и другие). Это означает, что многобайтную кодировку (utf-8) пытались всунуть в однобайтную (cp-1251).

Но через какое-то время, на на наших хостингах массово стали переходить на новые версии MySQL (5.0). Админы, как и положенно взяли и перевели данные, которые теоретически дожны были быть в cp-1251, в utf-8. Получилось двойное преобразование.

Если у вас такой случай, то при просмотре данных в phpMyAdmin вы увидите либо разные кодировки сравнения (сопоставления) в таблицах WordPress, либо вообще крокозяблы в данных, хотя кодировка и будет указана верной.

Дополнительно это выражается еще и в том, что у вас неверно работает поиск. Например он дожен быть регистронезависимым. Также бывают проблемы с сортировкой по алфавиту. К сожалению, побороть это недуг средствами WordPress невозможно.

Пути решения.

В моей сборке, если вы устанавливаете блог с нуля, то берите utf-8. Это почти полная гарантия, что данные будут храниться в MySQL верно. Причем и для новых таблиц! Например тех, которые создают плагины. То есть вы сможете делать корректный бэкап, сортировку и поиск.

Если вы обновляете блог, то можно попробовать обновится до моей сборки WordPress 2.2 и выставить правильные DB_CHARSET и DB_COLLATE (все в новом файле wp-config.php). Например у меня для некоторых хостингов получалось добиться нормальной работы при cp1251 и cp1251_general_ci, хотя блог и база работали в utf-8.

Для самых тяжелых случаев, включайте перекодировщик.

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

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

Дополнительный момент следует учитывать и в том, что на наших хостингах очень любят принудительно посылать браузеру кодировку windows-1251. В некоторых хостингах есть специальная опция в настройках. Но для других существует только единственное решение – принудительно прописать кодировку в .htaccess. Причем будьте готовы к тому, что это придется сделать в каждом каталоге. Таких кривых хостингов, типа мажордомо с петерхостом, как грязи.

Для этого попробуйте прописать в .htaccess по очереди такие строки:

AddDefaultCharset UTF-8
CharsetDisable On
CharsetDefault UTF-8
CharsetSourceEnc UTF-8
CharsetRecodeMultipartForms off

Учтите, что какие-то из них могут не сработать, а какие-то вызвать ошибку доступа (ERROR).

Еще информация о кодировках здесь: http://forum.maxsite.org/viewtopic.php?id=598

rss отдельных категорий через feedburner

пользуюсь плагином FeedBurner FeedSmith

Не могу сообразить, как настроить фид через feedburner.com так, чтобы при запросе фида любой категории была подписка через feedburner?

Если обращаться к блогу через http://site.ru/feed или http://site.ru/rss, то подписка на фид идет через feedburner, а если подписываться на фид категории, скажем, «Собаки» (dogs) http://site.ru/category/dogs/rss, то подписка «идет» напрямую…

Ошибка «Cannot modify header information ….

Если у вас появляется сообщение об ошибке вида:

Warning: Cannot modify header information – headers already sent by (output started at…

то это означает, что вы неверно сохранили файл (имя файла указывается в первом Warning). На 99,99% вы сохранили файл в кодировке UTF-8 с сигнатурой (BOM).

Обратите внимание, что в логах ошибки присутствует полное её описание: имя файла и номер строчки. Например:

Warning: Cannot modify header information – headers already sent by (output started at /hosting/www/dbla-bla-bla/wp-config.php:1) in bla-bla-bla

Сие означает, что о ошибка в файле wp-config.php 1-й строке/символе. Поскольку сигнатура BOOM не видна обычными текстовыми редакторами, то можно выглядеть все глаза, но так и не увидеть этот «первый символ».

Ваши действия:

  • Скачиваем Notepad2: http://www.flos-freeware.ch/notepad2.html
  • Открываем файл в Notepad2.
  • Выбираем File – Encoding – UTF-8 (а не UTF-8 with signature!!!)
  • Жмем Save.
  • Загружаем файл на сервер.

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

Логин в sidebar без входа в админку

Поместите этот код в sidebar.php

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

<?php
  global $user_ID, $user_identity;
  get_currentuserinfo();
  if (!$user_ID):
?>
  <h5>Вход</h5>
    <form name="loginform" id="loginform" action="<?php echo get_settings('siteurl'); ?>/wp-login.php" method="post">
    <div><label>Логин:<br /><input type="text" name="log" id="log" value="" size="20" tabindex="7" /></label><br />
    <label>Пароль:<br /> <input type="password" name="pwd" id="pwd" value="" size="20" tabindex="8" /></label><br />
    <input type="hidden" name="rememberme" value="forever" />
    <input type="submit" name="submit" value="войти &raquo;" tabindex="9" />
    <?php wp_register('', ''); ?>
    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/></div>
    </form>
<?php
  else:
?>
  <h2><?php echo $user_identity; ?></h2>
    <ul>
    <?php wp_register(); ?>
    <li><a href="<?php echo get_settings('siteurl') . '/wp-login.php?action=logout&amp;redirect_to=' . $_SERVER['REQUEST_URI']; ?>">Выйти</a></li>
    </ul>
<?php
  endif;
?>

Вариант попроще:

<? php wp_register(); ?>
<? php wp_loginout(); ?>

Я в шоке! пропали панели инструментов.

Я в шоке! пропали панели инструментов. Т.е. ВИзуальный редактор . 🙁

зашел в "пользователи" > "ваш профиль"> поставил галочку "Использовать редактор типа Word при написании". Все равно нет визуального редактора.

куки кэн удалял.
Помогите ! Искал в инете и по форуму, из найденного ничто не помогло.

Распространенные ошибки при работе с WordPress

В: Поставил WordPress, пишу пост по-русски – у меня вылезают кракозябры/вопросики

О: Скорее всего кодировка базы данных не совпадает с кодировкой WordPress.

В: У меня и база, и WordPress – в кодировке UTF. Записи отображаются нормально, а вот стоит написать в шаблоне что-то по-русски – вылезают вопросики.

О: Скорее всего, файлы Вашей темы не сохранены в кодировке UTF. Пересохраните их в хорошем текстовом редакторе (EditPlus, Notepad++), выбрав кодировку UTF-8.

В: И база, и WordPress – в кодировке UTF. Редактирую шаблон, сохраняю в кодировке UTF-8, отправляю на сервер. Теперь в админке показывается белый лист / ошибка Cannot modify header information – headers already sent…

О: Вы сохранили файл в формате UTF with BOM (http://unicode.org/unicode/faq/utf_bom.html#BOM). Пользуйтесь редакторами, которые не ставят BOM в начало юникодных файлов, или дают возможность выбора — сохранять файл с BOM или нет.
upd: http://forum.maxsite.org/viewtopic.php?id=1075

Дополнения приветствуются!

Отсроченная публикация

Есть в Вордпрессе такая штука. Работает следующим образом. Создается пост с датой больше текущей. Он не отображается на главной странице до тех пор, пока не наступит дата его публикации. По прямой ссылке до публикации обычный пользователь на этот пост не попадает (404). Админ (автор поста) может просматривать пост до его публикации, переходя по прямой ссылке.

Проверка на существование заголовка (the_title) записи

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

<h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php 
 if (!empty($post->post_title)) the_title();
 else echo "***"; ?></a></h3>

Обрезание заголовков в WordPress

Замечено:
WordPress 2.0.10
PHP 5.x.x
MySQL 5.x
Кодировка UTF-8

Проблема:в некоторых плагинах или в хаках, котоыре вы используйте самостоятельно, для корректного вывода название топиков и урезание символов (чтобы сократить длину топика)
в кодировке UTF-8 использование функции substr некорректно, выводятся непотребные символы, кодировка исходников портится, но современный браузер исправляет это автоматически

Решение:
Следует воспользоваться функцией mb_internal_encoding("UTF-8");, если она поддерживается на вашем сервере, если же нет, то решение в виде отдельного класса описано на php.org в разделе функции substr.

Для примера привожу код вывода из одной категории нескольких постов с выводом только топиков (названий), оригинал кода – взято у Максима

<?php
mb_internal_encoding("UTF-8");
$posts_new = get_posts('category=2&numberposts=6');
foreach ($posts_new as $post_new) :
    echo '<a href="'; 
    echo get_permalink($post_new->ID);
    echo '" title="">';
    echo mysql2date('d.m',  $post_new->post_date); 
    echo ' - ';
    $news_small = mb_substr($post_new->post_title, 0, 70);
    echo $news_small;
     echo '...';
    echo '</a><br />';
endforeach;    
?>

как написать свой плагин

Ссылки:

1. Кодекс ВордПресса: http://codex.wordpress.org/Написание_плагина рус., в анг. варианте: Writing a plugin, еще перевод этой статьи: Статья «Как написать плагин для WordPress» (Writing a Plugin) — перевод
2. Выпуск 23. Базовый класс для WordPress-плагина рус., автор maxsite
4. Функции WordPress eng, источник: maxsite
5. WordPress 2.x Filter List for Plugin and Theme Developers
6. WordPress 2.x Hooks for Action – Comprehensive List for Plugin and Theme Developers

WordPress — стандарты кодирования плагинов (русский яз., статья на Хабре)

плагин wordpress plugin framework

WordPress How To: Easily make an admin panel for a plugin

Делаем плагины для WordPress. Часть 1
Делаем плагины для WordPress. Часть 2

Пишем wordpress плагин. Работа с БД.

Создание таблиц в плагине для WordPress перевод статьи кодекса Creating Tables with Plugins

Принцип создания плагина на примере (код с комментариями), от Ю.Б. http://mywordpress.ru/support/viewtopic.php?pid=42002#p42002

У кого что есть еще, добавляйте

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