Fügen Sie dem Beschriftungs-Shortcode aus dem benutzerdefinierten Anhangsfeld ein Attribut hinzu

Ich möchte eine class zum Beschriftungs-Shortcode hinzufügen, der aus dem benutzerdefinierten Anhangsfeld gezogen wurde. Ich füge das Feld über:

function add_img_class( $form_fields, $post ) { $form_fields['img_class_field'] = array( 'label' => __( 'Image class', 'text-domain' ), 'input' => 'text', 'value' => get_post_meta( $post->ID, 'img_class_field', true ) ); return $form_fields; } add_filter( 'attachment_fields_to_edit', 'add_img_class', 10, 2 ); function save_img_class( $post, $attachment ) { if( isset( $attachment['img_class_field'] ) ) update_post_meta( $post['ID'], 'img_class_field', $attachment['img_class_field']); return $post; } add_filter( 'attachment_fields_to_save', 'save_img_class', 10, 2 ); 

Wie füge ich dynamisch das “class” -Attribut mit dem Feldwert zum Untertitel shortcode hinzu?

  

Solutions Collecting From Web of "Fügen Sie dem Beschriftungs-Shortcode aus dem benutzerdefinierten Anhangsfeld ein Attribut hinzu"

Hier ist eine Lösung, die den shortcode_atts_{shortcode} -Filter nutzt, wobei caption in diesem Fall der shortcode ist.

Dies funktioniert, indem die Anhangs-ID aus $out['id'] dann der Wert der class über get_post_meta( $attachment_id, 'img_class_field', true ) .

Bei diesem Ansatz ist es nicht notwendig, die Ausgabe des Untertitel-Shortcodes im Editor zu ändern. Das Hinzufügen der benutzerdefinierten class erfolgt hinter den Kulissen. Es funktioniert auch weiterhin, wenn ein Benutzer dem Beschriftungs-Shortcode manuell ein classnattribut hinzugefügt hat.

 /** * Adds class to caption shortcode output via img_class_field attachment meta. * * @param array $out The output array of shortcode attributes. * @param array $pairs The supported attributes and their defaults. * @param array $atts The user defined shortcode attributes. * @param string $shortcode The shortcode name. */ add_filter( 'shortcode_atts_caption', 'wpse_shortcode_atts_caption', 10, 4 ); function wpse_shortcode_atts_caption( $out, $pairs, $atts, $shortcode ) { // Get the attachment id. It should be available via $out['id'], but // it will be in the format 'attachment_xxxx' where xxxx is the id. // We'll try to get the id portion and we'll bail if this doesn't work. $attachment_id = isset( $out['id'] ) && ( $out['id'] ) ? $out['id'] : false; $attachment_id = (int) preg_replace( '/^attachment_/', '', $attachment_id ); if ( ! $attachment_id ) { return $out; } // Get the custom image class and add it to the existing classes $extra_image_class = get_post_meta( $attachment_id, 'img_class_field', true ); if ( $extra_image_class ) { $spacer = isset( $out['class'] ) && ( $out['class'] ) ? ' ' : ''; $out['class'] .= esc_attr( $spacer . $extra_image_class ); } return $out; } 

Verwendung

Benutzerdefinierte classn wurden zu Anhangsmetadaten hinzugefügt (ich habe 2 als gutes Maß verwendet):

 some-class another-class 

Beispiel für nicht modifizierten Untertitel-Shortcode, der über Media-Modal hinzugefügt wurde:

 [caption id="attachment_2397" align="alignnone" width="480"] This is the caption![/caption] 

Beispielausgabe 1: ( Thema unterstützt HTML5 für Bildunterschriften):

 
This is the caption!

Beispielausgabe 2: (Das Thema unterstützt HTML5 für Untertitel nicht):

 

This is the caption!

Meine Idee dahinter wäre, einen benutzerdefinierten Feldaufruf innerhalb des Shortcodes selbst zu verwenden, dann einen Filter shortcode_atts _ {$ shortcode} hinzuzufügen, um das benutzerdefinierte Feld zu verarbeiten und es der class hinzuzufügen, um es zurückzugeben.

{shortcode} in diesem Fall eine caption denn das ist es, woran wir bauen.

 add_filter( 'shortcode_atts_caption', 'caption_custom_field_class' ); function caption_custom_field_class( $out, $pairs, $atts, $shortcode ) { if ( !empty( $atts['custom_field'] ) && get_post_meta( sanitize_text( $atts['custom_field'] ), $atts['id'], true ) ) { $out['class'] .= ( !empty( $out['class'] ) ? ' ' : '' ) . get_post_meta( sanitize_text( $atts['custom_field'] ), $atts['id'], true ); } } return $out; } 

Also, was wir tun, nutzt ein anderes variables Feld namens ‘custom_field’, um unseren benutzerdefinierten Feldnamen zu übergeben.

 [caption custom_field="mycustomfieldname"]