管理者が画像をアップロードできるように、カスタム投稿タイプ「ギャラリー」を作成しています(これらの画像は投稿に添付されます)。
問題は、この投稿タイプでは "エディタ"メタボックスが無効になっていることです。投稿と同じように、画像アップロードポップアップボックスを追加する方法が必要です。どうやってやるの?
それとも私自身のアップローダを作成する方が良いでしょうか?もしそうなら、どのように私は作成されている記事(ギャラリー)にアップロードされた画像を添付することができますか?
添付ファイルはどのように機能しますか?カスタム投稿タイプもありますか?
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()
を使用してこれらを自分で作成することができますが、その場合はアップロードを自分で処理する必要があります。
上記の答えは非常に有用な答えですが、悲しいことに_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>';
}
}