web-dev-qa-db-fra.com

Joindre un média à des publications personnalisées sans éditeur

Je crée un type de message personnalisé, "galerie", dans lequel l'administrateur devrait pouvoir télécharger des images (ces images seraient jointes au message).

Le problème est que la méta-boîte "éditeur" est désactivée pour ce type de message. Et j’ai besoin d’un moyen d’ajouter la boîte de dialogue de téléchargement d’image, tout comme les publications. Comment puis je faire ça?

ou peut-être est-il préférable de créer mon propre uploader? Si oui, comment pourrais-je joindre les images téléchargées à la publication (galerie) en cours de création?

comment fonctionnent les pièces jointes? Sont-ils des types de post personnalisés aussi?

6
Alex

En haut de wp-admin/edit-form-advanced.php Je vois le code suivant qui semble lié à l'utilitaire de transfert de contenu multimédia:

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

Vous devrez les ajouter vous-même. add_thickbox() met en file d'attente un script et un style. Assurez-vous donc de vous connecter à print_styles, car print_scripts sera trop tard pour imprimer un style.

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');
    }
}

Nous devons maintenant ajouter les boutons de téléchargement. Je vois the_editor() , la fonction qui affiche l'éditeur, a un paramètre $media_buttons, et si nous définissons la valeur sur true, elle exécute fondamentalement do_action('media_buttons'). Ceci appelle à son tour media_buttons() , qui appelle _media_button() pour chaque type de support (image, vidéo, audio, ...). Donc, nous le faisons nous-mêmes!

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');
    }
}

Les pièces jointes sont en effet des publications personnalisées de type attachment, avec leur post_parent défini sur la publication à laquelle elles sont attachées. Les images ont deux champs méta: _wp_attached_file contient le nom du fichier, _wp_attachment_metadata contient un tableau avec des données EXIF ​​et des pointeurs vers des tailles différentes de la même image. Vous pouvez les créer vous-même, en utilisant wp_insert_attachment() , mais je crois que vous devez toujours gérer le téléchargement vous-même.

7
Jan Fabry

La réponse ci-dessus est très utile, mais ce qui est triste, c’est que la fonction _media_button () est obsolète pour wp 3.5

J'ai donc changé le code ci-dessus comme ceci:

Remplace cette ligne de code echo _media_button(__('Add an Image'), 'images/media-button-image.gif?ver=20100531', 'image');

Avec ces lignes:

$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>';

et enfin j'ai utilisé le code pour ajouter un bouton de média à mon type de post de galerie est comme ç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