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.2.7',
);
// PREVENTS SAVING INVALID TABLE FIELD JSON DATA {
if (
! defined( 'ACF_TABLEFIELD_FILTER_POSTMETA' ) OR
constant( 'ACF_TABLEFIELD_FILTER_POSTMETA' ) === true
) {
add_filter( 'update_post_metadata', function( $x, $object_id, $meta_key, $meta_value, $prev_value ) {
// detecting ACF table json
if (
is_string( $meta_value ) and
strpos( $meta_value, '"acftf":{' ) !== false
) {
// is new value a valid json string
json_decode( $meta_value );
if ( json_last_error() !== JSON_ERROR_NONE ) {
// canceling meta value uptdate
error_log( 'The plugin advanced-custom-fields-table-field prevented a third party update_post_meta( ' . $object_id . ', "' . $meta_key . '", $value ); action that would save a broken JSON string.' . "\n" . 'For details see https://codex.wordpress.org/Function_Reference/update_post_meta#Character_Escaping.' );
return true;
}
}
}, 10, 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 .= '
';
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
/// scripts
wp_enqueue_script( 'acf-input-table', $this->settings['dir_url'] . 'js/input-v4.js', array( 'jquery', 'acf-input' ), $this->settings['version'], true );
// styles
wp_register_style( 'acf-input-table', $this->settings['dir_url'] . 'css/input.css', array( 'acf-input' ), $this->settings['version'] );
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'];
if ( empty( $field['use_header'] ) ) {
$field['use_header'] = 0;
}
// Create Field Options HTML
// USER HEADER
echo '
';
}
/*
* 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 (
null !== $a['b'] &&
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)
{
if ( is_string( $value ) ) {
$value = urldecode( str_replace( '%5C', '%5C%5C', $value ) );
}
if ( is_array( $value ) ) {
$data = get_post_meta( $post_id, $field['name'], true );
$data = json_decode( $data, true );
if ( isset( $value['header'] ) ) {
$data['h'] = $value['header'];
}
if ( isset( $value['body'] ) ) {
$data['b'] = $value['body'];
}
$value = wp_slash( json_encode( $data ) );
}
return $value;
}
}
// create field
new acf_table_add_on();