Давно хотел написать этот цикл статей, но останавливала одна вещь, о которой будет сказано ниже.
Ну а в этой статье мы поговорим о том, как можно без знания php создавать сайты с любой структурой на wordpress.
Что же меня останавливало? На самом деле я хотел написать статью о том, как без плагинов создавать абсолютно любую структуру сайта, но ведь это смогут реализовать только те, кто разбирается в wordpress и его коде, а такие уже и сами знают как это сделать. А так как большая часть пользователей — новички, то им нужно что-то более простое. Поэтому пришлось изучить все плагины, которые работают с новой функцией в wordpress 3 версий — custom post type.
Итак, задача была такая — без особых трудозатрат и знаний сделать на wordpress несколько типов записей, для каждого из них создать отдельный шаблон для вывода, свой набор рубрик и параметров, свой набор значений, которые можно указывать в админпанели.
Реализуется это так:
- типы записей (к примеру это будет отдельный раздел на сайте, где будут новинки кино) — через custom post type (типы записей)
- отдельные рубрики и метки (к примеру, это будет рубрики «комедия», «ужастики» и т.д., а также метки-актеры) через custom taxonomy (таксономию)
- отдельные значения в админке (к примеру, вы захотите сразу указывать отдельно в админке рейтинг фильма на кинопоиске) — custom meta box. (мета блоки)
Яндекс.ДиректВсе объявления
Пускай названия вас не пугают, все очень просто на самом деле.Сначала ничего путевого найти не удавалось. То плагины были слишком простые, то слишком сложные, то не хватало функционала. Единственное, что сразу нашел интересного — 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 } ?>
Можно ещё больше упростить. Сделать так
<?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: Книги
*/
?>
Вот теперь, этот шаблон будет использоваться как архив.
Но нужно указать как выводить записи в нем. Поэтому, вместо обычного цикла пишем следующее
<?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: Книги
*/
?>
Вот и все на сегодня, как только выйдет новая версия wordpress, то я обязательно расскажу о нововведениях, которые ещё больше упростят работу с новыми типами данных.
У вас завал на работе, куча документов и их некому разгребать. Читайте как настроить автоматизацию документооборота
have_posts()) >
я попробовал сделать как тут написано.
появилась ошибка:
Parse error: syntax error, unexpected ‘<' in …bp-themes/bp-default/page2.php on line 18
Сначала линия 16. Увидел картинку. Удалил.
Далее ошибка указала на линию 18. Удалил и вторую картинку, но ошибка с линии 18 не исчезла. А программист пхп из меня мягко сказать слабый )
-
-
-
Parse error: syntax error, unexpected ‘<' in /sata2/home/users/mtkun/www/www.mtkun.com/wp-content/themes/business-success/interest.php on line 7 Как это понимать и что делать?
Спасибо
-
не знаете это исправили в новых версиях
-
Все равно респект, «от себятины» в сети на самом деле мало последнее время почему-то ))
Таксономия — слабое место WP, ваша статья позволяет это исправить.
Best!
с моими знаниями ХТМЛ редактировать код — эт беда… может подскажете как это перебороть?
http://fleek.org/fleekaj/WBVNEgxMS08JSgBJEwdKQhdaFlVORkAVRFgWEhZFWhZZAhYSWhYDUQgVCVYTBxRFQEUBQUxCRwpaUEkCWEVUEkkRXF1EBhRUD10XBFdBSV5KQUkDWAMGVgwC/
Статья просто снос мозга! Спасибо!
Кто то столкнулся со следующей проблемой?
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. Захожу в список записей, все ОК. Захожу в карточку записи. Опля! Кракозябры! По всей странице и всем полям. Выхожу из записи. Все ОК.
Есть решения?
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==/
цитата от сюда http://fleek.org/fleekaj/WBVNEgxMS1UfTwtLBRJLVEpGSkAUGkYQREcLFE0eQw9VFk0NRgoHFhZQFAYIBgQHCQVU/
AddDefaultCharset UTF-8
в файле .htaccess есть?
решение тут
http://fleek.org/fleekaj/WBVNEgxMS08JSgBJEwdKQhdaFlVORkAVRFgWEhZFWhZZAhYPWREBFRJBFFwST1xDS1oWHw9QQkhAVgNLWlBBA1cOSxtAAggVElkDWAUGWl1QVg9cBEIYWkZSFApQVEZbBQ==/
Все! Плагины заработали как надо! Я балдю!
Адресс страницы получается такой http://fleek.org/fleekaj/WBVNEgxMS0sPTAEXExcWQklaFkZORVoWQFkFC1w=/
При переходе открывается главная страница вместо той, что нужна. Если Permalink base не использовать, то все работает. Что это может быть?
ЧПУ были проставленны еще до установки плагина.