web-dev-qa-db-fra.com

Comment ajouter un champ personnalisé à l'écran média (image/galerie)?

J'essaie d'ajouter un champ personnalisé à l'écran d'édition d'images et de galeries.

Je suis conscient qu'il y a des questions similaires ici, bien que les réponses ne fonctionnent pas avec la version actuelle ou ajoutent un champ uniquement à upload screen alors que j'ai besoin d'un champ visible dans tous les edit screens (voir ci-dessous).

Pour cela, je pense que vous devrez jouer avec backbone.js car attachment_fields_to_edit ne fait que s'ajouter à l'écran de téléchargement.

Ajout de champ avec attachment_fields_to_edit

  

↑ Ceci est une image téléchargée. Ici Style est ajouté avec le filtre attachment_fields_to_edit, et my_field est ajouté avec le plugin ACF.

Mais ils manquent dans l'écran d'édition dans le post

 enter image description here 

↑ Cliquez éditer sur le post actuel

 enter image description here 

↑ Pas de style et champs my_field!

La question

Comment ajouter des champs pour les avoir toujours sur l'écran d'édition? Dans l’idéal, la réponse inclura l’ajout de champs à l’écran d’édition de la galerie s’il s’agit d’un processus similaire.

Cette question est très importante pour moi, donc je vais ajouter un bonus de 100 rep lorsqu'il sera disponible.

Merci!

7
Runnick

Voici le code de travail (fonctionne bien pour moi), avez-vous essayé cela? Ajoutez simplement au thème "functions.php" et modifiez les noms de champs personnalisés selon vos besoins.

// fonction permettant d'ajouter un champ de média personnalisé 
 function 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' ), 
 'help' => __ ('Entrez votre style'), 
 'input' => 'textarea' 
); 
 
 return $ form_fields; 
} 
 add_filter ('attachment_fields_to_edit', 'custom_media_add_media_custom_field', null, 2); 
 
 // enregistrez votre champ multimédia personnalisé 
 function custom_media_save_attachment ($ attachment_id) {
 if (isset ($ _REQUEST ['attachments']] [$ attachment_id] ['custom_media_style']) {{.____.] $ custom_media_style = $ _REQUEST [' attachments '] [$ attachment_id] [' custom_media_style ']; 
 update_post_meta ($ attachment_id,' custom_media_style ', $ custom_me dia_style); 
 
} 
} 
 add_action ('edit_attachment', 'custom_media_save_attachment');
2

Dans mes propres implémentations personnelles de cette fonctionnalité (sans ACF), c’est ainsi que j’ai pu l’atteindre en combinant attachment_fields_to_edit et attachment_fields_to_save. Voir Gist

Usage:

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'
              ]
            ]
          ] );
  }

Cependant - ne peut pas dire avec certitude quel est le problème sans consulter votre code.

0
Lawless

Voici un exemple de code permettant d’ajouter un nom de photographe et une URL dans l’écran d’édition multimédia.

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 );
0
Saran