You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.8 KiB

<?php
defined( 'ABSPATH' ) || die;
/**
* The abstract choice field.
*/
abstract class RWMB_Choice_Field extends RWMB_Field {
/**
* Get field HTML.
*
* @param mixed $meta Meta value.
* @param array $field Field parameters.
* @return string
*/
public static function html( $meta, $field ) {
return '';
}
/**
* Normalize parameters for field.
*
* @param array $field Field parameters.
* @return array
*/
public static function normalize( $field ) {
$field = parent::normalize( $field );
$field = wp_parse_args( $field, [
'flatten' => true,
'options' => [],
] );
// Use callback: function_name format from Meta Box Builder.
if ( isset( $field['_callback'] ) && is_callable( $field['_callback'] ) ) {
$field['options'] = call_user_func( $field['_callback'] );
}
return $field;
}
public static function transform_options( $options ) : array {
$transformed = [];
$options = (array) $options;
foreach ( $options as $value => $label ) {
$option = is_array( $label ) ? $label : [
'label' => (string) $label,
'value' => (string) $value,
];
if ( isset( $option['label'] ) && isset( $option['value'] ) ) {
$transformed[ $option['value'] ] = (object) $option;
}
}
return $transformed;
}
/**
* Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
*
* @param array $field Field parameters.
* @param string $value The value.
* @param array $args Additional arguments. Rarely used. See specific fields for details.
* @param int|null $post_id Post ID. null for current post. Optional.
*
* @return string
*/
public static function format_single_value( $field, $value, $args, $post_id ) {
$options = self::transform_options( $field['options'] );
return isset( $options[ $value ] ) ? $options[ $value ]->label : '';
}
}