acf_field_select::render_field
Create the HTML interface for your field
Method of the class: acf_field_select{}
No Hooks.
Returns
null. Nothing (null).
Usage
$acf_field_select = new acf_field_select(); $acf_field_select->render_field( $field );
- $field(required)
- .
Changelog
| Since 3.6 | Introduced. |
acf_field_select::render_field() acf field select::render field code ACF 6.0.4
function render_field( $field ) {
// convert
$value = acf_get_array( $field['value'] );
$choices = acf_get_array( $field['choices'] );
// placeholder
if ( empty( $field['placeholder'] ) ) {
$field['placeholder'] = _x( 'Select', 'verb', 'acf' );
}
// add empty value (allows '' to be selected)
if ( empty( $value ) ) {
$value = array( '' );
}
// prepend empty choice
// - only for single selects
// - have tried array_merge but this causes keys to re-index if is numeric (post ID's)
if ( $field['allow_null'] && ! $field['multiple'] ) {
$choices = array( '' => "- {$field['placeholder']} -" ) + $choices;
}
// clean up choices if using ajax
if ( $field['ui'] && $field['ajax'] ) {
$minimal = array();
foreach ( $value as $key ) {
if ( isset( $choices[ $key ] ) ) {
$minimal[ $key ] = $choices[ $key ];
}
}
$choices = $minimal;
}
// vars
$select = array(
'id' => $field['id'],
'class' => $field['class'],
'name' => $field['name'],
'data-ui' => $field['ui'],
'data-ajax' => $field['ajax'],
'data-multiple' => $field['multiple'],
'data-placeholder' => $field['placeholder'],
'data-allow_null' => $field['allow_null'],
);
if ( $field['aria-label'] ) {
$select['aria-label'] = $field['aria-label'];
}
// multiple
if ( $field['multiple'] ) {
$select['multiple'] = 'multiple';
$select['size'] = 5;
$select['name'] .= '[]';
// Reduce size to single line if UI.
if ( $field['ui'] ) {
$select['size'] = 1;
}
}
// special atts
if ( ! empty( $field['readonly'] ) ) {
$select['readonly'] = 'readonly';
}
if ( ! empty( $field['disabled'] ) ) {
$select['disabled'] = 'disabled';
}
if ( ! empty( $field['ajax_action'] ) ) {
$select['data-ajax_action'] = $field['ajax_action'];
}
// hidden input is needed to allow validation to see <select> element with no selected value
if ( $field['multiple'] || $field['ui'] ) {
acf_hidden_input(
array(
'id' => $field['id'] . '-input',
'name' => $field['name'],
)
);
}
if ( ! empty( $field['query_nonce'] ) ) {
$select['data-query-nonce'] = $field['query_nonce'];
}
// append
$select['value'] = $value;
$select['choices'] = $choices;
// render
acf_select_input( $select );
}