[ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], 'textarea' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], 'number' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], 'email' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], 'url' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], 'password' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'range' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => true, ], // Content 'wysiwyg' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => true, ], 'oembed' => [ 'column' => true, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'image' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], 'file' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], 'gallery' => [ 'column' => true, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], // Choice 'select' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], 'checkbox' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], 'radio' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], 'true_false' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], 'button_group' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], // relational 'post_object' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], // TODO: select post filter 'page_link' => [ 'column' => true, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'link' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], 'relationship' => [ 'column' => true, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], // TODO: select post filter 'taxonomy' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => true, 'backendsearch' => false, ], 'user' => [ 'column' => current_user_can('list_users'), 'quickedit' => current_user_can('list_users'), 'bulkedit' => current_user_can('list_users'), 'filter' => false, // current_user_can('list_users'), ], // TODO: select user filter // jQuery 'google_map' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'date_picker' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], // TODO: select year/month/day 'date_time_picker' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], // TODO: select year/month/day 'time_picker' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], 'color_picker' => [ 'column' => true, 'quickedit' => true, 'bulkedit' => true, 'filter' => false, 'backendsearch' => false, ], // Layout (unsupported) 'message' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'tab' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'repeater' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'group' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'flexible_content' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], 'clone' => [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false, ], ]; /** * Filter field type support of ACF Quick Edit Fields * * @param array $fields An associative array of field type support having the ACF field name as keys * and an array of supported fetaures as values. * Features are 'column', 'quickedit' and 'bulkedit'. */ $types = apply_filters( 'acf_quick_edit_fields_types', $types ); return array_map( function ( $type ) { return wp_parse_args( $type, [ 'column' => false, 'quickedit' => false, 'bulkedit' => false, 'filter' => false, 'backendsearch' => false ] ); }, $types ); } /** * Factory method * @param string|array $acf_field Field Array or Field key * @return ACFQuickEdit\Fields\Field */ public static function getFieldObject( $acf_field ) { if ( is_string( $acf_field ) ) { $acf_field = get_field_object( $acf_field ); } if ( ! is_array( $acf_field ) ) { return; } if ( ! isset( self::$fields[ $acf_field['key'] ] ) ) { $field_class = preg_split( '/[-_]/', $acf_field['type'] ); $field_class = array_map( 'ucfirst', $field_class ); $field_class = 'ACFQuickEdit\\Fields\\' . implode( '', $field_class ) . 'Field'; try { self::$fields[ $acf_field['key'] ] = new $field_class( $acf_field ); } catch( \Exception $exc ) { self::$fields[ $acf_field['key'] ] = new Generic( $acf_field ); } } return self::$fields[ $acf_field['key'] ]; } /** * @inheritdoc */ protected function __construct( $acf_field ) { $this->core = Core\Core::instance(); $this->acf_field = wp_parse_args( $acf_field, [ 'wrapper' => [ ] ] ); $parent_key = ''; if ( !empty( $this->acf_field['parent'] ) ) { if ( is_numeric( $this->acf_field['parent'] ) ) { // int: field stored in DB $parent = get_post( $this->acf_field['parent'] ); $parent_key = $parent->post_name; } else { // local json field $parent_key = $this->acf_field['parent']; } } if ( 'field_' === substr( $parent_key, 0, 6 ) ) { // local json $this->parent = self::getFieldObject( get_field_object( $parent_key ) ); } } /** * @param string $what */ public function __get( $what ) { if ( 'acf_field' === $what ) { return acf_get_store( 'fields' )->get( $this->_acf_field_key ); } } /** * @param string $what * @param string $value */ public function __set( $what, $value ) { if ( 'acf_field' === $what ) { $this->_acf_field_key = $value['key']; } } /** * @return array acf field */ public function get_acf_field() { return $this->acf_field; } /** * @return array acf field */ public function get_parent() { return $this->parent; } /** * Render Column content * * @param int|string $object_id * @return string */ final public function render_column( $object_id ) { $column_html = $this->_render_column( $object_id ); /** * Column HTML Content * * @param string $column_html * @param string/int $object_id * @param array $acf_field * * @since ? */ return apply_filters( 'acf_qef_column_html_' . $this->acf_field['type'], $column_html, $object_id, $this->acf_field ); } protected function _render_column( $object_id ) { return $this->get_value( $object_id ); } /** * Render Filter * * @param int|string $object_id * @return string */ public function render_filter( $index, $selected = '' ) { } /** * Bulk operations. * * @return array */ public function get_bulk_operations() { return []; } /** * @return bool */ public function is_sortable() { return false; } /** * Render Field Input * * @param string $post_type * @param string $mode 'bulk' | 'quick' * @param string $input_atts array * * @return null */ public function render_quickedit_field( $post_type, $mode, $input_atts = [] ) { $input_atts = wp_parse_args( $input_atts, [ 'data-acf-field-key' => $this->acf_field['key'], 'name' => $this->get_input_name(), ]); if ( $mode === 'bulk' ) { $input_atts['disabled'] = 'disabled'; } if ( isset( $this->acf_field['maxlength'] ) && intval( $this->acf_field['maxlength'] ) ) { $input_atts['maxlength'] = intval( $this->acf_field['maxlength'] ); } if ( ! apply_filters( 'acf_quick_edit_render_' . $this->acf_field['type'], true, $this->acf_field, $post_type ) ) { return; } $field_wrapper = wp_parse_args( $this->acf_field['wrapper'], [ 'id' => '' ] ); $wrapper_attr = [ 'class' => 'acf-field', 'data-key' => $this->acf_field['key'], 'data-field-type' => $this->acf_field['type'], 'data-allow-null' => isset( $this->acf_field['allow_null'] ) ? $this->acf_field['allow_null'] : 0, ]; if ( $field_wrapper['id'] ) { $wrapper_attr['data-id'] = $field_wrapper['id']; } $wrapper_attr = $this->get_wrapper_attributes( $wrapper_attr, $mode === 'quick' ); if ( isset( $this->acf_field['field_type'] ) ) { $wrapper_attr['data-field-sub-type'] = $this->acf_field['field_type']; } $wrapper_class = explode( ' ', $this->wrapper_class ); $wrapper_class = array_map( 'sanitize_html_class', $wrapper_class ); ?>