pluto3/inc/acf/advanced-custom-fields-pro/forms/attachment.php
2017-09-19 16:23:41 +08:00

327 lines
5.1 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);
}
/*
* validate_page
*
* This function will check if the current page is for a post/page edit form
*
* @type function
* @date 23/06/12
* @since 3.1.8
*
* @param n/a
* @return (boolean)
*/
function validate_page() {
// global
global $pagenow, $typenow, $wp_version;
// validate page
if( $pagenow === 'post.php' && $typenow === 'attachment' ) {
return true;
}
// validate page
if( $pagenow === 'upload.php' && version_compare($wp_version, '4.0', '>=') ) {
add_action('admin_footer', array($this, 'admin_footer'), 0);
return true;
}
// return
return false;
}
/*
* 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 page
if( !$this->validate_page() ) {
return;
}
// load acf scripts
acf_enqueue_scripts();
}
/*
* 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(
'post_id' => 0,
'nonce' => 'attachment',
'ajax' => 1
));
?>
<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 = $this->validate_page();
$post_id = $post->ID;
$el = 'tr';
$args = array(
'attachment' => $post_id
);
// get field groups
$field_groups = acf_get_field_groups( $args );
// render
if( !empty($field_groups) ) {
// get acf_form_data
ob_start();
acf_form_data(array(
'post_id' => $post_id,
'nonce' => 'attachment',
));
if( $this->validate_page() ) {
echo '<style type="text/css">
.compat-attachment-fields,
.compat-attachment-fields > tbody,
.compat-attachment-fields > tbody > tr,
.compat-attachment-fields > tbody > tr > th,
.compat-attachment-fields > tbody > tr > td {
display: block;
}
.compat-attachment-fields > tbody > tr.acf-field {
margin: 0 0 15px;
}
.compat-attachment-fields > tbody > tr.acf-field > td.acf-label {
margin: 0;
}
.compat-attachment-fields > tbody > tr.acf-field > td.acf-label label {
margin: 0;
padding: 0;
}
.compat-attachment-fields > tbody > tr.acf-field > td.acf-label p {
margin: 0 0 3px !important;
}
.compat-attachment-fields > tbody > tr.acf-field > td.acf-input {
margin: 0;
}
</style>';
}
// 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( $post_id, $fields, $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;
}
// validate and save
if( acf_validate_save_post(true) ) {
acf_save_post( $post['ID'] );
}
// return
return $post;
}
}
new acf_form_attachment();
endif;
?>