четверг, 31 января 2013 г.

Делаем сайт с гибкой структурой на wordpress.


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

Что же меня останавливало? На самом деле я хотел написать статью о том, как без плагинов создавать абсолютно любую структуру сайта, но ведь это смогут реализовать только те, кто разбирается в wordpress и его коде, а такие уже и сами знают как это сделать. А так как большая часть пользователей — новички, то им нужно что-то более простое. Поэтому пришлось изучить все плагины, которые работают с новой функцией в wordpress 3 версий — custom post type.
Итак, задача была такая — без особых трудозатрат и знаний сделать на wordpress несколько типов записей, для каждого из них создать отдельный шаблон для вывода, свой набор рубрик и параметров, свой набор значений, которые можно указывать в админпанели.
Реализуется это так:
  • типы записей (к примеру это будет отдельный раздел на сайте, где будут новинки кино) — через custom post type (типы записей)
  • отдельные рубрики и метки (к примеру, это будет рубрики «комедия», «ужастики» и т.д., а также метки-актеры) через custom taxonomy (таксономию)
  • отдельные значения в админке (к примеру, вы захотите сразу указывать отдельно в админке рейтинг фильма на кинопоиске) — custom meta box. (мета блоки)
Яндекс.ДиректВсе объявления
Сделать сайт с нуля Узнай, как сделать сайт с нуля на реальном примере! srs.myrusakov.ru
Пускай названия вас не пугают, все очень просто на самом деле.
Сначала ничего путевого найти не удавалось. То плагины были слишком простые, то слишком сложные, то не хватало функционала. Единственное, что сразу нашел интересного — custom post type ui. Очень хороший плагин, он умеет создавать новые типы записей и таксономию, но к сожалению в нем нельзя прописывать отдельные поля ввода для каждой записи, поэтому поиски продолжились, пока не нашлось самое лучшее решение о котором я и расскажу.
И решение это — серия плагинов More Types, More Fields, More Taxonomies.
Все они написаны одним автором, дополняют друг друга и могут работать по отдельности. такой подход мне нравится — так как, если к примеру, мне нужно создать всего лишь новый тип записей, но меня устраивают стандартные поля и таксономия — то зачем мне лишние плагины, если можно установить один. Но по порядку.
1. More Types — плагин для создания новых типов записей.
Сразу скажу небольшую проблему — пока что нет русской локализации, но плагины хорошо организованы, в них легко разобраться, да и я расспишу основные действия.
После активации, увидите страничку с кнопкой «Add new Post Type» — жмем её

Первые 2 значения Post type name singular, Post type name plural — это название вашего типа записей. Как видите, первое значение я написал на латинице — оно будет браться для функций движка (n.b. чтобы не было путаницы, пишите с маленькой буквы), второе — на русском, это значение будет использовано для админки.
Hierarchical — это значение указывает сможет ли тип записей иметь дочерние элементы (к примеру, как страницы и подстраницы) или нет.
Menu icon — сюда вставляем ссылочку на иконку для админки размером 16*16
Post type template — если для вывода этого типа данных вы сделали отдельный шаблон (расскажу в следующей части статьи), то здесь можно его выбрать
Features — здесь указываем какой стандартный набор полей будет у этого типа записей.
Additional boxes — это поле будет доступно только при включенном плагине More Fields о котором ниже
Taxonomies — указываем таксономию, добавлять новую можно при помощи плагина More Taxonomies о которм ниже.
Помимо стандартных значений, в плагине доступны ещё и дополнительные, для этого нажимаем на ссылку Advanced settings ниже и видим новые значения. Расскажу о некоторых.
Menu position — позиция блока в админке — вводим цифру
Enable permalinks — включает ЧПУ
Permalink base — ЧПУ база, т.е. как будет выглядеть урл вашей записи. Например, введем book, тогда ссылки этого типа записей будут выглядеть как сайт.ру/book/названиестатьи
Exclude from search — включить или нет тип записей в поиск
Далее идет много значений вроде Edit capability и т.д. — здесь нужно выбрать кому будет доступны права на добавление, удаление, чтение этого типа записей
После это идут значения ‘Add New’ text и т.д. — здесь вы можете перевести стандартные фразы, которые будут выводится в админке.
После того как все заполните и сохраните у вас должно появиться что-то вроде

