Wie füge ich dem Medienbildschirm (Bild / Galerie) ein benutzerdefiniertes Feld hinzu?


7

Ich versuche, dem Bearbeitungsbildschirm für Bilder und Galerien ein benutzerdefiniertes Feld hinzuzufügen.

Ich bin mir bewusst, dass es hier ähnliche Fragen gibt, obwohl die Antworten entweder nicht mit der aktuellen Version funktionieren oder nur Felder zum Hochladen hinzufügen, während ein Feld in allen Bearbeitungsbildschirmen sichtbar sein muss (siehe unten).

Ich glaube, dafür müssen Sie sich mit backbone.js anlegen, da dies attachment_fields_to_editnur zum Upload-Bildschirm beiträgt.

Feld mit Anhang_Feldern_zu_Eedit hinzufügen

↑ Dies ist Upload Bild Bildschirm. Hier wird Style mit attachment_fields_to_editFilter hinzugefügt und my_field wird mit dem ACF-Plugin hinzugefügt.

Sie fehlen jedoch im Bearbeitungsbildschirm des Beitrags

Geben Sie hier die Bildbeschreibung ein

↑ Klicken Sie im aktuellen Beitrag auf Bearbeiten

Geben Sie hier die Bildbeschreibung ein

↑ Keine style & my_field Felder!

Die Frage

Wie füge ich Felder hinzu, um sie weiterhin auf dem Bearbeitungsbildschirm zu haben? Die Antwort umfasst im Idealfall das Hinzufügen von Feldern zum Galerie-Bearbeitungsbildschirm, wenn es sich um einen ähnlichen Vorgang handelt

Diese Frage ist wirklich wichtig für mich, daher werde ich ein Kopfgeld von 100 Wiederholungen hinzufügen, sobald es verfügbar ist.

Vielen Dank!


Haben Sie versucht, diese Antwort umzusetzen ?
Howdy_McGee

Funktioniert es auf dem Bearbeitungsbildschirm im Beitrag? Weil ich von hier aus viele Antworten ausprobiert habe und keine mit attachment_fields_to_editfunktioniert hat.
Runnick

Wofür werden die benutzerdefinierten Felder Style & my_field verwendet? Sollte dem Markup etwas hinzugefügt werden, wenn das Bild basierend auf diesen Werten in den Editor eingefügt wird? Es scheint , dass die Einstellungen in den Bild - Details Modal aus dem Markup des Bildes bearbeitet und gezogen werden soll , nicht von der Befestigungs Post selbst. Legen Sie beispielsweise die Beschriftung über das Feld Medien hinzufügen> Anhangsdetails> Beschriftung auf ein Bild fest und klicken Sie dann auf In Beitrag einfügen . Bearbeiten Sie nun das eingefügte Bild, indem Sie den Mauszeiger darüber halten und auf die Bleistiftschaltfläche klicken. Ändern Sie die Beschriftung und klicken Sie auf Aktualisieren.
Dave Romsey

Kehren Sie anschließend zur Medienbibliothek zurück und sehen Sie sich die Bildeinstellungen an. Beachten Sie, dass das Beschriftungsfeld nicht aktualisiert wurde. Diese Trennung zwischen den Modaldaten für Bilddetails und den Einstellungen für Anhangsdetails stellt ein Usability-Problem dar. Obwohl es möglich zu sein scheint, das zu tun, wonach Sie hier suchen, ist es möglicherweise keine gute Idee, dies zu tun.
Dave Romsey

1
Jetzt möchte ich auch fragen, was @DaveRomsey Sie gefragt hat. Wie genau nutzen Sie diese Felder? Wie werden sie sowohl im Backend als auch im Frontend verwendet? Es erfordert einige Arbeit, um das Bearbeitungsmodal zum Laufen zu bringen, aber es sollte durchaus möglich sein, da wir uns an die Aktion zum Speichern von Bildern anschließen können. Mal sehen, wie genau Sie diese Felder verwenden. Warum muss der Beitrag bearbeitet werden?
TurtleTread

Antworten:


2

