web-dev-qa-db-fra.com

J'ai besoin de conseils sur la façon d'avoir une barre latérale basée sur la méta plutôt que sur la page

Je travaille sur un plugin qui permet à l'utilisateur de créer des "types de page/publication", de personnaliser le style de texte, puis de marquer une page/publication avec ce type. Tout cela fonctionne. Mon problème est que ce plugin doit également leur permettre d'attacher des widgets à ce type.

Je n'ai aucun moyen de savoir combien de "types" il y a à tout moment.

Le plugin fonctionne comme ceci:

  • L'utilisateur crée des types (chat, chien, souris)
  • L'utilisateur spécifie des éléments tels que les couleurs d'arrière-plan, les couleurs des liens, etc. pour un type
  • L'utilisateur spécifie les widgets pour ce type

Lorsque la page/publication est affichée, la page détecte si elle a un type. Si tel est le cas, il extrait toutes les données pertinentes de ce type.

Tout fonctionne PARFAIT.

Je sais que je dois enregistrer une barre latérale, mais je ne peux pas m'enregistrer pour chaque type car je ne sais pas combien il en existe et l'utilisateur peut créer et supprimer à leur guise.

Mon plan:

  • Enregistrer une barre latérale appelée "barre latérale personnalisée"
  • Créez une page qui imite la page "Widgets"
  • Autoriser l'utilisateur à ajouter des widgets dans la "barre latérale personnalisée"
  • Le plugin stocke les données de la barre latérale en fonction de l'identifiant du "type"

Je ne peux pas vraiment utiliser un autre plugin car la fonction sidebar doit se fondre dans mon plugin. Je ne suis même pas sûr que cela va marcher ou même par où commencer. Toute poussée dans la bonne direction serait géniale!

2
dcp3450

J'ai fini par créer simplement une barre latérale et tout élément qui y était placé, une liste déroulante a été ajoutée pour lui attribuer un emplacement spécial.

0
dcp3450
  1. Créer un encadré $type . '_sidebar'
  2. Enregistrez la barre latérale $type . '_sidebar' (par exemple dog_sidebar)
  3. Transmettez le type en tant qu'argument GET au widget.php (créez des entrées de menu ou quelque chose d'autre auquel vous créez un lien, par exemple wp-admin/widgets.php?sidebar_type=dog_sidebar)
  4. Filtrez toutes les barres latérales qui devraient et non être affichées. Vous pouvez utiliser cette fonction:

      global $wp_registered_sidebars;
    
      $type =filter_input( INPUT_GET, 'sidebar_type', FILTER_SANITIZE_STRIPPED );
    
      if ( empty( $type ) )
        return;
    
      if ( isset( $wp_registered_sidebars[ $type ] ) ) {
        $keep = array( $type => $wp_registered_sidebars[ $type ] );
        $wp_registered_sidebars = array_intersect_key( $keep, $wp_registered_sidebars );
      }
    
    }
    
    add_action( 'sidebar_admin_setup', 'filter_sidebars', 1, 0 );
    

Par exemple, dans Twenty Twelve, il y a trois barres latérales enregistrées (les ID de la barre latérale): sidebar-1, sidebar-2 et sidebar-3. Si vous allez maintenant à your-blogdoma.in/wp-admin/widgets.php?sidebar_type=sidebar-3, il ne reste que la troisième barre latérale (avec l'ID sidebar-3).

Si vous avez enregistré une barre latérale dog_sidebar et que vous visitez your-blogdoma.in/wp-admin/widgets.php?sidebar_type=dog_sidebar, la seule barre latérale visible est la "Barre latérale pour chien" (avec l'ID dog_sidebar).

Le plugin stocke les données de la barre latérale en fonction de l'identifiant du "type"

Il n'y a pas besoin de faire ça. Chaque barre latérale stocke ses propres données. Mais peut-être ai-je mal compris ce que vous tentiez de faire avec " stocke les données de la barre latérale ".

1
Ralf912