Но это не все. Представьте, что вам хочется к каждой книге добавлять отдельную миниатюру, а также отдельно записывать вашу рецензию на книгу и вы хотите, чтобы можно было бы удобно добавлять все это с админки. Тут нам поможет следующий плагин.
2. More Fields — плагин для добавления новых полей ввода.
Как и в предыдущем случае, после активации в настройках плагина вам нужно будет нажать на кнопочку «Add new input box». Здесь мы укажем имя для новой группы полей и в каком типе записей они будут доступны. Потом сохраняем и возвращаемся к настройкам плагина, где вы увидите вашу новую группу. Жмем на неё. Здесь вы увидите, что можно добавлять новые поля нажав на кнопку Add new Field. Делаем это.

Field title — название поля
Custom field key — здесь на латинице пишем идентификатор, который будем использовать в дальнейшем для вывода содержимого на сайте. Стоит сделать здесь отступление — в чем прелесть данного плагина, он не пишет данные в какие-то свои таблицы. Любое поле, которые вы здесь создаете — автоматически будет трансформироваться в custom field — т.е. тоже самое вы могли бы сделать, если бы в админке добавляли дополнительное поле, прописывали бы его значение и т.д. Просто плагином мы можем сразу создать нужный набор полей, и кроме того, можем вставлять не только поле для ввода, но и другие типы форм — селекты, выбор даты, поле для ввода файлов и т.д.
Caption — здесь, если нужно пишем какое-то описание к полю, которое будет выводится в админке.
Далее идет выбор типа поля. Можете сделать его чем угодно, даже можно добавить стандартный виз редактор к полю, для этого отметьте WYSIWYG. Если нужно сделать выпадающий список с выбором значений, отметьте галочкой select, а в самом нижнем поле перечислите все значения через запятую, причем для значения по умолчанию поставьте рядом с ним символ звездочки, вот так Drums, Bells, *Whistles
На этом, с этим плагином все.
Но что если на нашем сайте книг вам захочется иметь больше параметров, чем просто рубрики и метки. Допустим вы хотите, чтобы были не только рубрики новинки, детективы, романы и т.д., а ещё и книги в твердом переплете, мягком переплете и т.д. Или же сортировка книг по цене.
Это называется пользовательская таксономия и чтобы не добавлять её внося разные коды в тему, мы используем следующий плагин.
3. More Taxonomies.
Сами настройки плагина очень схожи с первым плагином, поэтому все описывать не буду, расскажу о некоторых.
Hierarchical — указываем будет ли новый параметр иметь вложенные. Как пример, рубрики — имеют вложенные рубрики, а метки — нет.
Taxonomy slug — указываем на латинице название, которое будет использоваться в урле новой таксономии.
Вот и все. В следующей части я расскажу как же теперь все эти новые типы записей вывести на сайте, покажу разные примеры и интересные решения. Ну а если вы все таки хотите самостоятельно, без помощи плагинов настроить новые типы записей, советую почитать следующие материалы:
ENG
Custom post type
http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress
http://wpengineer.com/1969/impressions-of-custom-post-type/
http://thinkvitamin.com/code/create-your-first-wordpress-custom-post-type/
http://wptheming.com/2010/07/custom-post-type-resources/
http://sicdigital.com/2010/07/create-custom-post-type-for-image-upload-wordpress3/
http://codex.wordpress.org/Custom_Post_Types
Custom taxonomy
http://justintadlock.com/archives/2010/06/10/a-refresher-on-custom-taxonomies
http://codex.wordpress.org/Custom_Taxonomies
Add custom metabox
http://wptheming.com/2010/08/custom-metabox-for-post-type/
http://www.tanzilo.com/2009/01/15/wordpress-adding-a-custom-option-box-and-developing-file-upload-plugin/
РУ
Новые типы записей
http://www.wordpresser.ru/razrabotka-na-wordpress/nastraivaemye-tipy-zapisej-v-wordpress-3-0.html
http://dandreev.com/blog/wordpress/sozdanie-biblioteki-ili-custom-post-types/
Таксономия
http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/
Ну а когда сделаете свой сайт, то его стоит проверить на юзабилити-тестирование для того, чтобы улучшить конверсию и отдачу. 

