web-dev-qa-db-fra.com

Bloquer metabox - Pas d'expansion, pas de déplacement

Je voudrais faire des métaboxes en tant qu'éléments fixes, en supprimant la fonction expand et la fonction glisser-déposer.

Des idées?

3
Lucas

La désinscription du script postbox semblait un peu radicale et, comme mentionné précédemment, le bouton "Modifier" de la page de liens permanents ne fonctionne plus comme prévu.

En fait, je suis arrivé à une autre méthode qui utilise les filtres de Wordpress et la fonctionnalité du plug-in triable jQuery UI permettant d'annuler le tri lorsqu'il est généré à partir d'éléments spécifiques via l'option cancel .

Le contexte

Wordpress 3.4.2 utilise jQuery UI 1.8.20 . Voici le code d'initialisation utilisé dans postbox.js (les options non pertinentes ont été supprimées):

a(".meta-box-sortables").sortable({
    ...
    connectWith: ".meta-box-sortables",
    items: ".postbox",
    handle: ".hndle",
    ...
});

Donc, le plugin crée une liste triable pour les éléments .postbox. Le tri est généré avec l'élément enfant .hndle.

Solution

  1. Ajout de classes aux éléments .postbox

    Wordpress fournit un crochet de filtre pour personnaliser les classes CSS ajoutées aux boîtes aux lettres:

    postbox_classes_{page}_{id}
    

    {page} est la page sur laquelle la metabox est affichée
    {id}is l'identifiant de metabox

    Donc, si j'ai une métabox avec l'id "_movie_details_metabox" appliquée pour un type d'article personnalisé appelé "movie_type", vous pouvez le faire:

    function metabox_not_sortable($classes) {
        $classes[] = 'not-sortable';
        return $classes;
    }
    add_filter('postbox_classes_movie_type__movie_details_metabox', 'metabox_not_sortable');
    


  2. Modifier jquery ui instance triable

    Ensuite, vous pouvez insérer un script de pied de page dans la zone d'administration pour modifier l'instance de tri afin d'annuler l'événement de tri s'il est émis via l'élément .hndle à partir d'une boîte aux lettres avec la classe css ajoutée not-sortable:

    <?php
    add_action('admin_print_footer_scripts','my_admin_print_footer_scripts',99);
    function my_admin_print_footer_scripts()
    {
        ?><script type="text/javascript">/* <![CDATA[ */
            jQuery(function($)
            {
                $(".meta-box-sortables")
                    // define the cancel option of sortable to ignore sortable element
                    // for boxes with '.not-sortable' css class
                    .sortable('option', 'cancel', '.not-sortable .hndle, :input, button')
                    // and then refresh the instance
                    .sortable('refresh');
            });
        /* ]]> */</script><?php
    }

Les boîtes aux lettres avec la classe css .not-sortable ne peuvent plus être triées, les autres le peuvent encore.

4
Didier Ghys

désinscrire le script 'postbox'. Placez les éléments suivants dans le functions.php de votre thème ou dans un fichier de plug-in.

function dereg() {
  wp_deregister_script('postbox');
}
add_action('admin_init','dereg');

J'ai fait un test très superficiel et cela arrête le glissement et le pliage, et je ne remarque rien cassé.

La petite flèche pliante apparaît toujours, mais css pas javascript. Si cela vous dérange, vous pouvez le tuer avec:

function acss() {
echo '<style type="text/css">.postbox:hover .handlediv,
.stuffbox:hover .handlediv {display: none;
}</script>';
}
add_action('admin_head','acss');
1
s_ha_dum