web-dev-qa-db-ja.com

既存の添付ファイルがある投稿の[コンピュータから]メディアタブを削除しますか?

以前にアップロードされた少なくとも1つの添付ファイルを含む投稿の添付ファイルを編集する際に、[コンピュータから]タブを削除して[ギャラリー]タブにリダイレクトする方法を教えてください。

The "Add an Image" tabs

これは私の現在のコードです:

add_filter('media_upload_tabs','remove_medialibrary_tabs', 99);
function remove_medialibrary_tabs($tabs) {
    if ($post_id = (isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false)) {
        if (count(get_posts("post_type=attachment&post_parent={$post_id}"))>0) {
            // MY QUESTION
        }
    }

    unset($tabs['type_url']);
    unset($tabs['library']);

    return $tabs;
}

From Computerタブヘッダーを削除するには、その配列から typeキーの設定を解除します。 。しかし、これは(紛らわしく)タブの内容を削除しません。また、これはデフォルトのタブなので、そのタブヘッダーがなくなっても表示されます。

デフォルトのタブを変更するには、 media_upload_default_tabフィルタ にフックする必要があります。これは複数の場所で呼び出されますが、どの状況でどの場所が呼び出されるかについては調査しませんでした。そのため、添付ファイルのチェックを別の関数に移動して、コードを次のように書き換えました。

add_filter('media_upload_tabs','wpse13567_media_upload_tabs', 99);
function wpse13567_media_upload_tabs( $tabs ) {
    if ( wpse13567_post_has_attachments() ) {
        unset( $tabs['type'] );
    }
    unset( $tabs['type_url'] );
    unset( $tabs['library'] );

    return $tabs;
}

add_filter( 'media_upload_default_tab', 'wpse13567_media_upload_default_tab' );
function wpse13567_media_upload_default_tab( $tab )
{
    if ( wpse13567_post_has_attachments() ) {
        return 'gallery';
    }
    return $tab;
}

function wpse13567_post_has_attachments()
{
    static $post_has_attachments = null;
    if ( null === $post_has_attachments && $post_id = (isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false) ) {
        $post_has_attachments = count(get_posts("post_type=attachment&post_parent={$post_id}"))>0;
    }
    return $post_has_attachments;
}
5
Jan Fabry