Делаем сайт с гибкой структурой на wordpress. Часть 2.


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

Прежде всего, хочу сказать, что считаю возможности wordpress 3.0 версии пока что сыроваты в плане правильного вывода информации с пользовательских типов данных, без плагинов и хаков не обойтись, тем не менее, многие недочеты планируют устранить в 3.1 версии, которая должна выйти уже довольно скоро.
Но по порядку.
К примеру, мы создали сайт-каталог книг, в котором есть новые типы записей «книги» (book), для этого типа записей мы добавили 2 дополнительных поля — поле с миниатюрой (ima) и поле с рецензией(desc) + добавили таксономию в виде рубрик с описанием обложки книг.
Выводить все данные мы будем в виде архива- ленты постов с этими книгами и при клике на каждую запись с этого архива, попадаем на полное описание каждой книги.

Как сделать вывод полного описания произвольного типа записей с новыми полями

Для вывода полного описания в wordpress используется шаблон single.php — но в нашем случае, нам нужно сделать эту страничку отдельной, не похожей на остальные. Для этого копируем single.php и переименовываем его в single-book.php — причем book — это название-идентификатор вашего нового типа записей.
Как вы помните, мы добавляли 2 новых поля. Первое поле с картинкой (Custom field key — ima)

Второе поле с рецензией (Custom field key — desc)

Вывести их в шаблоне — очень легко, они доступны как обычные custom fields и выводятся точно также. В нашем случае, это будет
<?php $postimageurl = get_post_meta($post->ID, 'ima', true);
if ($postimageurl) { ?>
<img src="<?php echo $postimageurl; ?>" alt="<?php the_title(); ?>" />
<?php } else { ?>
<img src="<?php bloginfo('template_url'); ?>/images/noimage100.gif" alt="Миниатюра отсутствует" />
<?php } ?>
Это в случае, если у вас поле для ввода картинки текстовое и туда вы вводите урл к картинке, причем noimage100.gif — это миниатюра, которая выводится, если вы не указали картинку.
Можно ещё больше упростить. Сделать так
<?php echo get_post_meta($post->ID, 'ima', true) ?>
Тогда просто будет выводится значение вашего поля.
Тоже самое делаем и для рецензии
<?php echo get_post_meta($post->ID, 'desc', true) ?>
Вот и все. Стоит конечно напомнить, что этот код нужно писать внутри цикла.
ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ. Если вы используете ЧПУ, то часто возникнет ситуация, что вроде все сделали правильно, а на выходе получите 404 ошибку. Не расстраивайтесь, просто зайдите в админке настройки-постоянные ссылки (ЧПУ) и нажмите обновить.
Яндекс.ДиректВсе объявления
Ваш новый Фотобанк Более 11 000 000 изображений. Низкие цены. Множество вариантов оплат. depositphotos.com

Как сделать архив с произвольными типами записей.

Вот здесь нас ожидает засада. По идее, архив должен был быть доступен по ссылке сайт.ру/books. Но вместо этого вы получите 404 ошибку. В следущей версии wordpress нам обещают исправить этот недочет, а пока я вам расскажу как обойти эту проблему.
Для начала создайте страницу с одноименным названием с вашим типом записей. У меня это book. После этого создаем файлик в папке вашей темы и называем его как угодно, допустим booktemplate.php В начало этого файла вставляем
<?php
/*
Template Name: Книги
*/
?>
Название конечно можете любое делать. После этого кода вставляем тот код, который нужно скопировать с page.php. В админке, там где вы создали страницу, выбираем этот шаблон в списке шаблонов

