web-dev-qa-db-fra.com

Ajout d'une option à la section "Paramètres de la galerie"

Je souhaite ajouter une option aux "Paramètres de la galerie" (lorsque vous insérez une galerie dans un message).

Une fois, j'ai trouvé du code sur la façon de procéder, mais malheureusement, je ne le trouve plus. Je ne peux même pas me rappeler si c'était un crochet, mais je pense que c'était un truc hackish ;-)

THX

3
xsonic

Merci à l'indice avec le plugin multiples galeries de Niall Campbell et à cette question Comment ajouter un Colum personnalisé sur l'onglet Galerie de Thickbox Media? (d'où j'ai tiré le hook admin_head-media-upload-popup), j'ai pu terminer la tâche.

J'ai ajouté une option pour ajouter un attribut style au shortcode de la galerie.

option to select the style of the gallery

Voici le code complet:

add_action( 'admin_head-media-upload-popup', 'wpse_53803_script_enqueuer' );

function wpse_53803_script_enqueuer() 
{
    if( $_GET['tab'] == 'gallery' ) 
    {
        ?>
        <script type="text/javascript">
        jQuery(document).ready( function($) {

            // append the table row
            $('#gallery-settings table#basic tbody').append('<tr><th scope="row" class="label"><label><span class="alignleft">Style:</span></label></th><td class="field"><select id="style" name="style"><option value="standard">Standard</option><option value="slideshow">Slideshow</option></select></td></tr>');

            // set our vars
            var $style = '', $is_update = false;

            // Select parent editor, read existing gallery data 
            w = wpgallery.getWin();
            editor = w.tinymce.EditorManager.activeEditor;

            if (editor !== null) {
                gal = editor.selection.getNode();

                if (editor.dom.hasClass(gal, 'wpGallery')) {
                    $style = editor.dom.getAttrib(gal, 'title').match(/style=['"]([^'"]+)['"]/i);
                    var $is_update = true;
                    if ($style != null) {
                        $style = $style[1];
                        $('table#basic #style').find('option[value="' + $style + '"]').attr('selected','selected');
                    }
                } else {
                    $('#insert-gallery').show();
                    $('#update-gallery').hide();
                }
            }

            // remove standard onmousedown action
            $('#insert-gallery').attr('onmousedown', '');

            // Insert or update the actual shortcode
            $('#update-gallery, #insert-gallery, #save-all').mousedown(function() {
                var $styleAdd = '';
                if (editor !== null)
                    var orig_gallery = editor.dom.decode(editor.dom.getAttrib(gal, 'title'));
                else
                    var orig_gallery = '';

                // Check which which style is selected
                if($('table#basic #style').val() != 'standard') {
                    $styleAdd = ' style="slideshow"';
                }

                if ($(this).attr('id') == 'insert-gallery') {
                    w.send_to_editor('[gallery' + wpgallery.getSettings() + $styleAdd + ']');
                }

                // Update existing shortcode
                if ($is_update) {
                    if ($styleAdd != '' && orig_gallery.indexOf(' style=') == -1)
                        editor.dom.setAttrib(gal, 'title', orig_gallery + $styleAdd);
                    else if (orig_gallery.indexOf(' style=') != -1)
                        editor.dom.setAttrib(gal, 'title', orig_gallery.replace(' style="slideshow"', $styleAdd));
                    else
                        editor.dom.setAttrib(gal, 'title', orig_gallery.replace(' style="slideshow"', ''));
                }
            });

        });
        </script>
        <?php
    }
}

Il ajoute style="slideshow" si le style de diaporama est sélectionné, sinon il n’ajoute rien. Et il reconnaît le style défini si vous mettez à jour la galerie, de sorte que la bonne option soit sélectionnée.

Je vous remercie!

5
xsonic

hmmm vérifie le code du plugin Mutliple Galleries, il utilise une solution de contournement javascript en raison de l'absence d'un hook wordpress pour la fonction media_upload_gallery_form (dans wp-admin/includes). Il envoie ensuite un code court de galerie modifié à l'éditeur (avec quelques attributs supplémentaires).

Si vous ajoutez des attributs supplémentaires qui ne sont pas couverts par le shortcode de la galerie, vous devrez écrire votre propre fonction, mais il y a beaucoup d'informations disponibles pour le faire, je ne vais donc pas en parler.

4
Niall Campbell