Container — это группа настраиваемых полей и параметров отображения. Они отображаются на различных частях бэкэнда в соответствии с заданным типом и параметрами отображения.
По умолчанию все контейнеры отображаются на всех объектах в зависимости от их типа (posts для post_meta, terms для term_metaи т. д.) и редактируются всеми пользователями, которые могут получить доступ к соответствующему экрану редактирования.
Для создания нового контейнера необходимо указать тип и заголовок:
use Carbon_Fields\Container; use Carbon_Fields\Field; Container::make( 'post_meta', 'Custom Data' ) ->where( 'post_type', '=', 'page' )
Для создания нового контейнера, вы просто используете метод Container:: make ($type, $title), где:
Parameter | Description |
---|---|
$type | Идентификатор типа контейнера (допустимые значения post_meta, term_meta, user_meta, comment_meta, nav_menu_item , theme_options). |
$title | Название контейнера. |
Кроме того, можно передать идентификатор контейнера с помощью записи Container:: make ($type, $id, $title ), где:
Parameter | Description |
---|---|
$type | Идентификатор типа контейнера (допустимые значения post_meta, term_meta, user_meta, comment_meta, nav_menu_item , theme_options). |
$id | Уникальное id контейнера. Автоматически с префиксом carbon_fields_container_ |
$title | Название контейнера. |
Условное отображение
Контейнеры очень гибки по отношению к вариантам отображения. По умолчанию контейнеры отображаются на всех связанных объектах (все типы post для post meta container, все terms для term meta container и т. д.), однако можно ограничить видимость контейнера конкретными типами записей, терминами таксономии, уровнями иерархии и т. д. с неограниченной сложностью.
Добавление условия отображения выполняется с помощью одного из следующих методов:
->where( $condition, $comparison_operator, $value )— добавляет условие с AND (и)
->or_where( $condition, $comparison_operator, $value )— добавляет состояние OR (или )
Примечание: условия цепочки ведут себя точно так же, как обычный оператор php if с несколькими условиями.
описание параметров
Parameter | Description |
$condition | Имя типа условия в виде строки (подробней в следующей статье) |
$comparison_operator | Может быть одним из следующих: ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘IN’, ‘NOT IN’, ‘CUSTOM’ |
$value | Значение для проверки. IN и NOT IN операторы ожидают массив; CUSTOM оператор ожидает вызова |
Пользовательский оператор сравнения
Этот оператор позволяет указать вызываемый объект, который должен возвращать логическое значение независимо от того, выполняется это условие или нет. Таким образом, у вас больше контроля над тем, как сравнивается значение, если встроенная функциональность не соответствует вашим потребностям.
Например, если вы хотите, чтобы контейнер отображался только на страницах четных уровней иерархии, ваш код будет выглядеть следующим образом:
Container::make( 'post_meta', 'Custom Data' ) ->where( 'post_type', '=', 'page' ) ->where( 'post_level', 'CUSTOM', function( $post_level ) { return ( $post_level % 2 === 0 ); } );
ПРИМЕРЫ
Покажем Post Meta Container на всех страницах
Container::make( 'post_meta', 'Custom Data' ) ->where( 'post_type', '=', 'page' ) ->add_fields( array( ... ) );
Покажем Post Meta Container на статической домашней странице
Container::make( 'post_meta', 'Custom Data' ) ->where( 'post_id', '=', get_option( 'page_on_front' ) ) ->add_fields( array( ... ) );
Покажем User Meta Container, только если текущий пользователь является администратором или редактором
Container::make( 'post_meta', 'Custom Data' ) ->where( 'current_user_role', 'IN', array( 'administrator', 'editor' ) ) ->add_fields( array( ... ) );
Вложенные логические
Для достижения вложенной логики отображения where() и or_where() методы также поддерживают вызов с callable:
Container::make( 'post_meta', 'Custom Data' ) -> where( function( $lvl1_condition ) { $lvl1_condition ->where( $condition, $comparison_operator, $value ); $lvl1_condition ->where( function( $lvl2_condition ) { ...// может быть вложений бесконечное множество }); ... });
Например, чтобы контейнер был виден на всех типах записей, если текущий пользователь является администратором или только на страницах, если текущий пользователь является редактором, код будет выглядеть следующим образом:
Container::make( 'post_meta', 'Custom Data' ) ->where( 'current_user_role', '=', 'administrator' ) ->or_where( function( $condition ) { $condition->where( 'current_user_role', '=', 'editor' ); $condition->where( 'post_type', '=', 'page' ); } );