Функциональный каталог на WordPress + Magic Fields. Часть 1

До недавнего времени, я не относился к WordPress серьезно. Ничего, кроме хорошего и популярного блогового движка я в нем не замечал. Что касается плагинов, то мне даже в голову не приходило, что среди них есть не просто «вкусные плюшки», но и весьма серьезные разработки, которые превращают WordPress в действительно мощный движок, способный на значительно большее, нежели типовой блог.

В число таких плагинов входит Magic Fields, возможностям которого посвящена данная заметка.

Нельзя сказать, что плагин Magic Fields очень сложен в использовании. Все достаточно просто и интуитивно понятно, но, по какой-то причине, мало кто осознает всю широту возможностей Magic Fields. Обычно, его используют как несколько более удобную альтернативу стандартным произвольным полям. Но это не серьезно…

И так, что можно сделать с помощью этого плагина? Я узнал о нем, когда мне понадобилось превратить одну из категорий блога в полноценный каталог. Где-то пару месяцев назад я заинтересовался разработкой приложений под Google Android. Так как большого количества свободного времени нет, решил для начала замутить скромненький блог об этой ос и обо всем, что с ней связано и интересно, прежде всего, мне самому. В общем-то сразу пришла мысль сделать каталог гаджетов (смартфоны, планшетники), которые работают на Android.

Что должно входить в число функциональных возможностей каталога? Безусловно, нужны сортировки и фильтры по каким-либо параметрам позиций каталога. Также форма поиска, для быстрого доступа к конкретным позициям. Сразу становится очевидно, что базовых возможностей WorPress будет недостаточно.




Рекомендую устанавливать Magic Fields из репозитария WordPress. Таким образом вы обеспечите себе работу с последней версией приложения.

Непосредственно у самого плагина нет никаких настроек. Сразу после установки Magic Fields можно переходить к созданию списка дополнительных полей. Делается это на странице плагина, попасть на которую можно из левого меню панели управления WordPress.

Как видно из скриншота, набор полей можно импортировать, например, если он уже был создан предварительно. Это очень удобно, допустим, если вы делаете сайты в массовом порядке и все они должны содержать однотипный каталог, как то рубрикатор интернет-магазина.
Для создания нового набора полей предназначена кнопка «+ Create Write Panel».

На очередном скриншоте вы можете видеть форму создания набора дополнительных полей. Чтобы вам было понятнее, что означает часть настроек, забегая немного вперед, я поясню основной принцип работы плагина Magic Fields.

И так, в параметре Placement вы задаете для публикаций какого-типа будет работать данная группа полей. Как видно из скриншота, это могут быть либо обычные посты блога, либо страницы. Также вам необходимо выбрать категории. После создания группы, в левом меню админки WP появится еще один блок, имя которого будет соотвествовать имени группы полей. Примерно вот так:

Тыркнув на «New», вы попадете на страницу с привычной формой публикации постов (или страниц) блога, но с дополнительными кнопками и блоками. Иначе говоря, плагин Magic Fields создает альтернативную форму для публикации новостей и снабжает ее дополнительными возможностями.

Собственно, различные настройки на странице создания группы полей, как раз таки позволяют определить, какие из стандартных возможностей формы WordPress мы желаем оставить, а какие следует убрать. Например, в блоке Advanced Fields логично снять галочку с чекбокса Сustom Fields, так как именно для их замены мы поставили плагин. В Standard Fields я отключал вывод списка категорий (чекбокс Categories), потому, что мне дополнительные поля требовались только для категории с устройствами и выбирать попросту было нечего.

Созданная группа появляется в списке и пригодна для добавления в нее полей.

Список полей пуст, поэтому сразу приступаем к созданию нового поля. Для этого жмем «+ Create a Field»

Делать скриншот формы я не буду. Там все понятно и без лишних комментариев. Отмечу только, что поле «Name» должно содержать уникальный (в рамках набора полей) идентификатор для создаваемого поля. Именно по этому идентификатору вы сможете выводить поля в шаблоне, сортировать и искать публикации.