Вот теперь, этот шаблон будет использоваться как архив.
Но нужно указать как выводить записи в нем. Поэтому, вместо обычного цикла пишем следующее
<?php $books = new WP_Query('post_type=book&post_status=publish');
if($books->have_posts()) <img src="http://fleek.org/wp-includes/images/smilies/icon_confused.gif" alt=":?" class="wp-smiley"> >
 
<?php  while($books->have_posts()) <img src="http://fleek.org/wp-includes/images/smilies/icon_confused.gif" alt=":?" class="wp-smiley"> >
<?php
$books->the_post();
 
// получаем таксономию
$cover = get_the_term_list($post->ID, 'cover','',', ');
?>
<div id="title-block">
<h1><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h1>
<div class="post-meta">
<?php the_time('j F Y') ?> |
<?php echo $cover ?>
</div>
</div>
<div id="text-content">
<?php the_content(); ?>
<div class="clear-float"></div>
</div>
<?php endwhile; ?>
<?php else : ?>
<div class="post">
<h2><?php _e('Error 404'); ?></h2>
</div>
<?php endif; ?>
Как видите, мы добавили в код ещё и вывод нашей новой таксономии
$cover = get_the_term_list($post->ID, 'cover','',', ');
Читаем подробнее кодекс о таксономии, если нужно.
Но и здесь нас ожидает проблема — этот код не поддерживает пагинацию, и чтобы вылечить, придется помучиться с кодом. Так что лучше подождать следующую версию в которой будет поддержка архивов.
По поводу новой таксономии, по умолчанию, если вы перейдете по ссылке — то будет все та же 404 ошибка. Ведь, если не указать определенный шаблон для вывода новой таксономии, то будет использован шаблон category.php или archive.php — а в нем не указан вывод нового типа записей. Поэтому для того, чтобы создать архив для новой таксономии, вам нужно сделать тоже, что и в предыдущем шаге, только не обязательно вставлять в начало файла
<?php
/*
Template Name: Книги
*/
?>
а вместо этого, нужно назвать файл taxonomy-имя_таксономии.php. В моем случае это было taxonomy-cover.php
Вот и все на сегодня, как только выйдет новая версия wordpress, то я обязательно расскажу о нововведениях, которые ещё больше упростят работу с новыми типами данных.
У вас завал на работе, куча документов и их некому разгребать. Читайте как настроить автоматизацию документооборота
 
 
  1. Отличная и очень полезная статья, хотя это все уже знал и использую :)
    Все равно респект, «от себятины» в сети на самом деле мало последнее время почему-то ))
  2. Очень полезная статья. Большое вам спасибо и огромное уважение за труд.
    Таксономия — слабое место WP, ваша статья позволяет это исправить.
    Best!
  3. И мне как дедушке Морозу хочется от Вас получить красивый дизайн!!!!!
  4. установил плагин More Fields,создал текстовой поле которое появилось в админке,заполняю его -наживаю опубликовать…но описание которое я ввел не выводится,может в шаблон код какой надо вставить?
  5. Очень интересно, спасиб за интересную статью
  6. Хитрый
    Спасибо огромное! Давно искал как грамотно реализовать новый тип материала
  7. maxxannik
    Здравствуйте!
    Статья просто снос мозга! Спасибо!
    Кто то столкнулся со следующей проблемой?
    1. WP 3.1.2 + More Type 1.1b (последняя версия на сегодня)
    2. Поставил.
    2.1. Выдало ошибку как в предшествующем комментарии сказано http://fleek.org/custom-post-type-wordpress-1/comment-page-1/#comment-9817
    2.2. Поправил как на форуме написали. Вроде запустился.
    3. Захожу в список записей, все ОК. Захожу в карточку записи. Опля! Кракозябры! По всей странице и всем полям. Выхожу из записи. Все ОК.
    Есть решения?
  8. maxxannik
    Детали:
    1. Сообщение об ошибке:
    Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, ‘Array’ was given in /public_html/wp-includes/plugin.php on line 395
    2. Снимок:
    http://fleek.org/fleekaj/WBVNEgxMS1YHSgtdTxBMHl1cF1lOBAdUAABcUA4BBVcfMloQUwYKewpRFBcRDF4fUUEJXg==/
  9. maxxannik
    с кодировкой решение нашел.
    цитата от сюда http://fleek.org/fleekaj/WBVNEgxMS1UfTwtLBRJLVEpGSkAUGkYQREcLFE0eQw9VFk0NRgoHFhZQFAYIBgQHCQVU/
    AddDefaultCharset UTF-8
    в файле .htaccess есть?
  10. maxxannik
    по ошибке $(«#new-tag-category»).val(«»); $(«.tagadd»).click();$(«#new-tag-post_tag»).val(«»); $(«.tagadd»).click();
    решение тут
    http://fleek.org/fleekaj/WBVNEgxMS08JSgBJEwdKQhdaFlVORkAVRFgWEhZFWhZZAhYPWREBFRJBFFwST1xDS1oWHw9QQkhAVgNLWlBBA1cOSxtAAggVElkDWAUGWl1QVg9cBEIYWkZSFApQVEZbBQ==/
    Все! Плагины заработали как надо! Я балдю!
  11. Спасибо за статью. Но я предлагаю более простой способ. Можно установить тему от Elegant themes. В ней есть полный набор настроек начиная изменением дизайна от А до Я, заканчивая SEO. Темы сами по себе красивые + за счёт этих настроек можно отключить несколько плагинов. Пример этой темы можно посмотреть у меня на блоге.
  12. gaz12
    Нужна помощь. Пишу в Permalink base «sport».
    Адресс страницы получается такой http://fleek.org/fleekaj/WBVNEgxMS0sPTAEXExcWQklaFkZORVoWQFkFC1w=/
    При переходе открывается главная страница вместо той, что нужна. Если Permalink base не использовать, то все работает. Что это может быть?
    • возможно не переписывается ЧПУ. 1 что сделать, зайти на страницу настройки ЧПУ и просто нажать save ничего не изменяя. Также в настройках плагина, при создании нового типа записей, есть настройки вроде flush, rewrite — попробуйте поустанавливать галочки
  13. gaz12
    Все настройки перелопатил несколько раз. Пока flush, rewrite не нахожу.
    ЧПУ были проставленны еще до установки плагина.
    • не важно когда были установлены ЧПУ, нужно просто обновить страницу ЧПУ ничего не меняя. Можете другие плагины попробовать, сейчас их много отличных
  14. Но было бы здорово если бы примери и с пхп. Потому что вот мне уже хостер время от времени пугает что отклюит, так что плагинов столько много, а хочется чтобы все было компактно
    • примеров с php довольно много уже описано в интернете, ищите custom post type, custom taxonomy, custom meta boxes. Только, осилить это все можно обладая хотя бы базами php, в отличии от плагинов, где особо эти знания не нужны
 
  1. maxxannik
    а что за ссылка на картинку?
    have_posts()) >
    я попробовал сделать как тут написано.
    появилась ошибка:
    Parse error: syntax error, unexpected ‘<' in …bp-themes/bp-default/page2.php on line 18
    Сначала линия 16. Увидел картинку. Удалил.
    Далее ошибка указала на линию 18. Удалил и вторую картинку, но ошибка с линии 18 не исчезла. А программист пхп из меня мягко сказать слабый )
  2. Юрий
    Буду премного благодарен за код пагинации
  3. Юрий
    Вот версия то новая вышла, жду рассказа)
  4. Julia
    При загрузке страницы выдает следующее
    Parse error: syntax error, unexpected ‘<' in /sata2/home/users/mtkun/www/www.mtkun.com/wp-content/themes/business-success/interest.php on line 7 Как это понимать и что делать?
    Спасибо
  5. >> Но вместо этого вы получите 404 ошибку. В следущей версии wordpress нам обещают исправить этот недочет, а пока я вам расскажу как обойти эту проблему.
    не знаете это исправили в новых версиях
    • я сейчас с wordpress не часто работаю, поэтому не скажу. Какие-то функции с архивами там точно добавляли, но не знаю исправляли ли этот баг или нет
  6. Спасибо, полезная статья!

Комментариев нет:

Отправить комментарий