Last active
March 28, 2024 20:19
-
-
Save carlodaniele/3adf6a18e79233b98c96401d194e3420 to your computer and use it in GitHub Desktop.
An example WP plugin which adds functionalities to the WordPress Media Library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @package Media_hacks | |
* @version 1.0 | |
*/ | |
/* | |
Plugin Name: Media hacks | |
Plugin URI: http://wordpress.org/extend/plugins/# | |
Description: This is an example plugin | |
Author: Carlo Daniele | |
Version: 1.0 | |
Author URI: http://carlodaniele.it/en/ | |
*/ | |
/** | |
* Filters the attachment fields to edit. | |
* | |
* @param array $form_fields An array of attachment form fields. | |
* @param WP_Post $post The WP_Post attachment object. | |
*/ | |
function media_hacks_attachment_fields_to_edit( $form_fields, $post ){ | |
// https://codex.wordpress.org/Function_Reference/wp_get_attachment_metadata | |
$media_author = get_post_meta( $post->ID, 'media_author', true ); | |
$form_fields['media_author'] = array( | |
'value' => $media_author ? $media_author : '', | |
'label' => __( 'Author' ) | |
); | |
// get post mime type | |
$type = get_post_mime_type( $post->ID ); | |
// get the attachment path | |
$attachment_path = get_attached_file( $post->ID ); | |
// get image metadata | |
$metadata = wp_read_image_metadata( $attachment_path ); | |
if( 'image/jpeg' == $type ){ | |
if( $metadata ) { | |
$exif_data = array( | |
'aperture' => 'Aperture', | |
'camera' => 'Camera', | |
'created_timestamp' => 'Timestamp', | |
'focal_length' => 'Focal Lenght', | |
'iso' => 'ISO', | |
'shutter_speed' => 'Exposure Time', | |
'orientation' => 'Orientation' ); | |
foreach ( $exif_data as $key => $value ) { | |
$exif = $metadata[$key]; | |
$form_fields[$key] = array( | |
'value' => $exif ? $exif : '', | |
'label' => __( $value ), | |
'input' => 'html', | |
'html' => "<input type='text' class='text' readonly='readonly' name='attachments[$post->ID][$exif]' value='" . $exif . "' /><br />" | |
); | |
} | |
} | |
} | |
return $form_fields; | |
} | |
add_filter( 'attachment_fields_to_edit', 'media_hacks_attachment_fields_to_edit', 10, 2 ); | |
/** | |
* Update attachment metadata | |
* | |
* @param int $post_ID Attachment ID. | |
*/ | |
function media_hacks_edit_attachment( $attachment_id ){ | |
if ( isset( $_REQUEST['attachments'][$attachment_id]['media_author'] ) ) { | |
$media_author = $_REQUEST['attachments'][$attachment_id]['media_author']; | |
update_post_meta( $attachment_id, 'media_author', $media_author ); | |
} | |
} | |
add_action( 'edit_attachment', 'media_hacks_edit_attachment' ); | |
/** | |
* Filters the post content. | |
* | |
* @param string $content Content of the current post. | |
*/ | |
function media_hacks_the_content( $content ){ | |
global $post; | |
if( is_attachment() && 'image/jpeg' == get_post_mime_type( $post->ID ) ) { | |
$fields = wp_get_attachment_metadata( $post->ID ); | |
$meta = $fields['image_meta']; | |
if( ! empty( $meta['camera'] ) ){ | |
$custom_content = " | |
<ul> | |
<li>Camera: {$meta['camera']}</li> | |
<li>Created timestamp: {$meta['created_timestamp']}</li> | |
<li>Aperture: {$meta['aperture']}</li> | |
<li>Focal length: {$meta['focal_length']}</li> | |
<li>ISO: {$meta['iso']}</li> | |
<li>Shutter speed: {$meta['shutter_speed']}</li> | |
<li>Orientation: {$meta['orientation']}</li> | |
</ul>"; | |
$content .= $custom_content; | |
} | |
} | |
return $content; | |
} | |
add_filter( 'the_content', 'media_hacks_the_content' ); | |
/** | |
* Registers post type arguments. | |
* | |
* @param array $args Array of arguments for a post type | |
* @param string $post_type Post type key | |
*/ | |
function media_hacks_register_post_type_args( $args, $post_type ){ | |
if( $post_type == 'attachment' ){ | |
$args['has_archive'] = true; | |
} | |
return $args; | |
} | |
add_filter( 'register_post_type_args', 'media_hacks_register_post_type_args', 10, 2 ); | |
/** | |
* Set custom query vars for WP_Query | |
* | |
* @param WP_Query &$this The WP_Query instance (passed by reference). | |
*/ | |
function media_hacks_pre_get_posts( $query ){ | |
if ( !is_admin() && $query->is_main_query() ) { | |
if( is_post_type_archive('attachment') ){ | |
$query->set('post_mime_type', 'image/jpeg'); | |
$query->set( 'post_status', 'inherit' ); | |
} | |
} | |
} | |
add_action( 'pre_get_posts', 'media_hacks_pre_get_posts' ); |
Hi, Can you help me please? I`ve tried a lot but i can not display the exif info on frontend on a spacific page and not on attachment post_typ.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
What does this media hack do?