Я создал два поля типа Dropdown List – это обычный Select.

Теперь давайте посмотрим, как будет выглядеть форма для добавления постов, а именно, наши дополнительные поля.

Собственно, как вы можете наблюдать, все достаточно просто и очень удобно. Работа с таким представлением полей намного приятнее, нежели с их родным аналогом. Учитывая обилие типов полей, которые предлагает плагин Magic Fields, скорее всего, можно будет решить практически любую задачу.

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

<?php if (in_category(3)) { ?>
	<table>
	<?php $device_producer = get('device_producer');  if($device_producer != '') { ?>
	<tr>
		<th><span>Производитель</span></th>
		<td><a href="/c/devices/?device_producer=<?php echo $device_producer; ?>"><?php echo $device_producer; ?></a></td>
	</tr>
	<?php } ?>
	<?php $device_os = get('device_os');  if($device_os != '') { ?>
	<tr>
		<th><span>Операционная система</span></th>
		<td><a href="/c/devices/?device_os=<?php echo $device_os; ?>"><?php echo $device_os; ?></a></td>
	</tr>
	<?php } ?>
	</table>
<? } ?>

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

Чтобы видеть, как все это работает, можете посмотреть любую публикацию с этой страницы http://iamdroid.ru/c/devices. Это тот самый каталог мобильных устройств, о котором я говорил в начале.

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

