web/wp-content/plugins/acf-extended/includes/fields/field-post-statuses.php (380 lines of code) (raw):

<?php if(!defined('ABSPATH')){ exit; } if(!class_exists('acfe_field_post_statuses')): class acfe_field_post_statuses extends acf_field{ /** * initialize */ function initialize(){ $this->name = 'acfe_post_statuses'; $this->label = __('Post Statuses', 'acfe'); $this->category = 'WordPress'; $this->defaults = array( 'post_status' => array(), 'field_type' => 'checkbox', 'multiple' => 0, 'allow_null' => 0, 'choices' => array(), 'default_value' => '', 'ui' => 0, 'ajax' => 0, 'placeholder' => '', 'search_placeholder' => '', 'layout' => '', 'toggle' => 0, 'allow_custom' => 0, 'other_choice' => 0, 'return_format' => 'object', ); } /** * render_field_settings * * @param $field */ function render_field_settings($field){ if(isset($field['default_value'])){ $field['default_value'] = acf_encode_choices($field['default_value'], false); } // Allow Post Status acf_render_field_setting($field, array( 'label' => __('Allow Post Status','acf'), 'instructions' => '', 'type' => 'select', 'name' => 'post_status', 'choices' => acfe_get_pretty_post_statuses(), 'multiple' => 1, 'ui' => 1, 'allow_null' => 1, 'placeholder' => __("All post statuses",'acf'), )); // field_type acf_render_field_setting($field, array( 'label' => __('Appearance','acf'), 'instructions' => __('Select the appearance of this field', 'acf'), 'type' => 'select', 'name' => 'field_type', 'optgroup' => true, 'choices' => array( 'checkbox' => __('Checkbox', 'acf'), 'radio' => __('Radio Buttons', 'acf'), 'select' => _x('Select', 'noun', 'acf') ) )); // default_value acf_render_field_setting($field, array( 'label' => __('Default Value','acf'), 'instructions' => __('Enter each default value on a new line','acf'), 'name' => 'default_value', 'type' => 'textarea', )); // return_format acf_render_field_setting($field, array( 'label' => __('Return Value', 'acf'), 'instructions' => '', 'type' => 'radio', 'name' => 'return_format', 'choices' => array( 'object' => __('Post status object', 'acfe'), 'name' => __('Post status name', 'acfe') ), 'layout' => 'horizontal', )); // Select + Radio: allow_null acf_render_field_setting($field, array( 'label' => __('Allow Null?','acf'), 'instructions' => '', 'name' => 'allow_null', 'type' => 'true_false', 'ui' => 1, 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), ), array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'radio', ), ), ) )); // Select: multiple acf_render_field_setting($field, array( 'label' => __('Select multiple values?','acf'), 'instructions' => '', 'name' => 'multiple', 'type' => 'true_false', 'ui' => 1, 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), ), ) )); // Select: ui acf_render_field_setting($field, array( 'label' => __('Stylised UI','acf'), 'instructions' => '', 'name' => 'ui', 'type' => 'true_false', 'ui' => 1, 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), ), ) )); // Select: ajax acf_render_field_setting($field, array( 'label' => __('Use AJAX to lazy load choices?','acf'), 'instructions' => '', 'name' => 'ajax', 'type' => 'true_false', 'ui' => 1, 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => 1, ), ), ) )); // Select: Placeholder acf_render_field_setting($field, array( 'label' => __('Placeholder','acf'), 'instructions' => __('Appears within the input','acf'), 'type' => 'text', 'name' => 'placeholder', 'placeholder' => _x('Select', 'verb', 'acf'), 'conditional_logic' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => '0', ), array( 'field' => 'allow_null', 'operator' => '==', 'value' => '1', ), array( 'field' => 'multiple', 'operator' => '==', 'value' => '0', ), ), array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => '1', ), array( 'field' => 'allow_null', 'operator' => '==', 'value' => '1', ), ), array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => '1', ), array( 'field' => 'multiple', 'operator' => '==', 'value' => '1', ), ), ) )); // Select: Search Placeholder acf_render_field_setting($field, array( 'label' => __('Search Input Placeholder','acf'), 'instructions' => __('Appears within the search input','acf'), 'type' => 'text', 'name' => 'search_placeholder', 'placeholder' => '', 'conditional_logic' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => '1', ), array( 'field' => 'multiple', 'operator' => '==', 'value' => '0', ), ), ) )); // Radio: other_choice acf_render_field_setting($field, array( 'label' => __('Other','acf'), 'instructions' => '', 'name' => 'other_choice', 'type' => 'true_false', 'ui' => 1, 'message' => __("Add 'other' choice to allow for custom values", 'acf'), 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'radio', ), ), ) )); // Checkbox: layout acf_render_field_setting($field, array( 'label' => __('Layout','acf'), 'instructions' => '', 'type' => 'radio', 'name' => 'layout', 'layout' => 'horizontal', 'choices' => array( 'vertical' => __("Vertical",'acf'), 'horizontal' => __("Horizontal",'acf') ), 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'checkbox', ), ), array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'radio', ), ), ) )); // Checkbox: toggle acf_render_field_setting($field, array( 'label' => __('Toggle','acf'), 'instructions' => __('Prepend an extra checkbox to toggle all choices','acf'), 'name' => 'toggle', 'type' => 'true_false', 'ui' => 1, 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'checkbox', ), ), ) )); // Checkbox: other_choice acf_render_field_setting($field, array( 'label' => __('Allow Custom','acf'), 'instructions' => '', 'name' => 'allow_custom', 'type' => 'true_false', 'ui' => 1, 'message' => __("Allow 'custom' values to be added", 'acf'), 'conditions' => array( array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'checkbox', ), ), array( array( 'field' => 'field_type', 'operator' => '==', 'value' => 'select', ), array( 'field' => 'ui', 'operator' => '==', 'value' => '1', ), ) ) )); } /** * update_field * * @param $field * * @return mixed */ function update_field($field){ $field['default_value'] = acf_decode_choices($field['default_value'], true); if($field['field_type'] === 'radio'){ $field['default_value'] = acfe_unarray($field['default_value']); } return $field; } /** * prepare_field * * @param $field * * @return mixed */ function prepare_field($field){ // field type $type = $field['type']; $field_type = $field['field_type']; $field['type'] = $field_type; $field['wrapper']['data-ftype'] = $type; // choices $field['choices'] = acfe_get_pretty_post_statuses($field['post_status']); // allow custom if($field['allow_custom']){ $value = acf_maybe_get($field, 'value'); $value = acf_get_array($value); foreach($value as $v){ // append custom value to choices if(!isset($field['choices'][ $v ])){ $field['choices'][ $v ] = $v; $field['custom_choices'][ $v ] = $v; } } } // return return $field; } /** * format_value * * @param $value * @param $post_id * @param $field * * @return array|false|mixed|string[] */ function format_value($value, $post_id, $field){ // bail early if(empty($value)){ return $value; } // vars $is_array = is_array($value); $value = acf_get_array($value); // loop foreach($value as &$v){ // get object $object = get_post_status_object($v); if(!$object || is_wp_error($object)) continue; // return: object if($field['return_format'] === 'object'){ $v = $object; } } // check array if(!$is_array){ $value = acfe_unarray($value); } // return return $value; } /** * translate_field * * @param $field * * @return mixed */ function translate_field($field){ $field['placeholder'] = acf_translate($field['placeholder']); $field['search_placeholder'] = acf_translate($field['search_placeholder']); return $field; } } // initialize acf_register_field_type('acfe_field_post_statuses'); endif;