Прикрепление носителя к пользовательским сообщениям без редактора

Я создаю настраиваемый тип сообщения, «галерея», в котором администратор должен иметь возможность загружать изображения (эти изображения будут прикреплены к сообщению).

Дело в том, что мета-поле «редактор» отключено для этого типа сообщения. И мне нужен способ добавить всплывающее окно для загрузки изображений, как и сообщения. Как я могу это сделать?

или, может быть, лучше создать собственный загрузчик? если да, то как я могу прикрепить загруженные изображения к создаваемой почте (галерее)?

Как работают вложения? являются ли они обычными типами сообщений?

6 голосов | спросил Alex 13 62010vEurope/Moscow11bEurope/MoscowSat, 13 Nov 2010 22:27:08 +0300 2010, 22:27:08

2 ответа


7

Наверху 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 установите для сообщения, к которому они привязаны. Изображения имеют два мета-поля: _wp_attached_file содержит имя файла, _wp_attachment_metadata содержит массив с данными EXIF ​​изображения и указателями на разные размеры одного и того же изображения. Вы можете создать их самостоятельно, используя wp_insert_attachment() , но я считаю, что вам все равно придется обрабатывать загрузку.

ответил Jan Fabry 13 62010vEurope/Moscow11bEurope/MoscowSat, 13 Nov 2010 23:12:12 +0300 2010, 23:12:12
1

Выше ответ очень полезный ответ, но грустная вещь _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>';
    }
}
ответил Makarand Mane 3 Jpm1000000pmThu, 03 Jan 2013 16:49:54 +040013 2013, 16:49:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132