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