it-swarm.com.de

Wie ordne ich der Erweiterung mehrere MIME-Dateitypen zu?

wir können zusätzliche Dateitypen zuweisen, so dass WP das Hochladen dieser Dateitypen ermöglicht, wie zum Beispiel:

add_filter('mime_types', 'my_mimes');
function my_mimes($all)
{
    $all['Zip'] = 'application/Zip';
    return $all;
}

Aber ich habe eine Frage: Wie kann ich einer Dateierweiterung mehrere Dateitypen zuweisen? Beispiel: Zip extension - einige Zip-Dateien haben application/Zip mime, andere application/x-Zip (wie 7Zip).

Wie können wir also beide Mimes der Erweiterung Zip zuweisen?

4
T.Todua

Beachten Sie die strengere MIME-Typprüfung seit WP 5.0.1, bei der der Dateiinhalt und die Dateierweiterung übereinstimmen müssen. Siehe z. Diese aktuelle Frage zum Dateityp vtt.

Sekundärer MIME-Typ für eine bestimmte Dateierweiterung

Hier ist ein Vorschlag, wie Sie einen sekundären MIME-Typ für eine bestimmte Dateierweiterung unterstützen können. Nehmen wir als Beispiel .vtt. Der Kern nimmt den MIME-Typ von text/vtt für diese Dateierweiterung an, aber der echte MIME-Typ von finfo_file() kann manchmal text/plain sein. Die finfo_file() scheint etwas fehlerhaft zu sein. Wir können eine Unterstützung als sekundären MIME-Typ hinzufügen mit:

/**
 * Support for 'text/plain' as the secondary mime type of .vtt files,
 * in addition to the default 'text/vtt' support.
 */
add_filter( 'wp_check_filetype_and_ext', 'wpse323750_secondary_mime', 99, 4 );    

function wpse323750_secondary_mime( $check, $file, $filename, $mimes ) {
    if ( empty( $check['ext'] ) && empty( $check['type'] ) ) {
        // Adjust to your needs!
        $secondary_mime = [ 'vtt' => 'text/plain' ];

        // Run another check, but only for our secondary mime and not on core mime types.
        remove_filter( 'wp_check_filetype_and_ext', 'wpse323750_secondary_mime', 99, 4 );
        $check = wp_check_filetype_and_ext( $file, $filename, $secondary_mime );
        add_filter( 'wp_check_filetype_and_ext', 'wpse323750_secondary_mime', 99, 4 );
    }
    return $check;
}

Hier verwenden wir den wp_check_filetype_and_ext-Filter, um festzustellen, ob die Prüfung fehlgeschlagen ist. In diesem Fall führen wir wp_check_filetype_and_ext() erneut aus, jedoch nur auf unserem sekundären MIME-Typ. In der Zwischenzeit deaktivieren wir unseren Filter-Callback, um eine Endlosschleife zu vermeiden.

Mehrere Mime-Typen für eine bestimmte Dateierweiterung

Wenn wir mehr als zwei MIME-Typen für die .vtt-Dateien unterstützen müssen, können wir das obige Snippet folgendermaßen erweitern:

/**
 * Demo: Support for 'text/foo' and 'text/bar' mime types of .vtt files,
 * in addition to the default 'text/vtt' support.
 */
add_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );

function wpse323750_multi_mimes( $check, $file, $filename, $mimes ) {
    if ( empty( $check['ext'] ) && empty( $check['type'] ) ) {
        // Adjust to your needs!
        $multi_mimes = [ [ 'vtt' => 'text/foo' ], [ 'vtt' => 'text/bar' ] ];

        // Run new checks for our custom mime types and not on core mime types.
        foreach( $multi_mimes as $mime ) {
            remove_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );
            $check = wp_check_filetype_and_ext( $file, $filename, $mime );
            add_filter( 'wp_check_filetype_and_ext', 'wpse323750_multi_mimes', 99, 4 );
            if ( ! empty( $check['ext'] ) ||  ! empty( $check['type'] ) ) {
                return $check;
            }
        }
    }
    return $check;
}

Ich hoffe, Sie können es weiter testen und an Ihre Bedürfnisse anpassen.

4
birgire