it-swarm.com.de

Hinzufügen eines benutzerdefinierten Felds zum Image-Attribut für Medienanhänge im Post-Editor

Ich habe den folgenden Filter, weiß aber nicht, wie ich benutzerdefinierte Attribute zum Bildfeld hinzufügen kann, wenn ich Medien zum Posten anhänge.

beispiel

<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

Ich frage mich, ob Sie den HTML-Code des eingefügten Bildes mit den Filtern image_send_to_editor oder get_image_tag ändern möchten.

Wenn das der Fall ist, dann ist hier ein Beispiel:

/**   
 * 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 );

Hier gehe ich davon aus, dass Sie leere data-ext-link-title- oder data-ext-link-url-Attribute wünschen, wenn die entsprechenden Metawerte leer sind oder fehlen.

Hoffentlich können Sie dies an Ihre Bedürfnisse anpassen.

4
birgire

Ich habe neulich etwas Ähnliches gemacht und konnte Attachment_fields_to_save einfach nicht zum Arbeiten bringen, egal was ich versuchte.

Ich habe stattdessen den Filter edit_attachment zusammen mit folgendem Code verwendet:

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

Wenn Sie möchten, dass es nur vom Medienbildschirm aus gespeichert wird, können Sie die _REQUEST-Prüfung ändern

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

Oder aus dem Post-Editor für Anhänge

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

Jedenfalls hatte ich mit der älteren Methode kein Glück ... und sah, dass zumindest einige Leute genauso große Schwierigkeiten damit hatten wie ich.

0
Privateer