<?php class acf_table_add_on extends acf_field { // vars var $settings, // will hold info such as dir / path $defaults; // will hold default field options /* * __construct * * Set name / label needed for actions / filters * * @since 3.6 * @date 23/01/13 */ function __construct() { // language load_textdomain( 'acf-table', dirname(__FILE__) . '/lang/acf-table-' . get_locale() . '.mo' ); $this->name = 'table'; $this->label = __( 'Table','acf-table' ); $this->category = __( 'Layout', 'acf' ); // Basic, Content, Choice, etc $this->defaults = array( 'use_header' => 0, // add default here to merge into your field. // This makes life easy when creating the field options as you don't need to use any if( isset('') ) logic. eg: //'preview_size' => 'thumbnail' ); // do not delete! parent::__construct(); // settings $this->settings = array( 'dir_url' => plugins_url( '', __FILE__ ) . '/', 'version' => '1.0.5', ); } /* * create_field() * * Create the HTML interface for your field * * @param $field - an array holding all the field's data * * @type action * @since 3.6 * @date 23/01/13 */ function create_field( $field ) { $data_field['use_header'] = $field['use_header']; $e = ''; $e .= '<div class="acf-table-root">'; // OPTION HEADER { if ( $data_field['use_header'] === 0 ) { $e .= '<div class="acf-table-optionbox">'; $e .= '<label>' . __( 'use table header', 'acf-table' ) . ' </label>'; $e .= '<select class="acf-table-optionbox-field acf-table-fc-opt-use-header" name="acf-table-opt-use-header">'; $e .= '<option value="0">' . __( 'No', 'acf-table' ) . '</option>'; $e .= '<option value="1">' . __( 'Yes', 'acf-table' ) . '</option>'; $e .= '</select>'; $e .= '</div>'; } // } $e .= '<div class="acf-input-wrap">'; $e .= '<input type="hidden" data-field-options="' . urlencode( wp_json_encode( $data_field ) ) . '" id="' . $field['id'] . '" class="' . $field['class'] . '" name="' . $field['name'] . '" value="' . urlencode( $field['value'] ) . '"/>'; $e .= '</div>'; $e .= '</div>'; echo $e; } /* * input_admin_enqueue_scripts() * * This action is called in the admin_enqueue_scripts action on the edit screen where your field is created. * Use this action to add css + javascript to assist your create_field() action. * * $info http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts * @type action * @since 3.6 * @date 23/01/13 */ function input_admin_enqueue_scripts() { // Note: This function can be removed if not used // register acf scripts wp_register_script('acf-input-table', $this->settings['dir_url'] . 'js/input-v4.js', array('acf-input'), $this->settings['version'] ); wp_register_style('acf-input-table', $this->settings['dir_url'] . 'css/input.css', array('acf-input'), $this->settings['version'] ); // scripts wp_enqueue_script(array( 'acf-input-table', )); // styles wp_enqueue_style(array( 'acf-input-table', )); } /* * create_options() * * Create extra options for your field. This is rendered when editing a field. * The value of $field['name'] can be used (like bellow) to save extra data to the $field * * @type action * @since 3.6 * @date 23/01/13 * * @param $field - an array holding all the field's data */ function create_options($field) { // defaults? /* $field = array_merge($this->defaults, $field); */ // key is needed in the field names to correctly save the data $key = $field['name']; // Create Field Options HTML // USER HEADER echo '<tr class="field_option field_option_' . $this->name . '">'; echo '<td class="label">'; echo '<label>' . __( "Table Header", 'acf-table' ) . '</label>'; //echo '<p class="description">' . __( "", 'acf' ) . '</p>'; echo '</td>'; echo '<td>'; do_action('acf/create_field', array( 'type' => 'radio', 'name' => 'fields[' . $key . '][use_header]', 'value' => $field['use_header'], 'choices' => array( 0 => __( "Optional", 'acf-table' ), 1 => __( "Yes", 'acf-table' ), 2 => __( "No", 'acf-table' ), ), 'layout' => 'horizontal', )); echo '</td>'; echo '</tr>'; } /* * format_value() * * This filter is appied to the $value after it is loaded from the db and before it is passed to the create_field action * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value - the value which was loaded from the database * @param $post_id - the $post_id from which the value was loaded * @param $field - the field array holding all the field options * * @return $value - the modified value */ function format_value_for_api( $value, $post_id, $field ) { $a = json_decode( $value, true ); $value = false; // IF BODY DATA if ( count( $a['b'] ) > 0 ) { // IF HEADER DATA if ( $a['p']['o']['uh'] === 1 ) { $value['header'] = $a['h']; } else { $value['header'] = false; } // BODY $value['body'] = $a['b']; // IF SINGLE EMPTY CELL, THEN DO NOT RETURN TABLE DATA if ( count( $a['b'] ) === 1 AND count( $a['b'][0] ) === 1 AND trim( $a['b'][0][0]['c'] ) === '' ) { $value = false; } } return $value; } /* * update_value() * * This filter is appied to the $value before it is updated in the db * * @type filter * @since 3.6 * @date 23/01/13 * * @param $value - the value which will be saved in the database * @param $post_id - the $post_id of which the value will be saved * @param $field - the field array holding all the field options * * @return $value - the modified value */ function update_value($value, $post_id, $field) { $value = urldecode( str_replace( '%5C', '%5C%5C', $value ) ); return $value; } } // create field new acf_table_add_on();