true,
));
// actions
add_action('add_meta_boxes', array($this, 'add_meta_boxes'), 10, 2);
add_action('edit_form_after_title', array($this, 'edit_form_after_title'));
add_filter('hidden_meta_boxes', array($this, 'hidden_meta_boxes'), 10, 3);
}
/**
* add_meta_boxes
*
* Adds ACF metaboxes for the given $post_type and $post.
*
* @date 19/9/18
* @since 5.7.6
*
* @param string $post_type The post type.
* @param WP_Post $post The post being edited.
* @return void
*/
function add_meta_boxes( $post_type, $post ) {
// vars
$postboxes = array();
$count = 0;
// get all field groups
$field_groups = acf_get_field_groups();
// loop
if( $field_groups ) {
foreach( $field_groups as $field_group ) {
// vars
$id = "acf-{$field_group['key']}"; // acf-group_123
$title = $field_group['title']; // Group 1
$context = $field_group['position']; // normal, side, acf_after_title
$priority = 'high'; // high, core, default, low
// change priority for sidebar metaboxes
if( $context == 'side' ) {
$priority = 'core';
}
/**
* Filters the metabox priority.
*
* @date 23/06/12
* @since 3.1.8
*
* @param string $priority The metabox priority (high, core, default, low).
* @param array $field_group The field group array.
*/
$priority = apply_filters('acf/input/meta_box_priority', $priority, $field_group);
// set the visibility for this field group
$visible = acf_get_field_group_visibility($field_group, array(
'post_id' => $post->ID,
'post_type' => $post_type
));
// add meta box
add_meta_box( $id, $title, array($this, 'render_meta_box'), $post_type, $context, $priority, array('field_group' => $field_group) );
// append to $postboxes
$this->postboxes[ $id ] = array(
'id' => $id,
'key' => $field_group['key'],
'style' => $field_group['style'],
'label' => $field_group['label_placement'],
'visible' => $visible,
'edit' => acf_get_field_group_edit_link( $field_group['ID'] )
);
// increase count for visible
if( $visible ) {
$count++;
// find first field group's style
if( $count == 1 ) {
$this->style = acf_get_field_group_style( $field_group );
}
}
}}
// remove postcustom metabox (removes expensive SQL query)
if( acf_get_setting('remove_wp_meta_box') ) {
remove_meta_box( 'postcustom', false, 'normal' );
}
}
/**
* edit_form_after_title
*
* Called after the title adn before the content editor.
*
* @date 19/9/18
* @since 5.7.6
*
* @param void
* @return void
*/
function edit_form_after_title() {
// globals
global $post, $wp_meta_boxes;
// render post data
acf_form_data(array(
'screen' => 'post',
'post_id' => $post->ID
));
// render 'acf_after_title' metaboxes
do_meta_boxes( get_current_screen(), 'acf_after_title', $post );
// clean up $wp_meta_boxes
unset( $wp_meta_boxes['post']['acf_after_title'] );
// render dynamic field group style
echo '';
}
/**
* hidden_meta_boxes
*
* Appends the id of all metaboxes that are not visible for WP to hide.
*
* @date 21/9/18
* @since 5.7.6
*
* @param array $hidden An array of hidden meta boxes.
* @param WP_Screen $screen WP_Screen object of the current screen.
* @param bool $use_defaults Whether to show the default meta boxes.
* @return array
*/
function hidden_meta_boxes( $hidden, $screen, $use_defaults ) {
// loop over visiblity array
foreach( $this->postboxes as $id => $postbox ) {
if( !$postbox['visible'] ) {
$hidden[] = $id;
}
}
// return
return $hidden;
}
/**
* render_meta_box
*
* Renders the ACF metabox HTML.
*
* @date 19/9/18
* @since 5.7.6
*
* @param WP_Post $post The post being edited.
* @param array metabox The add_meta_box() args.
* @return void
*/
function render_meta_box( $post, $metabox ) {
// vars
$id = $metabox['id'];
$field_group = $metabox['args']['field_group'];
$postbox = $this->postboxes[ $id ];
// render fields if visible
if( $postbox['visible'] ) {
$fields = acf_get_fields( $field_group );
acf_render_fields( $fields, $post->ID, 'div', $field_group['instruction_placement'] );
}
// inline javascript
?>
post_type, $restrict) ) {
$allow = false;
}
// disallow if the $_POST ID value does not match the $post->ID
$form_post_id = (int) acf_maybe_get_POST('post_ID');
if( $form_post_id && $form_post_id !== $post->ID ) {
$allow = false;
}
// revision (preview)
if( $post->post_type == 'revision' ) {
// allow if doing preview and this $post is a child of the $_POST ID
if( acf_maybe_get_POST('wp-preview') == 'dopreview' && $form_post_id === $post->post_parent) {
$allow = true;
}
}
// return
return $allow;
}
/*
* save_post
*
* Triggers during the 'save_post' action to save the $_POST data.
*
* @type function
* @date 23/06/12
* @since 1.0.0
*
* @param int $post_id The post ID
* @param WP_POST $post the post object.
* @return int
*/
function save_post( $post_id, $post ) {
// bail ealry if no allowed to save this post type
if( !$this->allow_save_post($post) ) {
return $post_id;
}
// verify nonce
if( !acf_verify_nonce('post') ) {
return $post_id;
}
// validate for published post (allow draft to save without validation)
if( $post->post_status == 'publish' ) {
// show errors
acf_validate_save_post( true );
}
// save
acf_save_post( $post_id );
// save revision
if( post_type_supports($post->post_type, 'revisions') ) {
acf_save_post_revision( $post_id );
}
// return
return $post_id;
}
}
acf_new_instance('ACF_Form_Post');
endif;
?>