web-dev-qa-db-ja.com

WordPress 3.5の添付ファイルウィンドウにカスタムフィールドを保存する

下のコードを使用してWP 3.5添付ファイルウィンドウにカスタムテキストフィールドを追加します(この質問から# WordPress 3.5で新しいMedia Uploaderを展開しています ...).

add_filter( 'attachment_fields_to_edit', 'xf_attachment_fields', 10, 2 );
function xf_attachment_fields( $fields, $post ) {
    $meta = get_post_meta($post->ID, 'meta_link', true);
    $fields['meta_link'] = array(
        'label' => 'More Media Management',
        'input' => 'text',
        'value' => $meta,
        // 'html' => '<div class="meta_link"><input type="text" /></div>',
        'show_in_edit' => true,
    );
    return $fields;
}

add_filter( 'attachment_fields_to_save', 'xa_update_attachment_meta', 4);
function xa_update_attachment_meta($attachment){
    global $post;
    update_post_meta($post->ID, 'meta_link', $attachment['attachments'][$post->ID]['meta_link']);
    return $attachment;
}

add_action('wp_ajax_save-attachment-compat', 'xa_media_xtra_fields', 0, 1);
function xa_media_xtra_fields() {
    $post_id = $_POST['id'];
    $meta = $_POST['attachments'][$post_id ]['meta_link'];
    update_post_meta($post_id , 'meta_link', $meta);
    clean_post_cache($post_id);
}

このコードはそこにフィールドを追加します、そしてまた私は私の添付ファイルのいずれかのために値を保存して後で検索することができます。しかし、問題はです。このコードでは、AJAXを使用して添付ファイルの値を節約することはできません。

添付ファイルの画像に対してこのカスタムフィールドに値を定義している場合、別の画像を選択すると、その画像に定義されている値が削除されます。ただし、投稿を更新してそのフィールドをもう一度確認すると、保存された値がそこにあります。

3
Faisal Khurshid

私は私の添付ファイルに作者情報を追加できるようにしたかったし、このコードをマージしました: http://www.billerickson.net/wordpress-add-custom-fields-media-gallery/ /あなたが参照するものと。 AJAXを介してモーダルウィンドウで完全に機能するようにしました。変更されたコードは次のとおりです。

/** 
 *作者名とURLフィールドをメディアアップローダーに追加する
 * 
 * @param $ form_fields配列、添付フォームに含めるフィールド
 。] * @param $ postオブジェクト、データベース内の添付ファイルレコード
 * @return $ form_fields、修正フォームフィールド
 */
 function admin_attachment_field_media_author_credit($ form_fields、$ post){[ $ form_fields ['media-author-name'] =配列(
 'label' => '著者名'、
 'input' => 'text '、
' value '=> get_post_meta($ post-> ID、' media_author_name '、true)
 //' help '=>'指定した場合、著者のクレジットが表示されます '
); 
 
 $ form_fields ['media-author-url'] = array(
 'label' => __( 'Author URL'、b()) 、
 'input' => 'text'、
 'value' => get_post_meta($ post-> ID、 'media_author_url'、true)
 // 'help' = > '提供された場合、著者のクレジットはリンクされます' 
); 
 
 return $ form_fields; 
 
} add_filter( 'attachment_fields_to_edit'、 'admin_attachment_field_media_author_credit'、10、2); 
 
/** 
 *保存メディアアップローダの著者名とURLの値
 * 
 * @param $ post配列、データベースの投稿データ
 * @param $ attachment配列、$ _POST形式の添付ファイルフィールド
 * @return $投稿の配列、変更された投稿データ
 */
 
関数admin_attachment_field_media_author_credit_save($ post、$ attachment){
 
 if(isset($ attachment ['media-author-name']))
 update_post_meta($ post ['ID']、 'media_author_name'、$ attachment ['media-author-name']) ; 
 
 if(isset($ attachment ['media-author-url']))
 update_post_meta($ post ['ID']、 'media_author_url'、$ attachment [ 'media-author-url']); 
 
 return $ post; 
 
} add_filter( 'attachment_fields_to_save'、 'admin_attachment_field_media_author_credit_save'、10、2); 
 
/** 
 * AJAX 
を使用して、作成者名とURLの値をメディアアップローダモーダルに保存する*/
 
関数admin_attachment_field_media_author_credit_ajax_save(){
 
 $ post_id = $ _POST ['id']; 
 
 if(isset($ _POST ['attachments'] [$ post_id] ['media-author-name']))
 update_post_meta($ post_id、 'media_author_name'、$ _POST ['添付ファイル'] [$ post_id] ['media-author-name']); 
(.set($ _POST ['attachments'] [$ post_id] ['media-author-url']))
 update_post_meta($ post_id、 'media_author_url'、$ _POST [ ''添付ファイル '] [$ post_id] ['メディア作成者のURL ']); 
 
 clean_post_cache($ post_id); 
 
} add_action(' wp_ajax_save -attachment-compat '、' admin_attachment_field_media_author_credit_ajax_save '、0、1); 

これが役に立ったことを願っています!

P.S次の課題は、文書にアップロードされた画像にこれを追加することです。 D.S.

5