J'ai ajouté un lien personnalisé "Acheter maintenant" sur la page d'édition du média, mais je ne suis pas en mesure de sauvegarder ces données comme d'autres types d'articles. Existe-t-il un autre crochet déclenché après l'ajout/la modification/la mise à jour d'un support/d'une pièce jointe?
J'utilise cette fonction:
function update_attachment_extra_info( $post_id ) {
// code to update data
}
add_action( 'save_post', 'update_attachment_extra_info' );
Mais ce crochet n'est pas déclenché.
Voici un exemple qui ajoute un champ multimédia personnalisé nommé Buy Now . Cet exemple enregistre la valeur du champ personnalisé sur l'écran de superposition de support via ajax, ainsi que l'écran d'édition de support (non ajax).
/**
* Add custom field to media
*/
add_filter( 'attachment_fields_to_edit', 'wpse256463_attachment_fields', 10, 2 );
function wpse256463_attachment_fields( $fields, $post ) {
$meta = get_post_meta( $post->ID, 'buy_now', true );
$fields['buy_now'] = array(
'label' => __( 'Buy Now', 'text-domain' ),
'input' => 'text',
'value' => $meta,
'show_in_edit' => true,
);
return $fields;
}
/**
* Update custom field within media overlay (via ajax)
*/
add_action( 'wp_ajax_save-attachment-compat', 'wpse256463_media_fields', 0, 1 );
function wpse256463_media_fields() {
$post_id = $_POST['id'];
$meta = $_POST['attachments'][ $post_id ]['buy_now'];
update_post_meta( $post_id , 'buy_now', $meta );
clean_post_cache( $post_id );
}
/**
* Update media custom field from edit media page (non ajax).
*/
add_action( 'edit_attachment', 'wpse256463_update_attachment_meta', 1 );
function wpse256463_update_attachment_meta( $post_id ) {
$buy_now = isset( $_POST['attachments'][ $post_id ]['buy_now'] ) ? $_POST['attachments'][ $post_id ]['buy_now'] : false;
update_post_meta( $post_id, 'buy_now', $buy_now );
return;
}