Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

This code works for me if I go to upload a file and choose the Gallery or Media Library tabs then it correctly hides elements on the page.

If I go to the From Computer or From URL tabs, nothing is hidden!

If I take out the if statement then it works. I can't see why it shouldn't be working on these 2 tabs as the URLs are the same apart from the tab parameter and the if statement is only checking the post_id:

Gallery tab works: /wp-admin/media-upload.php?post_id=4&type=image&tab=gallery

From Computer tab doesn't work: /wp-admin/media-upload.php?post_id=4&type=image&tab=type

Edit

On pages using my custom post type I am passing through the parameter of type=image to the media uploader. For 2 of the tabs my code within the if statement is not being executed:

2 tabs still showing all information

The other 2 tabs on the media uploader popup do what I want:

Code running correctly

If I have the if statement as:

if ($_GET['type'] == 'image')

Then it still doesnt trigger the code on From Computer or Gallery Tab so I can't rely on the querystring?

Any ideas?

share|improve this question
    
I'm not getting your goal... What are you referring as "Remove fields on media uploader on specific page only"? - In what cases are you expecting the fields to be removed? - Only in one specific page? Or for every post/page? Or only for image attachments? - - And this last doubt arises from your update... –  brasofilo May 29 '12 at 20:43
    
I've corrected the title and edited the question some more, sorry for the confusion! –  KevinUK May 30 '12 at 9:38
    
No problem, it's just a matter of making the Q&A better formed so it'll help future visitors, and at the same time don't fall in the "too localized" category. So, you only need this in your CPT? And no, the query string doesn't get passed from one tab to another... Somewhere I have a code that deals with this. Will check this option and grabbing a $post_type alternative. –  brasofilo May 30 '12 at 9:52
    
The query string type=image refers to a Custom Post Type, right? If so, the updated version of the code should work for this question... Just out of curiosity, how are you injecting this query string when calling the Media Upload iframe? –  brasofilo May 30 '12 at 10:54
    
type=image comes from my onclick event of the insert image button I have tb_show('', 'media-upload.php?post_id='+postId+'&type=image&TB_iframe=true'); The code all works now apart from on a normal post page, on the media library tab it runs the code within the if statement if a photo was uploaded from my custom page type because the parent post type will be movie. I can't see a way around that though. If only the From Computer tab would have access just like the media library tab does.. :( –  KevinUK May 30 '12 at 11:45
show 2 more comments

1 Answer 1

up vote 2 down vote accepted

Version 1

Deals with filtering based on Post ID

*From Computer* tab

we need to retrieve the $attachment_parent_id:

add_filter('attachment_fields_to_edit', 'wpse_53600_remove_media_upload_fields', 10000, 2);
function wpse_53600_remove_media_upload_fields( $form_fields, $post ) {
    $our_page_id = 4;
    $post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0;
    $attachment_parent_id = !empty($post->post_parent) ? $post->post_parent : 0;

    if( $post_id == $our_page_id || $attachment_parent_id == $our_page_id ){
        // Please, check VERSION 2 for full code
    }
    return $form_fields;
}

*From URL* tab

looks like another approach is necessary:

add_filter('type_url_form_media', 'wpse_53600_remove_from_url_fields', 10, 1);
function wpse_53600_remove_from_url_fields($html) {
    $our_page_id = 4;
    $post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0;

    if( $post_id != $our_page_id)
        return $html;

    // Used to hide the unwanted table rows
    $display_none = 'style="display:none"';

    $html = '';// Please, check VERSION 2 for full code

    return $html;
}



Version 2

Deals with filtering based on Post Type
/*
 * Remove extra fields from Media Upload tabs based on the Post Type
 * In this example, it is a CPT named 'movie', but it could be 'post' or 'page'
 *
 * http://wordpress.stackexchange.com/q/53600/12615
 */

add_filter('type_url_form_media', 'wpse_53600_remove_from_url_fields', 10, 1);
add_filter('attachment_fields_to_edit', 'wpse_53600_remove_media_upload_fields', 10000, 2);