Комментарии (40)

  1. Екатерина

    Олег, подскажите пожалуйста, никак не могу найти как в Dropdown List ввести значения, из которых можно будет выбирать. Заранее спасибо!

  2. Дима

    Подскажи пожалуйста, как сделать для нескольких рубрик (категорий) данный пример!

  3. Дима

    В вашем примере вы предлогаете сделать для той категории, для которой создавали произвольные поля, а мне надо сделать для 3-х категорий (может и больше). Подскажите пжл, как это компактней сделать, а то я тупо сделал несколько копий кода и в них поменял ID категории и получился совсем не маленький кодик =)

    • Не имея возможности видеть код, я не имею возможности советовать что-либо.
      Оберните весь код в функцию, принимающую в качестве параметра ID целевой категории.
      Но я не думаю, что этот тот случай, когда стоит заниматься рефакторингом. Работает и хорошо.

      • Дима

        Спс за быстрые ответы! Не совсем понял о чем Вы, т. к. не владею данной информацией. =) Решил не заморачиваться по этому поводу!

  4. Дима

    Понимаю, что не по теме, но если знаете подскажите пжл, как выводить результат рейтинга поста! Плагин WP-PostRatings. Допустим, если заходим в рубрику чтоб рядом с анонсом выводились звездочки уже проголосовавших людей! Везде пишут, как выводить виджетом, а в еденичном случае, тоесть в посте нет! =( Очень очень надо!

  5. Олег

    А как сделать вывод всех этих типов на одной странице? Так как здесь сделано у вас — http://iamdroid.ru/c/devices
    Спасибо!

  6. Артем

    А где же обещанное продолжение про поиск и фильтрацию?

  7. Александр

    Доброго времени суток.
    Сейчас работай с плагином, хочу создать каталог книг. Вопрос вот в чем, для иерархии каталога использовать лучше Custom Taxonomy или построить при помощи стандартных категорий?
    Буду балагодарен за любую подсказку.

    • Лучше использовать таксономии. Идеологически правильно, мне кажется. Я бы рекомендовал ознакомиться с плагином Magic Fields 2. Там как раз реализована работа через них. Думаю, оцените удобство.

      • Александр

        Создал свою таксономию в Magic Fields 2, в записях все появилось, а вот как это включить в шаблон на сайте разработчиков ниче не написано. Если вам не трудно, подскажите небольшой пример как вывести список категорий, или чтото в этом роде. Буду очень благодарен :)

        • Для вывода категорий можно использовать нативную систему меню. Если вариант с меню не походит, используйте класс WP_Query. С ним руки развязаны.
          А поля выводятся также, как и прежде, если не ошибаюсь.

          • Александр

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

            второй:

            если я правильно понимаю то мой тип постов не попадает в эти циклы, и нужно както сменить уловие?

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

  8. Александр

    Благодарю. Какраз за него и взялся. Уже потихоньку разбираюсь. Скудновато в их вики все описано, но метод «тыка» еще никто не отменял :)

    • Да, документация скудная, хотя до 2-й версии плагин обновился достаточно давно.

      Как-нибудь наберусь сил и составлю свой небольшой мануал на эту тему.

  9. Олег, а есть ли хак, или можно ли исправить ошибки возникающие при загрузке файла с именем на русском? Существует ли способ переименования имени файла в траслит? имяфайла.mp3 -> filename.mp3

    • Если есть, то не знаю о таких. Но у MF с кириллицей действительно проблемы. Лучше избегайте ее в именах файлов и полей.

  10. Олег, приветствую!
    Как я понял, вывод данных делается в том случае, если в качестве закладок в меню стоят рубрики. А если в меню идет вывод страниц?
    Я поставил плагин, AllowPHP вот с таким кодом:

    [php]
    query_posts( array( ‘post_type’ => array(post,automobile) ) );
    if (have_posts()) {
    echo «»;
    while (haveposts()) {
    the_post();
    $engine_model=get(‘engine_model’);
    echo «» . $engine_model . «»;
    }
    echo «»;
    }
    [/php]

    но вывода не вижу. В чём моя ошибка?
    Можно ли так делать?
    И как правильно?

    Спасибо!

    • теги таблицы справедливо (или нет?) повырезались, но суть прежняя — просто вывод на экран

      • Разобрался с меню (чушь, конечно, нёс).
        На данный момент осталась единственная непонятка: если нам нужно вывести каталог, как узнать, из какого элемента меню запущен вывод?
        Есть в меню два элемента «Грузовые автомобили» и «Легковые автомобили», созданные как список материалов рубрик. Как понять, какой именно селект делать?

        • Признаться, не помню, как ведется себя MagicFields первой версии, так как давно его не использовал. Но, если мне не изменяет память, должна адекватным образом работать функция is_category()

  11. А код для вывода результата работы надо писать самому или он где то генерируется?

  12. Да и как узнать ID категории?

    • В админке, на странице редактирования рубрики, обратите внимание на значения параметров в адресной строке. tag_ID будет содержать ID рубрики.

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

  14. Станислав

    Олег, добрый день!

    Подскажите пожалуйста, как для полей Magic Fields задать числовой тип данных.

    Объясняю более подробно:

    у меня есть поле «rank» и записи у меня должны сортироваться по этому полю (цифры 1, 2, 3, и т.д.)

    Но поскольку значение поля текстовое, то сортировка проходит по первой цифре из числа, то есть цифры порядка «1 20 150» сортируются как «1 150 20», а не «1 20 150»

    Спасибо

    • Используйте SQL функцию CAST()
      Например ORDER BY CAST(meta_value AS INT) DESC

      • Станислав

        Спасибо больше, хотя сделал уже по другому.
        Не знал, что этот вариант можно сделать стандартным вордпресс — «meta_value_num»

  15. Дима

    Этот код, вносим в Single Post (single.php) ?

  16. Сам постоянно использую Magic Fields для сайтов-каталогов — незаменимая вещь!

  17. Юрий

    День добрый! А если каталог делать на «page», как тогда настройка полей и вывода кода ? Если возможно подскажите?

    • Настройка полей и работа с ними никак не зависит от того, что вы возьмете за основу: page или post. И то и другое WordPress хранит в базе одинаково, а значит работа с моделью будет точно такой же.

Добавить комментарий для Александр Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *