<?php
class acf_field_radio extends acf_field
{
function __construct()
{
$this->name = 'radio';
$this->label = __("Radio Button", 'acf');
$this->category = __("Choice", 'acf');
$this->defaults = array(
'layout' => 'vertical',
'choices' => array(),
'default_value' => '',
'other_choice' => 0,
'save_other_choice' => 0,
);
parent::__construct();
}
function create_field( $field )
{
$i = 0;
$e = '<ul class="acf-radio-list ' . esc_attr($field['class']) . ' ' . esc_attr($field['layout']) . '">';
if( is_array($field['choices']) )
{
foreach( $field['choices'] as $key => $value )
{
$i++;
$atts = '';
if( $field['value'] === false )
{
if( $i === 1 )
{
$atts = 'checked="checked" data-checked="checked"';
}
}
else
{
if( strval($key) === strval($field['value']) )
{
$atts = 'checked="checked" data-checked="checked"';
}
}
$e .= '<li><label><input id="' . esc_attr($field['id']) . '-' . esc_attr($key) . '" type="radio" name="' . esc_attr($field['name']) . '" value="' . esc_attr($key) . '" ' . esc_attr( $atts ) . ' />' . $value . '</label></li>';
}
}
if( $field['other_choice'] )
{
$atts = '';
$atts2 = 'name="" value="" style="display:none"';
if( $field['value'] !== false )
{
if( !isset($field['choices'][ $field['value'] ]) )
{
$atts = 'checked="checked" data-checked="checked"';
$atts2 = 'name="' . esc_attr($field['name']) . '" value="' . esc_attr($field['value']) . '"' ;
}
}
$e .= '<li><label><input id="' . esc_attr($field['id']) . '-other" type="radio" name="' . esc_attr($field['name']) . '" value="other" ' . $atts . ' />' . __("Other", 'acf') . '</label> <input type="text" ' . $atts2 . ' /></li>';
}
$e .= '</ul>';
echo $e;
}
function create_options( $field )
{
$key = $field['name'];
if( is_array($field['choices']) )
{
foreach( $field['choices'] as $k => $v )
{
$field['choices'][ $k ] = $k . ' : ' . $v;
}
$field['choices'] = implode("\n", $field['choices']);
}
?>
<tr class="field_option field_option_<?php echo $this->name; ?>">
<td class="label">
<label for=""><?php _e("Choices", 'acf'); ?></label>
<p class="description"><?php _e("Enter your choices one per line", 'acf'); ?><br />
<br />
<?php _e("Red", 'acf'); ?><br />
<?php _e("Blue", 'acf'); ?><br />
<br />
<?php _e("red : Red", 'acf'); ?><br />
<?php _e("blue : Blue", 'acf'); ?><br />
</p>
</td>
<td>
<?php
do_action('acf/create_field', array(
'type' => 'textarea',
'class' => 'textarea field_option-choices',
'name' => 'fields['.$key.'][choices]',
'value' => $field['choices'],
));
?>
<div class="radio-option-other_choice">
<?php
do_action('acf/create_field', array(
'type' => 'true_false',
'name' => 'fields['.$key.'][other_choice]',
'value' => $field['other_choice'],
'message' => __("Add 'other' choice to allow for custom values", 'acf')
));
?>
</div>
<div class="radio-option-save_other_choice" <?php if( !$field['other_choice'] ): ?>style="display:none"<?php endif; ?>>
<?php
do_action('acf/create_field', array(
'type' => 'true_false',
'name' => 'fields['.$key.'][save_other_choice]',
'value' => $field['save_other_choice'],
'message' => __("Save 'other' values to the field's choices", 'acf')
));
?>
</div>
</td>
</tr>
<tr class="field_option field_option_<?php echo $this->name; ?>">
<td class="label">
<label><?php _e("Default Value", 'acf'); ?></label>
</td>
<td>
<?php
do_action('acf/create_field', array(
'type' => 'text',
'name' => 'fields['.$key.'][default_value]',
'value' => $field['default_value'],
));
?>
</td>
</tr>
<tr class="field_option field_option_<?php echo $this->name; ?>">
<td class="label">
<label for=""><?php _e("Layout", 'acf'); ?></label>
</td>
<td>
<?php
do_action('acf/create_field', array(
'type' => 'radio',
'name' => 'fields['.$key.'][layout]',
'value' => $field['layout'],
'layout' => 'horizontal',
'choices' => array(
'vertical' => __("Vertical", 'acf'),
'horizontal' => __("Horizontal", 'acf')
)
));
?>
</td>
</tr>
<?php
}
function update_value( $value, $post_id, $field )
{
if( $field['save_other_choice'] )
{
if( !isset($field['choices'][ $value ]) )
{
$field['choices'][ $value ] = $value;
if( isset($field['field_group']) )
{
do_action('acf/update_field', $field, $field['field_group']);
}
}
}
return $value;
}
}
new acf_field_radio();
?>