Pour un plug-in personnalisé sur lequel je travaille, j'ai ajouté un élément de case à cocher à l'éditeur de pièces jointes, à la manière de la réponse fournie ici:
Comment ajouter un élément de case à cocher à l'éditeur de pièces jointes avec un exemple
Ce que je voudrais faire est, en fonction de la valeur de cette case à cocher, modifier le comportement du bouton "Insérer dans le message". Par exemple, si la case à cocher n'est pas cochée, "Insérer dans Post" effectue l'action WordPress par défaut pour le type de fichier. Si la case est cochée, insérez plutôt mon shortcode de plugin. J'ai essayé ce qui suit (basé sur la réponse ici ):
function my_media_insert($html, $id, $caption, $title, $align, $url, $size, $alt) {
$orig_html = $html;
$attachment = get_post($id);
$my_meta = get_post_meta($post->ID, '_myMeta', true); // try to get checkbox value
$mime_type = $attachment->post_mime_type;
if (($mime_type == "application/pdf") && ($my_meta == "1")) {
$src = wp_get_attachment_url( $id );
$html = '[shortcode url="'.$src.'"]';
} else {
$html = $orig_html;
}
return $html;
}
add_filter('media_send_to_editor', 'my_media_insert', 20, 3);
... mais get_post_meta () ne semble jamais renvoyer de valeur avec laquelle travailler. (Si je modifie la valeur de $ html en $ my_meta à des fins de test, l'insertion est "vide".)
La version courte: Existe-t-il un moyen de définir des métadonnées sur une pièce jointe avec une case à cocher et de modifier la valeur de $ html envoyée à l'éditeur en réponse?
UPDATE: J'ai trouvé un exemple qui accomplit essentiellement ce que je veux faire (modifie le comportement du bouton), mais j'aimerais l'adapter pour ajouter une case à cocher sur les métadonnées de la pièce jointe, ce qui éviterait de le faire pour tous les fichiers en permanence. . De cette façon, le comportement peut être remplacé si nécessaire et je ne peux l'appliquer qu'à des types de fichiers spécifiques.
http://justingable.com/2008/10/03/modifying-wordpress-default-method-for-inserting-media/
Au cas où cela serait utile à quelqu'un d'autre, voici à quoi ressemblait mon code pour y parvenir. Je n'ai pas du tout sauvegardé les données de pièce jointe, selon la suggestion de tbuteler, mais plutôt que d'utiliser $ _REQUEST, j'ai découvert que je pouvais utiliser directement le tableau $ attachment:
function my_attachment_fields_to_edit( $form_fields, $post ) {
$supported_exts = supported_types(); // array of mime types to show checkbox for
if ( in_array( $post->post_mime_type, $supported_exts ) ) {
// file is supported, show fields
$use_sc = true; // check box by default (false not to, or use other criteria)
$checked = ( $use_sc ) ? 'checked' : '';
$form_fields['use_sc'] = array(
'label' => 'Use SC',
'input' => 'html',
'html' => "<input type='checkbox' {$checked} name='attachments[{$post->ID}][use_sc]' id='attachments[{$post->ID}][use_sc]' /> " . __("Insert shortcode instead of link", "txtdomain"),
'value' => $use_sc
);
}
return $form_fields;
}
function my_media_insert( $html, $id, $attachment ) {
if ( isset( $attachment['use_sc'] ) && $attachment['use_sc'] == "on" ) {
$output = '[shortcode url="'.$attachment['url'].'"]';
return $output;
} else {
return $html;
}
}
// add checkbox to attachment fields
add_filter( 'attachment_fields_to_edit', 'my_attachment_fields_to_edit', null, 2 );
// insert shortcode if checkbox checked, otherwise default (link to file)
add_filter( 'media_send_to_editor', 'my_media_insert', 20, 3 );
EDIT 1/2013: Cette solution ne fonctionne plus dans WordPress 3.5 +. La case à cocher sur l'écran de la pièce jointe envoie un AJAX demande de sauvegarde des métadonnées de pièce jointe. À la lumière de cela, il ne semble plus y avoir de moyen d'utiliser une case à cocher simplement comme un "drapeau" sur l'écran de pièce jointe. Si quelqu'un trouve une autre solution, je changerai volontiers la réponse approuvée!