modification de wp-admin / widgets.php

11

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:

entrez la description de l'image ici

Pour cela, nous devons changer le code HTML rendu par widgets.php (il ne suffit pas de changer le CSS). Comment procéderions-nous sans toucher au cœur?

Lea Cohen
la source
Où le panneau à partir duquel glisser les widgets serait-il placé avec l'approche ci-dessus?
sanchothefat
@sanchothefat dessous
Lea Cohen
Pourquoi ne pas aller de l'avant et soumettre un patch au noyau. Semble être une amélioration valable ... Ensuite, lors de l'enregistrement d'une barre latérale, un paramètre ajouté serait de spécifier un emplacement. Si aucun n'est spécifié, il suppose qu'il est structuré comme il l'est maintenant (à droite)
Taylor Dewey

Réponses:

7

Si vous mettez à niveau votre WordPress vers la version 3.3.1, ce que vous devez absolument faire, chaque zone de widget de l'administrateur dispose désormais d'un ID que vous pouvez utiliser pour cibler via CSS, ce qui devrait vraiment suffire. Voir http://core.trac.wordpress.org/ticket/18334 pour un exemple.

helenhousandi
la source
4

Je ne peux pas sortir la question de ma tête, mais je n'ai pas le temps pour une solution complète. Donc, je viens d'écrire mon idée ici, puis je fixerai une petite prime.

  • Il y a une action 'widgets_admin_page'au wp-admin/widgets.phpdessus de l'autre contenu. Vous pouvez placer une zone d'aperçu 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>';
    }

    Cela imprime 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 rendre l'aperçu 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 thème functions.php:

    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 par AJAX après que l'utilisateur a appuyé sur le bouton Enregistrer dans un widget.

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

fuxia
la source
merci d'y avoir pensé, @toscho! Je travaille actuellement sur d'autres projets, mais je devrai revenir sur celui-ci, et je vais vérifier votre solution et vous le faire savoir. Merci encore!
Lea Cohen
0

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

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

Norcross
la source