Hier ist der Arbeitscode (funktioniert gut für mich), haben Sie das versucht? Fügen Sie einfach das Thema 'functions.php' hinzu und ändern Sie die benutzerdefinierten Feldnamen nach Bedarf.

// Funktion zum Hinzufügen eines benutzerdefinierten Medienfelds
Funktion custom_media_add_media_custom_field ($ form_fields, $ post) {
    $ field_value = get_post_meta ($ post-> ID, 'custom_media_style', true);

    $ form_fields ['custom_media_style'] = array (
        'value' => $ field_value? $ field_value: '',
        'label' => __ ('Style'),
        'Hilft' => __ ('Geben Sie Ihren Stil ein'),
        'input' => 'textarea'
    );

    return $ form_fields;
}}
add_filter ('attachment_fields_to_edit', 'custom_media_add_media_custom_field', null, 2);

// speichere dein benutzerdefiniertes Medienfeld
Funktion custom_media_save_attachment ($ attachment_id) {
    if (isset ($ _REQUEST ['Anhänge'] [$ Anhang_ID] ['custom_media_style'])) {
        $ custom_media_style = $ _REQUEST ['Anhang'] [$ Anhang_ID] ['custom_media_style'];
        update_post_meta ($ attachment_id, 'custom_media_style', $ custom_media_style);

    }}
}}
add_action ('edit_attachment', 'custom_media_save_attachment');

0

In meinen persönlichen Implementierungen dieser Funktionalität (ohne ACF) konnte ich dies auf diese Weise mit einer Kombination aus attachment_fields_to_editund erreichen attachment_fields_to_save. Ansicht GIST

Verwendungszweck:

add_action( 'after_setup_theme', 'thumbnail_meta' );

function thumbnail_meta(){
  Thumbnail_Meta::create( [
            'html_thumbnail_meta_id'          => [
              'label' => __( '<strong>Featured Settings:</strong>' ),
              'input' => 'html'
            ],
            'checkbox_thumbnail_meta_id'        => [
              'label' => __( 'Checkbox?' ),
              'input' => 'checkbox'
            ],
            'url_thumbnail_meta_id'      => [
              'label' => __( 'Link:' ),
              'type'  => 'url',
            ],
            'select_thumbnail_meta_id' => [
              'label'   => __( 'Display' ),
              'input'   => 'select',
              'options' => [
                'none'   => '-- None --',
                'top'    => 'Content Top',
                'right'  => 'Content Right',
                'left'   => 'Content Left',
                'bottom' => 'Content bottom'
              ]
            ]
          ] );
  }

Ich kann jedoch nicht sicher sagen, wo das Problem liegt, ohne Ihren Code zu sehen.


0

Hier ist ein Beispielcode zum Hinzufügen des Fotografennamens und der URL zum Medienbearbeitungsbildschirm.

function be_attachment_field_credit( $form_fields, $post ) {
    $form_fields['be-photographer-name'] = array(
        'label' => 'Photographer Name',
        'input' => 'text',
        'value' => get_post_meta( $post->ID, 'be_photographer_name', true ),
        'helps' => 'If provided, photo credit will be displayed',
    );

    $form_fields['be-photographer-url'] = array(
        'label' => 'Photographer URL',
        'input' => 'text',
        'value' => get_post_meta( $post->ID, 'be_photographer_url', true ),
        'helps' => 'If provided, photographer name will link here',
    );

    return $form_fields;
}

add_filter( 'attachment_fields_to_edit', 'be_attachment_field_credit', 10, 2 );

/**
 * Save values of Photographer Name and URL in media uploader
 *
 * @param $post array, the post data for database
 * @param $attachment array, attachment fields from $_POST form
 * @return $post array, modified post data
 */

function be_attachment_field_credit_save( $post, $attachment ) {
    if( isset( $attachment['be-photographer-name'] ) )
        update_post_meta( $post['ID'], 'be_photographer_name', $attachment['be-photographer-name'] );

    if( isset( $attachment['be-photographer-url'] ) )
        update_post_meta( $post['ID'], 'be_photographer_url', $attachment['be-photographer-url'] );

    return $post;
}

add_filter( 'attachment_fields_to_save', 'be_attachment_field_credit_save', 10, 2 );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.