core = Core\Core::instance(); $this->js = Asset\Asset::get('js/acf-quickedit.js'); $this->js_columns = Asset\Asset::get('js/acf-columns.js'); $this->css = Asset\Asset::get('css/acf-quickedit.css'); add_action( 'after_setup_theme', [ $this , 'setup' ] ); // init field group admin add_action( 'acf/field_group/admin_head', [ $this, 'init_field_group' ] ); add_action( 'wp_ajax_acf/field_group/render_field_settings', [ $this, 'init_field_group' ], 1 ); add_filter('acf/load_field_group', [ $this, 'load_field_group' ] ); } /** * @action acf/load_field_group */ public function load_field_group( $field_group ) { return wp_parse_args( $field_group, [ 'qef_simple_location_rules' => false, ]); } /** * @param string $what */ public function __get( $what ) { switch( $what ) { case 'js': case 'css': return $this->$what; } } /** * @action acf/field_group/admin_head * @action wp_ajax_acf/field_group/render_field_settings */ public function init_field_group() { if ( version_compare( acf()->version, '6.0.0', '>=' ) ) { FieldGroup::instance(); } else { LegacyFieldGroup::instance(); } } /** * Setup plugin * * @action after_setup_theme */ public function setup() { // early return if no ACF if ( ! function_exists('acf') || ! class_exists('acf') || version_compare( acf()->version, '5.7', '<' ) ) { if ( current_user_can( 'activate_plugins' ) ) { add_action( 'admin_notices', [ $this, 'print_no_acf_notice' ] ); } return; } // Features $this->columns = Columns::instance(); $this->quickedit = Quickedit::instance(); $this->bulkedit = Bulkedit::instance(); $this->filters = Filters::instance(); $this->backendsearch = BackendSearch::instance(); $this->ajax_handler = new Ajax\AjaxHandler( 'get_acf_post_meta', [ 'public' => false, 'use_nonce' => true, 'capability' => false, // apply_filters( 'acf_qef_capability', 'edit_posts' ), 'callback' => [ $this, 'ajax_get_acf_post_meta' ], ]); add_action( 'load-edit.php', [ $this , 'enqueue_edit_assets' ] ); add_action( 'load-edit-tags.php', [ $this , 'enqueue_edit_assets' ] ); add_action( 'load-users.php', [ $this, 'enqueue_columns_assets' ] ); add_action( 'acf/field_group/admin_enqueue_scripts', [ $this, 'enqueue_fieldgroup_assets' ] ); } /** * @action 'wp_ajax_get_acf_post_meta' */ public function ajax_get_acf_post_meta( $params ) { $success = false; $message = ''; $data = null; if ( isset( $params['object_id'] , $params['acf_field_keys'] ) ) { $object_ids = (array) $params['object_id']; $field_keys = array_unique( (array) $params['acf_field_keys'] ); $object_ids = array_filter( $object_ids, [ $this, 'can_edit_object' ] ); $success = true; $data = []; foreach ( $object_ids as $object_id ) { foreach ( $field_keys as $key ) { // ACF-Field must exists if ( ! ( $field = get_field_object( $key , $object_id ) ) ) { continue; } if ( $field_object = Fields\Field::getFieldObject( $field ) ) { $value = $field_object->sanitize_value( $field_object->get_value( $object_id, false ), 'ajax' ); if ( ! isset( $data[ $key ] ) ) { // first iteration - always set value // $val = $field_object->get_value( $object_id, false ); $data[ $key ] = $value; } else { // multiple iterations - no value if values aren't equal if ( $data[ $key ] != $value ) { $data[ $key ] = ''; } } } } } } return [ 'success' => $success, 'message' => $message, 'data' => $data, ]; } /** * Current user can edit * * @param string $object_id ACF Object ID * @return boolean */ private function can_edit_object( $object_id ) { if ( is_numeric( $object_id ) ) { return current_user_can( 'edit_post', $object_id ); } if ( preg_match('/^([\w\d\-_]+)_(\d+)$/', $object_id, $matches ) ) { list( $obj_id, $type, $term_id ) = $matches; if ( $type === 'user' ) { return current_user_can('edit_users'); } if ( taxonomy_exists( $type ) ) { return current_user_can( 'edit_term', $term_id ); } } return false; } /** * @action admin_notices */ public function print_no_acf_notice() { ?>
ACF QuickEdit Fields plugin requires ACF version 5.6 or later. You can disable and uninstall it on the plugins page.', 'acf-quickedit-fields' ), [ 'strong' => [], 'a' => [ 'href' => [], 'target' => [], 'rel' => '' ] ] ), esc_url( 'https://www.advancedcustomfields.com/' ), esc_url( admin_url('plugins.php' ) ) ); ?>