[
'before' => '
',
'after' => '
',
'label_before' => '',
'meta_before' => '',
'meta_separator' => '',
'meta_after' => '
',
],
'classes' => [
'before' => [ 'tribe-meta' ],
'meta_before' => [ 'tribe-meta-value' ],
],
'register_type' => 'meta',
'register_overwrite' => false,
'register_callback' => null,
'filter_callback' => null,
'callback' => null,
'meta_value' => null,
'label' => ucwords( preg_replace( '/[_-]/', ' ', $meta_id ) ),
// if label is not set then use humanized form of meta_group_id
'show_on_meta' => true,
// bool for automatically displaying meta within "the meta area" of a specific display
'priority' => 100,
];
// before we merge args and defaults lets play nice with the template
if ( ! empty( $args['wrap'] ) ) {
$args['wrap'] = wp_parse_args( $args['wrap'], $defaults['wrap'] );
}
$args = wp_parse_args( $args, $defaults );
// setup default meta ids placeholder for meta_group registration
if ( $args['register_type'] == 'meta_group' && empty( $args[ self::META_IDS ] ) ) {
$args[ self::META_IDS ] = [];
}
do_action( 'tribe_meta_factory_register', $meta_id, $args );
// check if we should overwrite the existing registration args if set
if ( isset( $_tribe_meta_factory->{$args['register_type']}[ $meta_id ] ) && ! $args['register_overwrite'] ) {
return false;
// otherwise merge existing args with new args and reregister
} else {
if ( isset( $_tribe_meta_factory->{$args['register_type']}[ $meta_id ] ) ) {
$args = wp_parse_args( $args, $_tribe_meta_factory->{$args['register_type']}[ $meta_id ] );
}
}
$_tribe_meta_factory->{$args['register_type']}[ $meta_id ] = $args;
// associate a meta item to a meta group(s) isset
if ( $args['register_type'] == 'meta' && ! empty( $args['group'] ) ) {
foreach ( (array) $args['group'] as $group ) {
// if group doesn't exist - then register it before proceeding
if ( ! self::check_exists( $group, 'meta_group' ) ) {
tribe_register_meta_group( $group );
// if the meta_id has already been added to the group move onto the next one
} elseif ( in_array( $meta_id, $_tribe_meta_factory->meta_group[ $group ][ self::META_IDS ] ) ) {
continue;
}
$_tribe_meta_factory->meta_group[ $group ][ self::META_IDS ][] = $meta_id;
}
}
// let the request know if we are successful for registering
return true;
}
/**
* check to see if meta item has been defined
*
* @deprecated 4.3
*
* @param string $meta_id
* @param string $type
*
* @return boolean
*/
public static function check_exists( $meta_id, $type = 'meta' ) {
global $_tribe_meta_factory;
$status = isset( $_tribe_meta_factory->{$type}[ $meta_id ] ) ? true : false;
return apply_filters( 'tribe_meta_factory_check_exists', $status );
}
/**
* get meta arguments
*
* @deprecated 4.3
*
* @param string $meta_id
* @param string $type
*
* @return array of arguments
*/
public static function get_args( $meta_id, $type = 'meta' ) {
global $_tribe_meta_factory;
$args = self::check_exists( $meta_id, $type ) ? $_tribe_meta_factory->{$type}[ $meta_id ] : [];
return apply_filters( 'tribe_meta_factory_get_args', $args );
}
/**
* get the set order of meta items
* useful when generically displaying meta for skeleton view or bulk assignments
*
* @param string $meta_id
*
* @return array of ordered meta ids
*/
public static function get_order( $meta_id = null ) {
global $_tribe_meta_factory;
$ordered_group = [];
if ( self::check_exists( $meta_id, 'meta_group' ) ) {
foreach ( $_tribe_meta_factory->meta_group[ $meta_id ][ self::META_IDS ] as $key ) {
if ( $item = self::get_args( $key ) ) {
$ordered_group[ $item['priority'] ][] = $key;
}
}
} else {
foreach ( $_tribe_meta_factory->meta_group as $key => $item ) {
$ordered_group[ $item['priority'] ][] = $key;
}
}
ksort( $ordered_group );
return $ordered_group;
}
/**
* set the visibility of a meta item when using a bulk display tag
*
* @param string $meta_id
* @param string $type
* @param boolean $status
*/
public static function set_visibility( $meta_id, $type = 'meta', $status = true ) {
global $_tribe_meta_factory;
if ( self::check_exists( $meta_id, $type ) ) {
$_tribe_meta_factory->{$type}[ $meta_id ]['show_on_meta'] = $status;
}
}
/**
* embed css classes for templating the meta item on display
*
* @param string $template
* @param array $classes
*
* @return string $template
*/
public static function embed_classes( $template, $classes = [] ) {
if ( ! empty( $classes ) && is_array( $classes ) ) {
// loop through the available class to template associations
foreach ( $classes as $key => $class_list ) {
if ( ! empty( $class_list ) &&
! empty( $template[ $key ] ) &&
( strpos( $template[ $key ], '%s' ) !== false || strpos( $template[ $key ], '%d' ) !== false )
) {
// if we're passed an array lets implode it
$class_list = is_array( $class_list ) ? implode( ' ', $class_list ) : $class_list;
// process the template string with all classes
$template[ $key ] = vsprintf( $template[ $key ], $class_list );
}
}
}
return $template;
}
/**
* return a completed meta template for display
* @uses self::embed_classes for css classes
*
* @param string $label
* @param string $meta
* @param string $meta_id
* @param string $type
*
* @return string $html finished meta item for display
*/
public static function template( $label, $meta, $meta_id, $type = 'meta' ) {
global $_tribe_meta_factory;
$template = self::embed_classes(
$_tribe_meta_factory->{$type}[ $meta_id ]['wrap'],
$_tribe_meta_factory->{$type}[ $meta_id ]['classes']
);
$html = sprintf(
'%s%s%s%s',
$template['before'],
! empty( $label ) ? $template['label_before'] . $label . $template['label_after'] : '',
! empty( $meta ) ? $template['meta_before'] . $meta . $template['meta_after'] : '',
$template['after']
);
return apply_filters( 'tribe_meta_factory_template', $html, $label, $meta, $template );
}
}
}