メディア編集ページに[今すぐ購入]リンクを追加しましたが、他の投稿タイプのようにそのデータを保存することはできません。メディア/添付ファイルの追加/編集/更新後にトリガーされる他のフックはありますか?
私はこの機能を使っています:
function update_attachment_extra_info( $post_id ) {
// code to update data
}
add_action( 'save_post', 'update_attachment_extra_info' );
しかし、このフックは起動されません。
これは、 Buy Now という名前のカスタムメディアフィールドを追加する例です。この例では、メディア編集画面(ajax以外)と同様に、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;
}