228 lines
4.0 KiB
PHP
228 lines
4.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* ACF Attachment Form Class
|
||
|
*
|
||
|
* All the logic for adding fields to attachments
|
||
|
*
|
||
|
* @class acf_form_attachment
|
||
|
* @package ACF
|
||
|
* @subpackage Forms
|
||
|
*/
|
||
|
|
||
|
if ( ! class_exists( 'acf_form_attachment' ) ) :
|
||
|
|
||
|
class acf_form_attachment {
|
||
|
|
||
|
/*
|
||
|
* __construct
|
||
|
*
|
||
|
* This function will setup the class functionality
|
||
|
*
|
||
|
* @type function
|
||
|
* @date 5/03/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param n/a
|
||
|
* @return n/a
|
||
|
*/
|
||
|
|
||
|
function __construct() {
|
||
|
|
||
|
// actions
|
||
|
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
||
|
|
||
|
// render
|
||
|
add_filter( 'attachment_fields_to_edit', array( $this, 'edit_attachment' ), 10, 2 );
|
||
|
|
||
|
// save
|
||
|
add_filter( 'attachment_fields_to_save', array( $this, 'save_attachment' ), 10, 2 );
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* admin_enqueue_scripts
|
||
|
*
|
||
|
* This action is run after post query but before any admin script / head actions.
|
||
|
* It is a good place to register all actions.
|
||
|
*
|
||
|
* @type action (admin_enqueue_scripts)
|
||
|
* @date 26/01/13
|
||
|
* @since 3.6.0
|
||
|
*
|
||
|
* @param N/A
|
||
|
* @return N/A
|
||
|
*/
|
||
|
|
||
|
function admin_enqueue_scripts() {
|
||
|
|
||
|
// bail early if not valid screen
|
||
|
if ( ! acf_is_screen( array( 'attachment', 'upload' ) ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// load acf scripts
|
||
|
acf_enqueue_scripts(
|
||
|
array(
|
||
|
'uploader' => true,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// actions
|
||
|
if ( acf_is_screen( 'upload' ) ) {
|
||
|
add_action( 'admin_footer', array( $this, 'admin_footer' ), 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* admin_footer
|
||
|
*
|
||
|
* This function will add acf_form_data to the WP 4.0 attachment grid
|
||
|
*
|
||
|
* @type action (admin_footer)
|
||
|
* @date 11/09/2014
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param n/a
|
||
|
* @return n/a
|
||
|
*/
|
||
|
|
||
|
function admin_footer() {
|
||
|
|
||
|
// render post data
|
||
|
acf_form_data(
|
||
|
array(
|
||
|
'screen' => 'attachment',
|
||
|
'post_id' => 0,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
?>
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
// WP saves attachment on any input change, so unload is not needed
|
||
|
acf.unload.active = 0;
|
||
|
|
||
|
</script>
|
||
|
<?php
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* edit_attachment
|
||
|
*
|
||
|
* description
|
||
|
*
|
||
|
* @type function
|
||
|
* @date 8/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param $post_id (int)
|
||
|
* @return $post_id (int)
|
||
|
*/
|
||
|
|
||
|
function edit_attachment( $form_fields, $post ) {
|
||
|
|
||
|
// vars
|
||
|
$is_page = acf_is_screen( 'attachment' );
|
||
|
$post_id = $post->ID;
|
||
|
$el = 'tr';
|
||
|
|
||
|
// get field groups
|
||
|
$field_groups = acf_get_field_groups(
|
||
|
array(
|
||
|
'attachment_id' => $post_id,
|
||
|
'attachment' => $post_id, // Leave for backwards compatibility
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// render
|
||
|
if ( ! empty( $field_groups ) ) {
|
||
|
|
||
|
// get acf_form_data
|
||
|
ob_start();
|
||
|
|
||
|
acf_form_data(
|
||
|
array(
|
||
|
'screen' => 'attachment',
|
||
|
'post_id' => $post_id,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// open
|
||
|
echo '</td></tr>';
|
||
|
|
||
|
// loop
|
||
|
foreach ( $field_groups as $field_group ) {
|
||
|
|
||
|
// load fields
|
||
|
$fields = acf_get_fields( $field_group );
|
||
|
|
||
|
// override instruction placement for modal
|
||
|
if ( ! $is_page ) {
|
||
|
$field_group['instruction_placement'] = 'field';
|
||
|
}
|
||
|
|
||
|
// render
|
||
|
acf_render_fields( $fields, $post_id, $el, $field_group['instruction_placement'] );
|
||
|
}
|
||
|
|
||
|
// close
|
||
|
echo '<tr class="compat-field-acf-blank"><td>';
|
||
|
|
||
|
$html = ob_get_contents();
|
||
|
|
||
|
ob_end_clean();
|
||
|
|
||
|
$form_fields['acf-form-data'] = array(
|
||
|
'label' => '',
|
||
|
'input' => 'html',
|
||
|
'html' => $html,
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// return
|
||
|
return $form_fields;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* save_attachment
|
||
|
*
|
||
|
* description
|
||
|
*
|
||
|
* @type function
|
||
|
* @date 8/10/13
|
||
|
* @since 5.0.0
|
||
|
*
|
||
|
* @param $post_id (int)
|
||
|
* @return $post_id (int)
|
||
|
*/
|
||
|
|
||
|
function save_attachment( $post, $attachment ) {
|
||
|
|
||
|
// bail early if not valid nonce
|
||
|
if ( ! acf_verify_nonce( 'attachment' ) ) {
|
||
|
return $post;
|
||
|
}
|
||
|
|
||
|
// bypass validation for ajax
|
||
|
if ( acf_is_ajax( 'save-attachment-compat' ) ) {
|
||
|
acf_save_post( $post['ID'] );
|
||
|
|
||
|
// validate and save
|
||
|
} elseif ( acf_validate_save_post( true ) ) {
|
||
|
acf_save_post( $post['ID'] );
|
||
|
}
|
||
|
|
||
|
// return
|
||
|
return $post;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
new acf_form_attachment();
|
||
|
endif;
|
||
|
|
||
|
?>
|