web-dev-qa-db-ja.com

編集なしでカスタム投稿にメディアを添付する

管理者が画像をアップロードできるように、カスタム投稿タイプ「ギャラリー」を作成しています(これらの画像は投稿に添付されます)。

問題は、この投稿タイプでは "エディタ"メタボックスが無効になっていることです。投稿と同じように、画像アップロードポップアップボックスを追加する方法が必要です。どうやってやるの?

それとも私自身のアップローダを作成する方が良いでしょうか?もしそうなら、どのように私は作成されている記事(ギャラリー)にアップロードされた画像を添付することができますか?

添付ファイルはどのように機能しますか?カスタム投稿タイプもありますか?

6
Alex

wp-admin/edit-form-advanced.phpの先頭に メディアアップローダーに関連すると思われる次のコードが表示されます。

if ( post_type_supports($post_type, 'editor') || post_type_supports($post_type, 'thumbnail') ) {
    add_thickbox();
    wp_enqueue_script('media-upload');
}

あなたはこれらを自分で追加する必要があります。 add_thickbox() はスクリプトとスタイルの両方をエンキューするので、print_stylesはスタイルを印刷するには遅すぎるので、必ずprint_scriptsにフックしてください。

add_action('admin_print_styles-post-new.php', 'wpa4016_add_media_upload_scripts');
add_action('admin_print_styles-post.php', 'wpa4016_add_media_upload_scripts');
function wpa4016_add_media_upload_scripts()
{
    if ($GLOBALS['post_type'] == 'wpa4016') {
        add_thickbox();
        wp_enqueue_script('media-upload');
    }
}

今度はアップロードボタンを追加する必要があります。エディタを表示する関数 the_editor() にはパラメータ$media_buttonsがあり、trueに設定すると基本的にdo_action('media_buttons')が実行されます。これは順番に media_buttons() を呼び出し、各メディアタイプ(画像、ビデオ、オーディオなど)に対して_media_button()を呼び出します。だから私たちはこれを自分でやる!

add_action('edit_form_advanced', 'wpa4016_edit_form_advanced');
function wpa4016_edit_form_advanced()
{
    if ($GLOBALS['post_type'] == 'wpa4016') {
        echo _media_button(__('Add an Image'), 'images/media-button-image.gif?ver=20100531', 'image');
    }
}

添付ファイルは確かにattachment型のカスタム投稿で、それらのpost_parentは添付されている投稿に設定されています。画像には2つのメタフィールドがあります。_wp_attached_fileにはファイル名が含まれ、_wp_attachment_metadataには画像のEXIFデータを含む配列と、同じ画像の異なるサイズへのポインタが含まれます。 wp_insert_attachment() を使用してこれらを自分で作成することができますが、その場合はアップロードを自分で処理する必要があります。

7
Jan Fabry

上記の答えは非常に有用な答えですが、悲しいことに_media_button()関数はwp 3.5から非推奨です。

だから私はこのように上記のコードを変更しました:

このコード行を置き換えるecho _media_button(__('Add an Image'), 'images/media-button-image.gif?ver=20100531', 'image');

これらの行で:

$img = '<span class="wp-media-buttons-icon"></span> ';
       echo '<a href="#" class="button insert-media add_media" data-editor="' . esc_attr( $editor_id ) . '" title="' . esc_attr__( 'Add Media' ) . '">' . $img . __( 'Add Media' ) . '</a>';

そして最後に、私のギャラリーの投稿タイプにメディアボタンを追加するコードを使用しました。

add_action('admin_print_styles-post-new.php', 'gallery_add_media_upload_scripts');
add_action('admin_print_styles-post.php', 'gallery_add_media_upload_scripts');
function gallery_add_media_upload_scripts()
{
    if ($GLOBALS['post_type'] == 'gallery') {
        add_thickbox();
        wp_enqueue_script('media-upload');
    }
}

add_action('edit_form_advanced', 'gallery_edit_form_advanced');
function gallery_edit_form_advanced()
{
    if ($GLOBALS['post_type'] == 'gallery') {
        $img = '<span class="wp-media-buttons-icon"></span> ';
       echo '<a href="#" class="button insert-media add_media" data-editor="' . esc_attr( $editor_id ) . '" title="' . esc_attr__( 'Add Media' ) . '">' . $img . __( 'Add Media' ) . '</a>';
    }
}
1
Makarand Mane