Задавайте вопросы по курсам WordPress

Метабоксы в WordPress

Что такое метабоксы?

Чтобы не быть голословным скажу, что в WordPress есть стандартные метабоксы и вы часто их используете. Чаще всего вы видите метабоксы «Discussion» (Обсуждение) и Custom Fields (Произвольные поля). Те кто уже некоторое время работал с WordPress знают что отключать и подключать стандартные метабоксы можно в пункте Screen Options (Настройки экрана).

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

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

 

pageparentdiv – метабокс с выбором родительской страницы и шаблона страниц wordpresstagsdiv-post_tag – метабокс метки wordpress

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

remove_meta_box() – удаление метабокса.

$id (строка) – идентификатор метабокса, его можно найти в исходном коде странице, чуть ниже я перечислю айдишники всех стандартных метабоксов.
$page (строка) – тип постов, на странице создания/редактирования которых нужно удалить метабокс, например post, page.
$context (строка) – расположение метабокса, например normal, advanced или side.

Для работы функции ее необходимо разместить в functions.php. Для примера уберем слой с именем автора authordiv.

Если вы вставите данный код то в Scrin Optn (настройках экрана) не будет выбора метабокса автора. Также и при редактировании статьи вы не увидите этот метабокс.

Рассмотрим еще какие стандартные метабоксы могут быть использоваы при разработке плагинов.

Идентификаторы метабоксов можно было бы найти и в коде но есть ряд стандартных которые думаю важно перечислить. Перечислю айдишники стандартных метабоксов.

commentstatusdiv – настройки обсуждения.

commentstatus metabox

commentsdiv – отображает комментарии к текущему посту.

commentsdiv metabox стандартные метабоксы WordPress

slugdiv – ярлык записи.

metabox slug - метабокс язык записи WordPress

revisionsdiv – редакции.

revisionsdiv – редакции.

authordiv – автор записи.

author – автор записи

postcustom – добавление/редактирование произвольных полей.

postcustom – добавление/редактирование произвольных полей WordPress

postexcerpt – цитата.

postexcerpt – метабокс wordpress цитата

trackbacksdiv – обратные ссылки.

trackbacksdiv – метабокс обратные ссылки в wordpress

categorydiv – метабокс список рубрик WordPress.

categorydiv – метабокс список рубрик

tagsdiv-post_tag – метки.

tagsdiv-post_tag – метабокс метки wordpress

postimagediv – миниатюра записи.

postimagediv – миниатюра записи wordpress.

pageparentdiv – метабокс с выбором родительской страницы и шаблона страниц.

pageparentdiv – метабокс с выбором родительской страницы и шаблона страниц wordpress

submitdiv – блок с кнопкой «опубликовать».

submitdiv – метабокс с кнопкой «опубликовать».

Добавление метабоксов при помощи register_post_type()

Добавление метабоксов register_post_type()

Думаю вы слышали о типах материалов в WordPress. Стандартные типы это страницы, посты и те которые вы можете создать сами. Так вот, для создания типом материалов используется эта самая функция. В ней же можно сразу и определить какие метабоксы созданные типы будут поддерживать.

Строка Support показывает, какие метабоксы должен использовать новый тип данных.

Также можно для нового типа данных добавлять категорию и теги при помощи массива  taxonomies.

Полный вид кода для нашего нового типа данных:

Также метабоксы можно добавлять при помощи функции register_taxonomy_for_object_type() 

Функция присваивает таксономию к нужному типу записей, добавляется и метабокс:

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

Можно также добавить поддерживаемые метабоксы не сразу при вызове функции register_post_type(), а при дальнейшей обработке кода. Для добавления поддержки метабоксов используйте функцию add_post_type_support() вместо массива supports.

Добавляем свои метабоксы add_meta_box()

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

$id (строка) (обязательное) – HTML-атрибут id для блока div будущего метабокса,
$title (строка) (обязательное) – заголовок,
$callback (функция) (обязательное) – функция которая будет заполнять метабокс, нужно указать название функции в виде строки,
$post_type (строка) (обязательное) – тип записей,
$context (строка) – в какой части страницы вставить метабокс (normal, side, advanced), по умолчанию – advanced,
$priority (строка) – приоритет, чем он выше, тем ближе к верхней части страницы будет располагаться метабокс, (high, core, default или low), по умолчанию – default,
$args (массив) – аргументы для callback-функции.

В отличие от предыдущих способов, добавление своего метабокса будет проходить в несколько этапов, рассмотрим пример:

Если после вставки кода вы попробуете создать запись в нашем новом типе данных Books, то при создании вы увидите новый метабокс с нашим содержимым.

Добавление метабоксов с использованием класса

Автор у которого я подсмотрел часть статьи обещал выложить еще уроки о создании виджетов, думаю буду следить за ним и искать сам, тема действительно интересная.

Описание класса:

options as $option ) { if (current_user_can( $option[‘cap’], $post->ID )) { ?>

 

 

 

 

 

prefix . $option[‘name’] . ‘» id=»‘ . $this->prefix . $option[‘name’] . ‘»‘; if ( get_post_meta( $post->ID, $this->prefix . $option[‘name’], true ) == «on» ) echo ‘ checked=»checked»‘; echo ‘» style=»width: auto;» />’; echo ‘‘; break; } case «select»: { echo ‘

 

 

 

 

 

‘ . $option[ ‘description’ ] . ‘

‘; echo ‘

 

‘; break; } default: { // по умолчанию type=»text» echo ‘

‘ . $option[ ‘description’ ] . ‘

‘; echo ‘‘; break; } } ?>

Создание объекта класса:
Столько кода… Напрашивается вопрос – зачем это все? Вроде как предыдущий способ был попроще.

Достаточно один раз подробно описать класс и после этого создавать сколько угодно объектов (это и будут метабоксы), лишь меняйте передаваемые ему параметры, в том числе и массив $options, не придётся писать кучу HTML-кода, всё будет вставляться по шаблону. Переменные, не используемые конструктором, можно будет поменять уже после создания объекта, например:

Обращение к метаданным (произвольным полям) поста/страницы

$post_id (целое) (обязательное) – ID поста или страницы.
$key (строка) (обязательное) – значение произвольного поля.
$single (логическое) – если true – возвращает строку, false – массив, по умолчанию – false.

Последний пример для вывод содержимого метабокса в шаблоне:

Еще хотел бы подчеркнуть что данные которые записывались в метабокс храняться в «Произвольных полях«, а то что я указал вверху это вывод тех самых произвольных полей.


Купить хостинг WordPress
/* Репетитор по wordpress
Услуги репетитора онлайн. Список курсов которые я веду
  • Базовый курс по веб-дизайну;
  • Верстка сайтов;
  • Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
  • Разработка сайтов на PHP.
Подробнее читайте на странице репетитор по WordPress
*/

Статья была написана на основе CODEX WordPress и сайта truemisha.ru

Николаенко Максим

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


Читайте также:

1 комментарий

  1. Хочу добавить что созданный нами тип данных могут видеть все пользователи, включая и тех у которых самые низкие привилегии.

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Шаблоны для WordPress
Самый лучший хостинг в Украине
Стабильный хостинг для Drupal