136 lines
3.5 KiB
PHP
136 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* The helper class.
|
|
*/
|
|
|
|
/**
|
|
* Wrapper class for helper functions.
|
|
*/
|
|
class MASHSB_RWMB_Helper
|
|
{
|
|
/**
|
|
* Stores all registered fields
|
|
* @var array
|
|
*/
|
|
private static $fields = array();
|
|
|
|
/**
|
|
* Hash all fields into an indexed array for search
|
|
* @param string $post_type Post type
|
|
*/
|
|
public static function hash_fields( $post_type )
|
|
{
|
|
self::$fields[$post_type] = array();
|
|
|
|
$meta_boxes = MASHSB_RWMB_Core::get_meta_boxes();
|
|
foreach ( $meta_boxes as $meta_box )
|
|
{
|
|
$meta_box = MASHSB_RW_Meta_Box::normalize( $meta_box );
|
|
if ( ! in_array( $post_type, $meta_box['post_types'] ) )
|
|
{
|
|
continue;
|
|
}
|
|
foreach ( $meta_box['fields'] as $field )
|
|
{
|
|
if ( ! empty( $field['id'] ) )
|
|
{
|
|
self::$fields[$post_type][$field['id']] = $field;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find field by field ID.
|
|
* This function finds field in meta boxes registered by 'rwmb_meta_boxes' filter.
|
|
*
|
|
* @param string $field_id Field ID
|
|
* @param int $post_id
|
|
* @return array|false Field params (array) if success. False otherwise.
|
|
*/
|
|
public static function find_field( $field_id, $post_id = null )
|
|
{
|
|
$post_type = get_post_type( $post_id );
|
|
if ( empty( self::$fields[$post_type] ) )
|
|
{
|
|
self::hash_fields( $post_type );
|
|
}
|
|
$fields = self::$fields[$post_type];
|
|
if ( ! isset( $fields[$field_id] ) )
|
|
{
|
|
return false;
|
|
}
|
|
$field = $fields[$field_id];
|
|
return call_user_func( array( MASHSB_RW_Meta_Box::get_class_name( $field ), 'normalize' ), $field );
|
|
}
|
|
|
|
/**
|
|
* Get post meta
|
|
*
|
|
* @param string $key Meta key. Required.
|
|
* @param int|null $post_id Post ID. null for current post. Optional
|
|
* @param array $args Array of arguments. Optional.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function meta( $key, $args = array(), $post_id = null )
|
|
{
|
|
$post_id = empty( $post_id ) ? get_the_ID() : $post_id;
|
|
$args = wp_parse_args( $args, array(
|
|
'type' => 'text',
|
|
'multiple' => false,
|
|
'clone' => false,
|
|
) );
|
|
// Always set 'multiple' true for following field types
|
|
if ( in_array( $args['type'], array( 'checkbox_list', 'autocomplete', 'file', 'file_advanced', 'image', 'image_advanced', 'plupload_image', 'thickbox_image' ) ) )
|
|
{
|
|
$args['multiple'] = true;
|
|
}
|
|
|
|
$field = array(
|
|
'id' => $key,
|
|
'type' => $args['type'],
|
|
'clone' => $args['clone'],
|
|
'multiple' => $args['multiple'],
|
|
);
|
|
$class = MASHSB_RW_Meta_Box::get_class_name( $field );
|
|
|
|
switch ( $args['type'] )
|
|
{
|
|
case 'taxonomy_advanced':
|
|
if ( empty( $args['taxonomy'] ) )
|
|
{
|
|
break;
|
|
}
|
|
$meta = get_post_meta( $post_id, $key, ! $args['multiple'] );
|
|
$term_ids = wp_parse_id_list( $meta );
|
|
// Allow to pass more arguments to "get_terms"
|
|
$func_args = wp_parse_args( array(
|
|
'include' => $term_ids,
|
|
'hide_empty' => false,
|
|
), $args );
|
|
unset( $func_args['type'], $func_args['taxonomy'], $func_args['multiple'] );
|
|
$meta = get_terms( $args['taxonomy'], $func_args );
|
|
break;
|
|
case 'taxonomy':
|
|
$meta = empty( $args['taxonomy'] ) ? array() : get_the_terms( $post_id, $args['taxonomy'] );
|
|
break;
|
|
case 'map':
|
|
$field = array(
|
|
'id' => $key,
|
|
'multiple' => false,
|
|
'clone' => false,
|
|
);
|
|
$meta = MASHSB_RWMB_Map_Field::the_value( $field, $args, $post_id );
|
|
break;
|
|
case 'oembed':
|
|
$meta = MASHSB_RWMB_OEmbed_Field::the_value( $field, $args, $post_id );
|
|
break;
|
|
default:
|
|
$meta = call_user_func( array( $class, 'get_value' ), $field, $args, $post_id );
|
|
break;
|
|
}
|
|
return apply_filters( 'rwmb_meta', $meta, $key, $args, $post_id );
|
|
}
|
|
}
|