web-dev-qa-db-ja.com

カスタム投稿タイプ編集ページでMedia Uploader/Galleryからフィールドを削除する方法

この投稿 は、メディアアップローダーから不要なフィールドを削除する方法を示しています。それは素晴らしい仕事をします、しかし私はそれをカスタムポストタイプに制限したいです、そして、私はそれをどうやってするかについて理解することができないようです。次のコードを試しましたが、うまくいかないようです。

add_filter('attachment_fields_to_edit', 'remove_media_upload_fields', 10000, 2);
function remove_media_upload_fields( $form_fields, $post ) {
global $my_admin_page;
$screen = get_current_screen();
if ( 'slider' == $screen->post_type ){

unset( $form_fields['image-size'] );
unset( $form_fields['post_excerpt'] );
unset( $form_fields['url'] );
unset( $form_fields['image_url'] );
unset( $form_fields['align'] );

}

return $form_fields;
}

これを機能させる方法についてのアイデアはありますか?

ありがとう、

モシェ

1
user15927

現在の画面は、そのフィルタが実行されたときに設定されていないように見えるので、それを使用することはできません。また、$postは実際には投稿ではなく添付ファイルを参照しています - そのため、その投稿から投稿を取得することはできません。

だからソースコードを見て: http://core.trac.wordpress.org/browser/tags/3.3.2/wp-admin/includes/media.php

あなたが使っているフィルタはこれをたどってget_attachment_fields_to_editによって呼ばれます - 私たちはそれがget_media_itemによって呼ばれているのを見つけます。

get_media_timeを見ると、残念ながら投稿IDやオブジェクトは渡されません。しかし、それは持っています:

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

これは、投稿ID(つまり投稿タイプ)を取得する唯一の方法は、$_GETから取得することであることを示しています。そのときに定義されている$args配列と一緒にこれが渡されたなら、それはより良いでしょう。

そう:

add_filter('attachment_fields_to_edit', 'remove_media_upload_fields', 10000, 2);
function 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);

    if( 'slider' == $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;
}
3
Stephen Harris