wake-up-neo.net

Filtern, um post_title nach dem Hochladen von Bildern zu ändern?

Wenn ich Bilder hochlade, setzt Wordpress 3.4.2 den Titel auf die Basis des Dateinamens, z. B. "DSCN1234" oder "IMG_1234". Ich möchte, dass der Titel leer bleibt.

Der Code, der den Titel während des Uploads festlegt, scheint in "wp-admin/includes/media.php" in der Funktion media_handle_upload() zu sein, hier:

// Construct the attachment array
$attachment = array_merge( array(
   'post_mime_type' => $type,
   'guid' => $url,
   'post_parent' => $post_id,
   'post_title' => $title,
   'post_content' => $content,
), $post_data );

Wenn ich es nur in 'post_title' => "", ändere, wird es behoben, aber ich verstehe, dass der Kerncode nicht geändert werden sollte.

Gibt es einen Filter, mit dem ich den Titel ändern kann, nachdem er vom Upload-Handler festgelegt wurde? Ich habe wp_handle_upload und wp_handle_upload_prefilter ausprobiert, aber sie gewähren mir keinen Zugriff auf die post_title-Daten.

Der Filter attachment_fields_to_edit gibt mir Zugriff auf post_title, wird jedoch beim Bearbeiten einer Galerie für jedes Bild ausgelöst. Ich möchte nur den post_title eines einzelnen Bildes unmittelbar nach dem Hochladen ändern. (Wenn der Benutzer den Titel anschließend manuell auf den Dateinamen setzt, möchte ich ihn nicht entfernen.) Weitere Ideen?


UPDATE: Nun, ich habe gerade festgestellt, dass der post_title bei jeder Aktualisierung der Galerie auf den Dateinamen zurückgesetzt wird (Bilder neu sortieren usw.). Und selbst wenn ich den attachment_fields_to_edit-Filter verwende, um den post_title zu löschen, bleibt er nicht erhalten Deaktiviert, da beim Klicken auf Änderungen speichern die Tatsache, dass das Feld Titel leer ist, anscheinend nicht gefällt, obwohl es sich um ein erforderliches Feld handelt (rotes Sternchen daneben). Andere Ideen geschätzt.

Vielen Dank!
Russell

2
Russell G

(Beantwortung meiner eigenen Frage mit Hilfe von @brasofilo)

Wordpress 3.5 verfügt über einen großartigen neuen Medienmanager, und für Bilder muss der Titel nicht mehr ausgefüllt werden. Außerdem wird der Titel nicht mehr automatisch ausgefüllt, wenn Bilder in einer Galerie neu organisiert werden. Beim Hochladen des Bilds, z. B. "DSCN1234", wird der Titel jedoch weiterhin mit dem Bilddateinamen gefüllt. Dies kann jedoch verhindert werden, indem der Datei functions.php in Ihrem Design der folgende Code hinzugefügt wird:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = '';
    wp_update_post( $the_post );
}

Nach dem Hochladen des Bildes ist der Titel leer, und dies bleibt auch dann so, wenn Sie ihn nicht speziell auf etwas festlegen - selbst wenn das Bild in Wordpress bearbeitet wird.

4
Russell G

Was getan werden könnte, ist der Titel aller Uploads auf "Unbenannt" zu setzen.

Filtern Sie dann the_title und geben Sie eine leere Zeichenfolge zurück, wenn der Titel des Anhangs dem Standard entspricht.

Die Grundidee ist:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
add_filter( 'the_title', 'wpse_70093_display_untitled', 10, 2 );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = 'Untitled';
    wp_update_post( $the_post );
}

function wpse_70093_display_untitled( $title, $id )
{
    if( 'attachment' != get_post_type( $id ) )
        return $title;

    if( is_admin() )
        return $title;

    if( !is_admin() && 'Untitled' == $title ) 
        return '';

    return $title;
}

[update]
Mir hat der Frontend-Ansatz gefehlt. Das Filtern von the_title funktioniert nur für die Seite attachment.php.

Die durch den Editor eingefügten Bilder müssen mit gefiltert werden :

add_filter('image_send_to_editor', 'wpse_53577_img_wrapper', 20, 8);

function wpse_53577_img_wrapper($html, $id, $caption, $title, $align, $url, $size, $alt) 
{
    /* Manipulate $html result */
    return $html;
}

Der [gallery] Shortcode muss mit post_gallery neu erstellt werden.

Andere Fälle müssen individuell behandelt werden.

0
brasofilo

Es gibt ein Plugin, das Sie für diesen Zweck verwenden könnten http://wordpress.org/extend/plugins/img-title-removal/ , das dieses Plugin verbergen würde der Titel überhaupt (nicht sicher, ob Sie dies erreichen wollen?)

0
mirage