it-swarm.com.de

Wie kann ich den Media Manager zwingen, gleichnamige Dateien zu überschreiben?

Ich habe ein Widget, das mit meinem Thema funktioniert und Bilder mit einem bestimmten Namen erwartet, slide1.png, slide2.png usw.

Wenn der Benutzer jedoch eigene Bilder mit den Namen slide1.png, slide2.png usw. in die Medienbibliothek hochlädt, anstatt die Bilder mit den neuen zu aktualisieren, ändert WordPress die Namen der Ersatzbilder in slide11.png, slide22. png usw

Kann ich in den Designoptionen einen Filter festlegen, der WP anweist, vorhandene Bilder zu überschreiben, ohne die Dateinamen zu ändern?

3
N2Mystic

Hier ist etwas, das ich mir ausgedacht habe und das hauptsächlich aus dem Plugin Overwrite Uploads stammt, aber ohne das zusätzliche Zeug

add_filter('wp_handle_upload_overrides','noneUniqueFilename');
function noneUniqueFilename($overrides){
    $overrides['test_form'] = false;
    $overrides['unique_filename_callback'] = 'nonUniqueFilenameCallback';
    return $overrides;
}

function nonUniqueFilenameCallback($directory, $name, $extension){
    $filename = $name . strtolower($extension);
    //remove old attachment
    removeOldAttach($filename);

    return $filename;
}

function removeOldAttach($filename){
    $arguments = array(
        'numberposts'   => -1,
        'meta_key'      => '_wp_attached_file',
        'meta_value'    => $filename,
        'post_type'     => 'attachment'
    );
    $Attachments_to_remove = get_posts($arguments);

    foreach($Attachments_to_remove as $a)
        wp_delete_attachment($a->ID, true);
}
3
Bainternet

Ich habe es geschafft, mit ein bisschen @ Bainternets Antwort zu arbeiten, ohne den Kern zu hacken.

Diese andere Frage und Antwort war ebenfalls hilfreich: query_posts: Wie kann ich alle 'meta_value' anzeigen, die ein bestimmtes Wort enthalten?

Die Funktion wp_unique_filename hat den Filter sanitize_file_name gerade am Anfang, so dass wir dort einbinden und die Überprüfung und Entfernung des doppelten Anhangs vornehmen können.

Ich habe grundlegende Localhost-Tests durchgeführt. Bitte testen Sie diese gründlich, bevor Sie sich auf einer Live-Site bewerben.

add_filter( 'sanitize_file_name', 'filename_filter_wpse_28439', 10, 1 );

function filename_filter_wpse_28439( $name ) 
{
    $args = array(
        'numberposts'   => -1,
        'post_type'     => 'attachment',
        'meta_query' => array(
                array( 
                    'key' => '_wp_attached_file',
                    'value' => $name,
                    'compare' => 'LIKE'
                )
            )
    );
    $attachments_to_remove = get_posts( $args );

    foreach( $attachments_to_remove as $attach )
        wp_delete_attachment( $attach->ID, true );

    return $name;
}
0
brasofilo