name = 'image';
$this->label = __("Image",'acf');
$this->category = __("Content",'acf');
$this->defaults = array(
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all'
);
$this->l10n = array(
'select' => __("Select Image",'acf'),
'edit' => __("Edit Image",'acf'),
'update' => __("Update Image",'acf'),
'uploadedTo' => __("Uploaded to this post",'acf'),
);
// do not delete!
parent::__construct();
// filters
add_filter('get_media_item_args', array($this, 'get_media_item_args'));
add_filter('wp_prepare_attachment_for_js', array($this, 'wp_prepare_attachment_for_js'), 10, 3);
// JSON
add_action('wp_ajax_acf/fields/image/get_images', array($this, 'ajax_get_images'), 10, 1);
add_action('wp_ajax_nopriv_acf/fields/image/get_images', array($this, 'ajax_get_images'), 10, 1);
}
/*
* 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 )
{
// vars
$o = array(
'class' => '',
'url' => '',
);
// has value?
if( $field['value'] && is_numeric($field['value']) ) {
$url = wp_get_attachment_image_src($field['value'], $field['preview_size']);
if( $url ) {
$o['url'] = $url[0];
$o['class'] = 'active';
}
}
?>
|
'radio',
'name' => 'fields['.$key.'][save_format]',
'value' => $field['save_format'],
'layout' => 'horizontal',
'choices' => array(
'object' => __("Image Object",'acf'),
'url' => __("Image URL",'acf'),
'id' => __("Image ID",'acf')
)
));
?>
|
|
'radio',
'name' => 'fields['.$key.'][preview_size]',
'value' => $field['preview_size'],
'layout' => 'horizontal',
'choices' => apply_filters('acf/get_image_sizes', array())
));
?>
|
|
'radio',
'name' => 'fields['.$key.'][library]',
'value' => $field['library'],
'layout' => 'horizontal',
'choices' => array(
'all' => __('All', 'acf'),
'uploadedTo' => __('Uploaded to post', 'acf')
)
));
?>
|
ID, 'full' );
$value = array(
'id' => $attachment->ID,
'alt' => get_post_meta($attachment->ID, '_wp_attachment_image_alt', true),
'title' => $attachment->post_title,
'caption' => $attachment->post_excerpt,
'description' => $attachment->post_content,
'mime_type' => $attachment->post_mime_type,
'url' => $src[0],
'width' => $src[1],
'height' => $src[2],
'sizes' => array(),
);
// find all image sizes
$image_sizes = get_intermediate_image_sizes();
if( $image_sizes )
{
foreach( $image_sizes as $image_size )
{
// find src
$src = wp_get_attachment_image_src( $attachment->ID, $image_size );
// add src
$value[ 'sizes' ][ $image_size ] = $src[0];
$value[ 'sizes' ][ $image_size . '-width' ] = $src[1];
$value[ 'sizes' ][ $image_size . '-height' ] = $src[2];
}
// foreach( $image_sizes as $image_size )
}
// if( $image_sizes )
}
return $value;
}
/*
* get_media_item_args
*
* @description:
* @since: 3.6
* @created: 27/01/13
*/
function get_media_item_args( $vars )
{
$vars['send'] = true;
return($vars);
}
/*
* ajax_get_images
*
* @description:
* @since: 3.5.7
* @created: 13/01/13
*/
function ajax_get_images()
{
// vars
$options = array(
'nonce' => '',
'images' => array(),
'preview_size' => 'thumbnail'
);
$return = array();
// load post options
$options = array_merge($options, $_POST);
// verify nonce
if( ! wp_verify_nonce($options['nonce'], 'acf_nonce') )
{
die(0);
}
if( $options['images'] )
{
foreach( $options['images'] as $id )
{
$url = wp_get_attachment_image_src( $id, $options['preview_size'] );
$return[] = array(
'id' => $id,
'url' => $url[0],
);
}
}
// return json
echo json_encode( $return );
die;
}
/*
* image_size_names_choose
*
* @description:
* @since: 3.5.7
* @created: 13/01/13
*/
function image_size_names_choose( $sizes )
{
global $_wp_additional_image_sizes;
if( $_wp_additional_image_sizes )
{
foreach( $_wp_additional_image_sizes as $k => $v )
{
$title = $k;
$title = str_replace('-', ' ', $title);
$title = str_replace('_', ' ', $title);
$title = ucwords( $title );
$sizes[ $k ] = $title;
}
// foreach( $image_sizes as $image_size )
}
return $sizes;
}
/*
* wp_prepare_attachment_for_js
*
* @description: This sneaky hook adds the missing sizes to each attachment in the 3.5 uploader. It would be a lot easier to add all the sizes to the 'image_size_names_choose' filter but then it will show up on the normal the_content editor
* @since: 3.5.7
* @created: 13/01/13
*/
function wp_prepare_attachment_for_js( $response, $attachment, $meta )
{
// only for image
if( $response['type'] != 'image' )
{
return $response;
}
// make sure sizes exist. Perhaps they dont?
if( !isset($meta['sizes']) )
{
return $response;
}
$attachment_url = $response['url'];
$base_url = str_replace( wp_basename( $attachment_url ), '', $attachment_url );
if( isset($meta['sizes']) && is_array($meta['sizes']) )
{
foreach( $meta['sizes'] as $k => $v )
{
if( !isset($response['sizes'][ $k ]) )
{
$response['sizes'][ $k ] = array(
'height' => $v['height'],
'width' => $v['width'],
'url' => $base_url . $v['file'],
'orientation' => $v['height'] > $v['width'] ? 'portrait' : 'landscape',
);
}
}
}
return $response;
}
/*
* 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 )
{
// array?
if( is_array($value) && isset($value['id']) )
{
$value = $value['id'];
}
// object?
if( is_object($value) && isset($value->ID) )
{
$value = $value->ID;
}
return $value;
}
}
new acf_field_image();
?>