How to choose specific image type or video from Wordpress media library by using Angular JavaScript? To achieve this we have to use wordpress media frames: wp.media.frames, which will help us to select or upload image/media to the wordpress library.
To use media frames we have to include it, go to your wordpress functions.php file and add this:
To use media frames we have to include it, go to your wordpress functions.php file and add this:
if(function_exists( 'wp_enqueue_media' )){
wp_enqueue_media();
}
Now we can use it in our code. So let's say this is gong to be triggered on a button click by calling function selectImage():
<md-button class="md-mini" ng-click="selectImage()" aria-label="Select icon" md-no-ink="true" md-ripple-size="full">Select image</md-button>
Just for fun let's create selected image preview:
<img id="imgPrev" ng-src="{{imagePreview}}" >
OK, now let's go to our controller and add this function to select ONLY png images from WP media frame:
app.controller('ThemeOptionsCtrl',['$scope','resContent','$rootScope',function($scope,resContent,$rootScope){
// set the default URL for image preview. resContent => resolveContent (data from route resolve, but it could be any data with valid img URL)
$scope.imagePreview = $scope.resContent.img[0].src;
// this function will be called after image is selected in wp media frame
$rootScope.updateImageURL = function(url,ID){
$scope.imagePreview = url;
$scope.imageID = ID; // can be usefull
}
// let's create function
$scope.selectImage = function(){
// If the media frame already exists, reopen it.
if ( frame ) {
frame.open();
return;
}
// Create the media frame.
var frame = wp.media.frames.items = wp.media({
title: 'Select PNG image', // media window title
library: {type: 'image/png'}, //select ONLY png image, it could be image/jpeg or image/jpg for images or 'video/MP4'
/* or combination of media types
library: {
type: [ 'video', 'image' ]
},
*/
multiple: false,
button: {text: 'Insert'}
});
frame.on(
'select',
function() {
var attachment = frame.state().get( 'selection' ).first();
// let's output different data for selected image or video
console.log("attachments");
console.log(attachment);
console.log(attachment.attributes.url);
console.log(attachment.attributes.orientation);
console.log(attachment.attributes.sizes);
console.log(attachment.id);
// lets call rootscope function to update image src
$rootScope.updateImageURL(attachment.attributes.url,attachment.attributes.id);
//$("#iconImg").attr('src',attachment.attributes.url);
}
);
// Finally, open the modal.
frame.open();
}
}]);
There you have it.
Happy coding, mofo!