Метабоксы в 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

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


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

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

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

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

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