Archive for March, 2013

Юзеры с одним мылом

Tuesday, March 26th, 2013

Полезный плагинчик - http://wordpress.org/extend/plugins/allow-multiple-accounts/

Вкратце: с третьей версии WordPress не позволяет создавать разных юзеров с одним мылом. А если нужны заранее заготовленные учётки, чтобы только раздал пароли и всё? Тогда надо установить плагинчик Allow Multiple Accounts, по ссылке выше.

Автоматическая вставка файла в WordPress по его имени

Monday, March 25th, 2013

Бывают такие ситуации, когда файл в WordPress проще залить через FTP, чем внутренний менеджер. Это особенно касается больших файлов - в последних версиях WP они просто п! Что характерно - в древних ВордПресс огромные файлы заливаются менее проблематично. Ну да ладно, вернемся к проблеме.

Итак, залили через FTP в директорию загрузки Вордпресс, а теперь надо вставить ссылку на этот файл в пост. Что надо сделать? Правильно, вручную составить и вбить полный URL.

Для автоматизации этой рутины я написал сегодня короткий плагинчик

http://kvisaz.ru/files/2013/03/kvisaz-auto-file.zip

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

1. В момент записи поста плагин фильтрует его на предмет шортлинка auto_file… /auto_file. Шортлинки - они как теги, напомню, только записываются квадратными скобками. К примеру, вот так [shortlink]содержимое[/shortlink]. В качестве содержимого было kvisaz-auto-file.zip.

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

3. Бонусная фича! Если вместо имени файла в содержимое шортлинка вставить !auto, то в качестве имени файла будет использовано имя поста. Это актуально для автоматически созданных драфтов, к примеру, с помощью Featured Image Posts.

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

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

- автоматическая вставка размеров изображения для файлов картинок (у меня она тоже есть, это делается банально с помощью getimagesize, который обрабатывает даже swf).

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

Но, как я уже сказал, этот плагин может стать незаменимым и просто для “ленивой” вставки в пост ссылок на очень большие файлы, которые заливаются по FTP. Только помните, что заливать надо в директорию, соответствующую текущему году и месяцу, если только в WordPress эта опция (организация загрузок по месяцам и годам) не выключена. Если она выключена, то можете заливать просто в uploads или что там у вас вместо директории загрузки.

Превьюхи к каждому посту в WordPress

Monday, March 18th, 2013

Для превьюх (thumbnails) в WordPress последних версий используется удобный механизм Featured Image - просто указываешь картинку из библиотеки и она прикрепляется к посту. Эта картинку в шаблоне можно выводить так:

>> внутри цикла

if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
the_content();

Но the_post_thumbnail() и родственный ему get_the_post_thumbnail() генерируют сразу готовый html-блок с картинкой, в котором вставлен класс, alt и title. При этом alt и title берутся из медиа-библиотеки, где, как считают авторы WordPress, у каждой картинки они просто обязаны быть прописаны.

Но что, если в медиа-библиотеке WordPress таких alt и title нет? Или они содержат абракадабру (при массовой загрузке картинок в alt и title вставляется имя файла)? Или нужно сделать подходящий alt и title для этого, конкретного поста?

Для таких случаях я вчера нашел такой рецептик:


$thumb_id = get_post_thumbnail_id($post->ID);
$url = wp_get_attachment_url($thumb_id );

$html = '[img src='.$url.' class="Class1" title="Text_1" alt="Text_2" /]'

// квадратные скобки для img на самом деле обозначают угловые

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

Я, кстати, сделал это не для темы, а для плагина PostList, который выводит анонсы других постов в любом указанном посте с помощью простого кода, который вставляется прямо в встроенном текстовом редакторе WordPress.

Разное оформление для разных категорий в WordPress

Thursday, March 14th, 2013

Сегодня узнал, как легко и быстро сделать свои шаблоны для разных категорий в WordPress. Можно делать тематическое оформление для каждой рубрики, а ещё - и для некоторых это может оказаться самым важным - вписывать большой уникальный текст с качественным описанием каждой рубрики. Хоть на сто килобайт :)

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

  1. category-slug.php (Note: available with Version 2.9)
  2. category-ID.php
  3. category.php
  4. archive.php
  5. index.php

Если нет первой, он переходит к следующей, и так пока не упрется в index.php, который быть в папке темы просто обязан (иначе WP просто не активирует эту тему). Другими словами, если вам нужно уникальное оформление для рубрики “Лара Крофт”, вам нужно в папку тему положить файлик category-lara-kroft.php. Или посмотреть, какой ID у рубрики Лары Крофт - к примеру, 70 - и назвать файлик category-70.php.

В общем, понятно? Название уникального шаблона для категории должно начинаться с “category-” и заканчиваться её слагом или ID. И ВП автоматически включит оформление из этого файла.

Такие файлики очень легко генерить из базовых - того же index.php, если тема делается своими силами с нуля, или из arсhive.php, из category.php, если тема взята уже готовая (там эти файлы, как правило, уже имеются). Вставляем уникальный бэкграунд, вписываем пару картинок, влепляем длинное качественное описание рубрики “Лара Крофт - это выдающийся Томб Рейдер нашего времени, если не считать людей, голосующих за вынос Ленина из Мавзолея” и убогая рубрика WordPress из убогой ленты анонсов превращается в качественный раздел нормального сайта.

Темы, плагины и загрузки WordPress - в других папках

Wednesday, March 6th, 2013

Поделюсь ещё одним злобным полухаком, недокументированным официально.

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

Официальный документ гласит так:

впишите в wp-config.php следующие пути
define ('WP_CONTENT_DIR','/full/path/to/your/content/dir');
define ('WP_CONTENT_URL','http://example.com/full/path/to/your/content/dir');

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

Только это не работает.

Я не знаю, что за тупаки писали этот документ, или кто внес исправления, после которых оно перестало работать
да только редактирование wp-config.php не работает, как пишут на форумах, с версии 2.7.1

Но я нашел, как это сделать в версии 3.1 - надо просто открыть файл wp-includes/default-constants.php,
найти там означенные константы и вписать туда нужные значения. И вуаля!

Конкретно вуаля! означает, что теперь все картинки в дизайне сайта могут лежать по адресу
site.ru/design/themes

а плагины лежать в папках
site.ru/design/plugins

строки в default-constants.php будут выглядеть для этого случая так:

define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/design' );
define('WP_CONTENT_URL', 'http://site.ru/design');

естественно, вместо design можно подставить какую угодно директорию
в wp-includes/default-constants.php вообще много интересного

PS: я написал про кастомную директорию для загрузок - так вот, это пока тоже не работает, как описано в документах. То есть можно просто грузить картинку в кастомную папку внутри папки, где работает WP. А если хочется грузить в папку за пределами родной папки WP - тут пока я хак не нашел.