/* FILTERS THE 'FROM COMPUTER' TAB */
function wpse_53600_remove_from_url_fields($html) {

    $post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0;
    $post_type = get_post_type($post_id);

    if( 'movie' != $post_type)
        return $html;

    // Used to hide the unwanted table rows
    $display_none = 'style="display:none"';

    $html = <<<HTML
     <p class="media-types">
        <label><input type="radio" name="media_type" value="image" id="image-only" checked='checked' /> Image</label> &nbsp; &nbsp; <label><input type="radio" name="media_type" value="generic" id="not-image" /> Audio, Video, or Other File</label>
    </p> 
    <table class="describe ">
        <tbody> 
            <tr> <th valign="top" scope="row" class="label" style="width:130px;"> <span class="alignleft"><label for="src">URL</label></span> <span class="alignright"><abbr id="status_img" title="required" class="required">*</abbr></span> </th> <td class="field"><input id="src" name="src" value="" type="text" aria-required="true" onblur="addExtImage.getImageData()" /></td> </tr>
            <tr> <th valign="top" scope="row" class="label"> <span class="alignleft"><label for="title">Title</label></span> <span class="alignright"><abbr title="required" class="required">*</abbr></span> </th> <td class="field"><input id="title" name="title" value="" type="text" aria-required="true" /></td> </tr>
            <tr class="not-image" {$display_none}><td></td><td><p class="help">Link text, e.g. &#8220;Ransom Demands (PDF)&#8221;</p></td></tr>
            <tr class="image-only" {$display_none}> <th valign="top" scope="row" class="label"> <span class="alignleft"><label for="alt">Alternate Text</label></span> </th> <td class="field"><input id="alt" name="alt" value="" type="text" aria-required="true" /> <p class="help">Alt text for the image, e.g. &#8220;The Mona Lisa&#8221;</p></td> </tr>
            <tr class="image-only" {$display_none}> <th valign="top" scope="row" class="label"> <span class="alignleft"><label for="caption">Image Caption</label></span> </th> <td class="field"><input id="caption" name="caption" value="" type="text" /></td> </tr>
            <tr class="align image-only" {$display_none}> <th valign="top" scope="row" class="label"><p><label for="align">Alignment</label></p></th> <td class="field"> <input name="align" id="align-none" value="none" onclick="addExtImage.align='align'+this.value" type="radio" checked="checked" /> <label for="align-none" class="align image-align-none-label">None</label> <input name="align" id="align-left" value="left" onclick="addExtImage.align='align'+this.value" type="radio" /> <label for="align-left" class="align image-align-left-label">Left</label> <input name="align" id="align-center" value="center" onclick="addExtImage.align='align'+this.value" type="radio" /> <label for="align-center" class="align image-align-center-label">Center</label> <input name="align" id="align-right" value="right" onclick="addExtImage.align='align'+this.value" type="radio" /> <label for="align-right" class="align image-align-right-label">Right</label> </td> </tr>
            <tr class="image-only" {$display_none}> <th valign="top" scope="row" class="label"> <span class="alignleft"><label for="url">Link Image To:</label></span> </th> <td class="field"><input id="url" name="url" value="" type="text" /><br /> <button type="button" class="button" value="" onclick="document.forms[0].url.value=null">None</button> <button type="button" class="button" value="" onclick="document.forms[0].url.value=document.forms[0].src.value">Link to image</button> <p class="help">Enter a link URL or click above for presets.</p></td> </tr>
            <tr class="image-only"> <td></td> <td> <input type="button" class="button" id="go_button" style="color:#bbb;" onclick="addExtImage.insert()" value="Insert into Post" /> </td> </tr>
            <tr class="not-image"> <td></td> <td> <input type="submit" name="insertonlybutton" id="insertonlybutton" class="button" value="Insert into Post" /> </td> </tr>
        </tbody>
    </table>
HTML;

    return $html;
}

/* FILTERS THE REST OF THE TABS */
function wpse_53600_remove_media_upload_fields( $form_fields, $post ) {

    $post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0;
    $post_type = get_post_type($post_id);

    $attachment_parent_id = !empty($post->post_parent) ? $post->post_parent : 0;
    $attachment_post_type = get_post_type($attachment_parent_id);

    /* 
     * This conditional will also filter the attachments in the Library tab that fall under the 'movie' CPT
     * Use the following to filter the Library tab: 
     *
     * $library_tab = ( isset($_GET['tab']) && 'library' == $_GET['tab']) ? true : false;
     *
     */ 
    if( 'movie' == $post_type || 'movie' == $attachment_post_type ){
        // remove unnecessary fields
        unset( $form_fields['image-size'] );
        unset( $form_fields['post_excerpt'] );
        unset( $form_fields['post_content'] );
        unset( $form_fields['url'] );
        unset( $form_fields['image_url'] );
        unset( $form_fields['align'] );
    }

    return $form_fields;
}
share|improve this answer
    
Thanks for this! What dynamic value should $our_page_id be though? $post_id is the page that has the link to bring up the popup media uploader so I can't think of any other variable. –  KevinUK May 29 '12 at 16:31
    
@KevinUK - well, in the question's title you refer to one specific page. 35 was the ID of the page (it could be a post) I was testing. I've updated the answer with the value you provide in the question's content. Is this it? –  brasofilo May 29 '12 at 16:39
    
I've updated my question. It's being called from any page so I was using the querystring but that doesn't seem to be called on the 2 tabs I have the problem with. –  KevinUK May 29 '12 at 20:25
add comment

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.