web-dev-qa-db-fra.com

changeur wp-admin/widgets.php

Nous voulons concevoir la page des widgets dans le panneau d'administration un peu différemment, principalement pour aider l'administrateur du site à comprendre où chaque widget apparaîtra sur le site:

enter image description here

Pour cela, nous devons changer le code HTML rendu par widgets.php (changer le fichier css ne suffit pas). Comment ferions-nous cela sans toucher au cœur?

11
Lea Cohen

Si vous mettez à jour votre WordPress vers la version 3.3.1, ce qui est absolument nécessaire, chaque zone de widget de l’administrateur possède désormais un identifiant que vous pouvez utiliser pour cibler via CSS, ce qui devrait suffire. Voir http://core.trac.wordpress.org/ticket/18334 pour un exemple.

7
helenhousandi

Je ne parviens pas à me débarrasser de la question, mais je n’ai pas le temps de trouver une solution complète. Donc, je viens d'écrire mon idée ici, alors je vais fixer une petite prime.

  • Il existe une action 'widgets_admin_page' dans wp-admin/widgets.php au-dessus de l'autre contenu. Vous pouvez placer une zone de prévisualisation ici.
    Exemple de code:

    add_action( 'widgets_admin_page', 'show_widget_preview' );
    function show_widget_preview()
    {
        $preview_widgets = $GLOBALS['wp_registered_sidebars'];
        unset ( $preview_widgets['wp_inactive_widgets'] );
    
        print '<div style="border:2px solid #ddf;padding:20px">'
        . '<pre>' . htmlspecialchars( print_r( $preview_widgets, TRUE ) ) . '</pre>'
        . '</div>';
    }
    

    Ceci affiche un tableau de toutes les barres latérales enregistrées. Vous devez parcourir toutes les barres latérales pour trouver les widgets enregistrés.

  • Pour que l'aperçu soit utile, vous avez besoin de deux fichiers: un modèle HTML et une feuille de style.
    J'utiliserais add_theme_support().
    Exemple de code pour le functions.php du thème:

    add_theme_support( 
        'widget_preview', 
        array ( 
            'template'   => get_stylesheet_directory() . '/widget-preview.php', 
            'stylesheet' => get_stylesheet_directory() . '/widget-preview.css' 
        ) 
    );
    
  • Dans show_widget_preview(), vous mettez en file d'attente la feuille de style et chargez le modèle. Rendez les barres latérales enregistrées dans les espaces réservés prédéfinis dans widget-preview.php.

  • Mettez à jour le modèle conformément à AJAX après que l'utilisateur a appuyé sur le bouton Enregistrer dans un widget.

  • Défis: Prendre en compte le mode d’accessibilité, les petites fenêtres et les conflits CSS. Afficher un message utile quand aucune barre latérale n'est enregistrée (descriptions de la barre latérale?). Que devrait-il se passer lorsqu'un utilisateur essaie de faire glisser un widget dans la zone d'aperçu? :)

4
fuxia

la réponse courte est que vous ne pouvez pas, non sans toucher le noyau.

cependant, vous pouvez définir la description de chaque zone de widget (le texte situé sous le titre de la zone de widget) dans la fonction register_sidebar.

0
Norcross