この投稿 は、メディアアップローダーから不要なフィールドを削除する方法を示しています。それは素晴らしい仕事をします、しかし私はそれをカスタムポストタイプに制限したいです、そして、私はそれをどうやってするかについて理解することができないようです。次のコードを試しましたが、うまくいかないようです。
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;
}
これを機能させる方法についてのアイデアはありますか?
ありがとう、
モシェ
現在の画面は、そのフィルタが実行されたときに設定されていないように見えるので、それを使用することはできません。また、$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;
}