web-dev-qa-db-fra.com

Ajouter un champ personnalisé à l'attribut d'image de pièce jointe multimédia dans l'éditeur de publication

J'ai le filtre suivant, mais je ne sais pas comment ajouter des attributs personnalisés au champ d'image, lors de la connexion d'un média à publier.

exemple

<img data-ext-link-title="" data-ext-link-url="">

functions.php

function pp_external_link_edit( $form_fields, $post ) {
    $form_fields['pp-external-link-title'] = array(
        'label' => 'External Link Title',
        'input' => 'text',
        'value' => get_post_meta( $post->ID, 'pp_external_link_title', true ),
        'helps' => 'Link for button at bottom of pretty photo modal',
    );

    $form_fields['pp-external-link-url'] = array(
        'label' => 'External Link URL',
        'input' => 'text',
        'value' => get_post_meta( $post->ID, 'pp_external_link_url', true ),
        'helps' => 'Link for button at bottom of pretty photo modal',
    );

    return $form_fields;
}

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

function pp_external_link_save( $post, $attachment ) {
    if( isset( $attachment['pp-external-link-title'] ) )
        update_post_meta( $post['ID'], 'pp_external_link_title', $attachment['pp-external-link-title']);

    if( isset( $attachment['pp-external-link-url'] ) )
        update_post_meta( $post['ID'], 'pp_external_link_url', $attachment['pp-external-link-url']);

    return $post;
}

add_filter( 'attachment_fields_to_save', 'pp_external_link_save', 10, 2 );
2
madphp

Je me demande si vous voulez modifier le code HTML de l'image insérée, avec les filtres image_send_to_editor ou get_image_tag?

Si c'est le cas, voici un exemple:

/**   
 * Add the data-ext-link-title and data-ext-link-url attributes to inserted images. 
 */

add_filter( 'image_send_to_editor',
    function( $html, $id, $caption, $title, $align, $url, $size, $alt )
    {    
        if( $id > 0 )
        {
            $ext_title = get_post_meta( $id, 'pp_external_link_title', true ); 
            $ext_url   = get_post_meta( $id, 'pp_external_link_url',   true ); 
            $data  = sprintf( ' data-ext-link-title="%s" ', esc_attr( $ext_title ) );
            $data .= sprintf( ' data-ext-link-url="%s" ',   esc_url( $ext_url )    );
            $html = str_replace( "<img src", "<img{$data}src", $html );
        }
        return $html;
    }
, 10, 8 );

Ici, je suppose que vous voulez des attributs data-ext-link-title ou data-ext-link-url vides, si les méta-valeurs correspondantes sont vides ou manquantes.

J'espère que vous pourrez adapter cela à vos besoins.

4
birgire

Je faisais quelque chose de similaire l’autre jour et je ne pouvais tout simplement pas faire que attachment_fields_to_save fonctionne, peu importe ce que j’ai essayé.

J'ai fini par utiliser le filtre edit_attachment à la place avec le code suivant:

public function action_edit_attachment( $attachment_id ) {
    # Check to make sure we were sent by the side of the media editor, not by the real edit form
    # - if the real edit form was used, action would be editpost instead
    if ( isset($_REQUEST['action']) ) {
        $our_fields = array(
            'pp-external-link-title' => 'text',
            'pp-external-link-url' => 'text'
        );
        foreach ( $our_fields as $field_name => $input_type ) {
            if ( isset( $_REQUEST['attachments'][$attachment_id]["{$field_name}"] ) ) {
                switch ( "{$input_type}" ) {
                    case 'text':
                        $value = stripcslashes($_REQUEST['attachments'][$attachment_id]["{$field_name}"]);
                        update_post_meta( $attachment_id, "{$field_name}", $value );
                        break;
                    default:
                        # Not implemented
                        break;
                }
            }
        }
    }
    return $attachment_id;
}
add_filter( 'edit_attachment', 'action_edit_attachment' );

Si vous souhaitez uniquement enregistrer à partir de l'écran du support, vous pouvez modifier la vérification _REQUEST

if ( isset($_REQUEST['action']) && 'save-attachment-compat' == "{$_REQUEST['action']}" ) {

Ou de l'éditeur de pièce jointe complète

if ( isset($_REQUEST['action']) && 'editpost' == "{$_REQUEST['action']}" ) {

Quoi qu'il en soit, je n’ai pas eu de chance avec l’ancienne méthode… et j’ai vu au moins quelques personnes qui avaient autant de difficulté que moi.

0
Privateer