Tell me more ×
WordPress Answers is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

When inserting media into a post, is there a way to change the default-view of the Media-Library from "All media items" to "Uploaded to this post"?

borrowed Screenshot

There is another thread where this question was extracted from: How to manage attachment relationships

share|improve this question
Have you tried turning off all other plugins, switch back to the default theme and then just activating the one from toscho? Could possible be a JS conflict. – kaiser Dec 15 '12 at 14:49

4 Answers

up vote 13 down vote accepted

There were two minor mistakes in my previous answer:

  1. I forgot to trigger the change event for the parent.
  2. I called the function on every AJAX call, making other selections impossible.

Here is the fixed code:

<?php
/**
 * Plugin Name: Pre-select post specific attachments
 */

add_action( 'admin_footer-post-new.php', 'wpse_76048_script' );
add_action( 'admin_footer-post.php', 'wpse_76048_script' );

function wpse_76048_script()
{
    ?>
<script>
jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
});
</script>
    <?php
}
share|improve this answer
Thank you very much, toscho! <br>The plugin-code you dropped here works like a charm for me now! (it would be nice if someone can convert this "answer" into a comment and set the status to answered) – div Dec 15 '12 at 15:20
You are the only one who can tick the answer check mark. You have to use the account you used for asking. I merged both accounts, you should be able to tick the check mark now. :) – toscho Dec 15 '12 at 15:22
Thank you again for your help! (: – div Dec 15 '12 at 15:27
1  
This very elegant code works when you click the Add Media button but not when you click the Set featured image. Is there a way to make it work there as well? – Christine Cooper Dec 15 '12 at 16:09
1  
This has a potential problem, it looks like you're selecting everything that has value=uploaded. Also, if you wanted to add javascript to initialization of every uploader, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...}); would be more appropriate. – NoBugs Jan 9 at 5:04
show 1 more comment

The only problem with the JS above that it toggles the select box to trigger the change after the page loads and after its already begun to download ALL MEDIA ITEMS. For my client on a slow T1 this locked things up as it downloaded both the ALL MEDIA TIMES and the UPLOADED TO THIS POST items together.

I had some help from the great Sewpafly who develops Post Thumbnail Editor Plugin. he shared a great piece of JS that prevents the load of ALL MEDIA ITEMS and forces it to load only images "UPLOADED TO THIS POST" by default.

The Code

File: myadmin.js

jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
  var oldPost = wp.media.view.MediaFrame.Post;
    wp.media.view.MediaFrame.Post = oldPost.extend({
        initialize: function() {
            oldPost.prototype.initialize.apply( this, arguments );
            this.states.get('insert').get('library').props.set('uploadedTo', wp.media.view.settings.post.id);
        }
    });
});

File: functions.php

add_action('admin_enqueue_scripts', 'add_admin_js');
function add_admin_js() {
    wp_enqueue_script('admin_js', get_bloginfo( 'template_directory' ) . '/js/admin.js');
}

The same code on GitHub: https://gist.github.com/fishnyc22/5593693

I dropped that into a JS file and called it in functions.php with the admin_enqueue_scripts. See GIST above for both the PHP and JS.

Works brilliantly. Hopefully the fine wordpress folks fix this in a upcoming update, but for now Sewpafly has the best solution I've found. Thanks again buddy.

I should note that I have just discovered that the viewer defaults to MEDIUM sized images which I had disabled (set to 0,0) since I was not using and preventing bloat. When medium size isn't available wordpress loads the FULL size image. I have since given in enabled the medium size.

share|improve this answer

@toscho Ah, I found a bug in your code. Please bare with me. Do the exact following to replicate the issue:

1) Open a draft post.

2) Click on Add Media button. Wait for the jQuery function to load.

3) On your left, click on the Set Featured Image link.

4) Now close the Media popup window and on the post edit page, click on the Set featured image link on the right side-bar.

5) You will see that the jQuery function will not work.

However, if you would have clicked on the Set featured image link first on post edit load, the function would work. Can you replicate this issue and possibly find a solution? Sorry again for posting this as an answer but this platform does not offer me a better option currently.

EDIT: Can someone please let toscho know about this. You can do this by adding a comment to his answer which I believe should give him a notification. I cannot write comments as I do not have enough reputation...

EDIT 2: If you want to desperately avoid this issue, you can remove the "Set Featured Image" link in the popup and force the user to use the sidebar link (like WP versions prior to 3.5). Use this filter that was introduced in WP 3.5:

add_filter( 'media_view_strings', 'cor_media_view_strings' );
/**
 * @see wp-includes|media.php
 */
function cor_media_view_strings( $strings ) {
    unset( $strings['setFeaturedImageTitle'] );
    return $strings;
}

As I said, this is a desperate fix until there is a solution posted for the main code.

share|improve this answer
I am aware of this, I just have no time to extend the plugin. – toscho Dec 16 '12 at 16:44
I understand, if you would to find the time in the near future to extend it, we would all be grateful. – Christine Cooper Dec 16 '12 at 16:47
I updated this answer with a "wordaround" for the desperate ones. toscho you can add this to your answer if you wish... – Christine Cooper Dec 16 '12 at 17:35

My solution is to edit core file media-views.js and pack them in madia-vews.min.js. There is corrections for wordpress 3.5.1, but you can do this and in version 3.5 if find corresponding positions in file.

Problem is in state machine of media library. It initializes by default in ALL state, because library obj or selected obj not filled so library use default values (query parameters) to initialize them.

So for v3.5.1 you need to insert this text in file:

Line 646

replace: 
this.set( 'library', media.query({ type: 'image' }) );
by:    
this.set( 'library', media.query({ type: 'image', uploadedTo: media.view.settings.post.id, orderby: 'menuOrder', order: 'ASC' }) ); // scrol edit 

Line 694

replace:
this.set( 'library', media.query({ type: 'image' }) );
by:
this.set( 'library', media.query({ type: 'image', uploadedTo: media.view.settings.post.id, orderby: 'menuOrder', order: 'ASC' }) ); // scrol edit

line 1601

add after:
var options = this.options;
this text:
this.options.library.uploadedTo = media.view.settings.post.id; // scrol edit
this.options.library.orderby = 'menuOrder'; // scrol edit
this.options.library.order = 'ASC'; // scrol edit

Then pack the library and replace media-vews.min.js. Backup old file.

You can see sources and download packed files in my repository. All corrections followed by "// scrol edit" comment.

If you find out how to detach this code to plugin or theme functions file, this will be great-).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.