J'ai besoin de créer une ou plusieurs boîtes méta de message personnalisé pour mon type de message personnalisé "Diaporama" (ce type de message est déjà créé). Chaque métabox contiendra le contenu de chaque diapositive de diapositive et l'enregistrera dans les champs personnalisés correspondants. Chaque métabox doit contenir les champs suivants:
- Titre (champ de texte)
- Image (soit un champ de texte pour l'URL img ou, idéalement, une liste déroulante montrant les vignettes des images jointes attachées au message)
- Code d'intégration (zone de texte)
- Description (wysiwyg)
- Masquer la diapositive (case à cocher à utiliser pour masquer temporairement une diapositive sans la supprimer)
- Supprimer la diapositive (bouton qui supprime le contenu des champs meta post qui ont été remplis par cette diapositive)
Je voudrais également un bouton quelque part qui me permette d '"ajouter une diapositive" donc quand il est cliqué, il ajoute une autre méta-boîte personnalisée "diapositive" qui est un double de la première mais ajoute un numéro incrémentiel à chaque champ méta personnalisé. Je n'ai actuellement que 15 métaboxes et le modèle de diaporama est configuré de telle sorte que si seulement 5 des métaboxes sont remplies, seules 5 diapositives s'affichent.
Enfin, j'aimerais pouvoir réorganiser les diapositives, que ce soit par "glisser-déposer" ou par un autre champ de texte dans lequel je peux taper le numéro de commande.
Je l'ai obtenu presque là où j'en ai besoin avec le plugin "More Fields" et l'aide du code de Rarst. Avec le plugin "More Fields" j'ai les champs suivants dans chaque metabox:
- Titre (champ de texte)
- Image (Une liste déroulante des images jointes au message)
- Code d'intégration (zone de texte)
- Description (wysiwyg)
- Masquer la diapositive (case à cocher à utiliser pour masquer temporairement une diapositive sans la supprimer)
Voici une capture d'écran de la façon dont je l'ai configuré via le plugin "More Fields":
Le problème avec cela est qu'il n'y a aucun moyen de supprimer une diapositive une fois qu'elle est créée car "More Fields" n'utilise <?php delete_post_meta($post_id, $key, $value); ?>
nulle part. L'autre problème avec le plugin est qu'il est trop peu fiable et rompt fréquemment avec les mises à jour.
J'ai pu implémenter une solution similaire avec mes propres métaboxes personnalisées qui incluent:
- Titre (champ de texte)
- Image (champ de texte pour l'URL img)
- Code d'intégration (zone de texte)
- Description (zone de texte)
- Masquer la diapositive (case à cocher à utiliser pour masquer temporairement une diapositive sans la supprimer)
Avec cette implémentation, je n'arrive pas à faire fonctionner les multiples champs TinyMCE ou la liste déroulante d'image. Le code TinyMCE semble fonctionner jusqu'à ce que j'ajouter le code qui crée des copies supplémentaires de la première METABOX à quel point je reçois ce droit d'erreur au- dessus du champ où les boutons TinyMCE doivent être: Warning: array_push() [function.array-push]: First argument should be an array...
.
De plus, en ce moment, je compte sur mes rédacteurs pour savoir mettre soit une vidéo ou une image pour chaque diapositive et ça va, mais il peut être préférable d'avoir un bouton radio qui leur permet de choisir celle qui est la diapositive (probablement par défaut à image) qui est liée à une déclaration d'affichage conditionnelle dans le modèle de diaporama.
Je gère les téléchargements d'images via la boîte intégrée "Image vedette" dans la barre latérale, bien que cela ne me dérange pas une métabox personnalisée qui dit simplement "Télécharger des images" en haut du panneau d'écriture.
En fin de compte, je recherche un diaporama similaire à celui-ci: http://www.nytimes.com/slideshow/2010/08/10/science/20100810angier-1.html . Je veux que le mien puisse également avoir une vidéo comme contenu dans la diapositive au lieu d'une image. J'ai besoin d'un panneau d'administration intuitif et facile à utiliser pour mes rédacteurs (ils ne sont pas très avertis en technologie et ne sont pas fiables en utilisant du HTML et / ou des shortcodes). Au cas où cela ne serait pas clair dans l'exemple, chaque diapositive devrait générer une nouvelle page vue.
La réorganisation de Drag'n'Drop n'est pas une priorité élevée mais ce serait cool. J'ai trouvé un plugin qui gère très bien cela: SlideDeck . Malheureusement, le plugin ne convient pas à mes besoins, mais la façon dont ils gèrent la commande des diapositives est assez simple. C'est une métabox séparée dans la barre latérale qui vous permet de faire glisser les diapositives dans l'ordre que vous souhaitez. C'est aussi comme cela que vous ajoutez des diapositives, en cliquant sur un bouton "Ajouter une diapositive" qui ajoute une autre diapositive de métabox au panneau d'écriture. Voici une capture d'écran:
Vous pouvez également voir plus de captures d'écran de celui-ci en action dans le référentiel wordpress .
Voici tout mon code:
Les fonctions de configuration de mon type de publication de diaporama et de pagination de diaporama: http://loak.pastebin.com/g63Gf186
Le code original de DeluxeBloggingTips.com (DBT) sur lequel j'ai basé mes métaboxes: http://loak.pastebin.com/u9YTQrxf
La version du code DBT que j'ai modifiée pour me donner des versions incrémentielles du même métabox: http://loak.pastebin.com/WtxGdPrN
Une version modifiée du code DBT que Chris Burbridge a créée pour autoriser plusieurs instances de TinyMCE: http://loak.pastebin.com/Mqb3pKhx Avec ce code, les TinyMCE fonctionnent.
Ma modification du code de Burbridge qui essaie d'incorporer mon incrémentation et un champ qui vous permet de choisir l'image dans une liste déroulante de toutes les images jointes au message: http://loak.pastebin.com/xSuenJTK Dans cette tentative, le TinyMCE est cassé et la liste déroulante ne fonctionne pas.
Cela n'a probablement pas d'importance, mais juste au cas où vous vous poseriez la question, voici le code que j'utilise pour extraire le code intégré de la méta de publication personnalisée, le redimensionner et l'insérer dans la publication: http://loak.pastebin.com / n7pAzEAw
Il s'agit d'une version modifiée de la question d'origine pour refléter l'état actuel du projet et répond aux questions publiées dans les commentaires. Merci à Chris_O d' avoir mis la prime à ce sujet. Merci également à Rarst et Justin de m'avoir aidé avec beaucoup de choses sur le forum ThemeHybrid.com . J'ai passé des heures et des heures là-dessus et je suis coincé (j'ai passé quelques heures seul sur cette question). Toute aide serait grandement appréciée.
Réponses:
D'après l'apparence des choses, votre pari le plus sûr et l'itinéraire le plus simple serait de créer le plugin More Fields spécifiquement pour votre usage. Les deux plus grandes fonctionnalités dont j'ai besoin pour votre fork sont un champ "usine" et une interface glisser-déposer.
Champs multiples
Ma suggestion serait de regarder la classe Widget WordPress et de l'utiliser comme modèle pour votre fabrique de champs - en gros, emprunter la possibilité de créer plusieurs instances d'un champ une fois que le cadre est construit pour lui.
C'est le cœur du fonctionnement de plusieurs widgets dans une barre latérale:
WP_Widget
classe.delete
commande et définir leur positionnement de manière explicite via l'interface de glisser-déposer ApparenceGlisser déposer
Encore une fois, je vous suggère de vous inspirer du système de widgets WordPress. Nous avons déjà mis en place une interface de glisser-déposer assez intuitive, il serait donc assez facile de réutiliser une grande partie du même code ailleurs. Ou, si vous voulez vraiment devenir fantaisiste, vous pouvez implémenter votre propre système de glisser-déposer dans un méta-champ personnalisé séparé.
Ainsi, chaque diapositive serait définie par une boîte méta personnalisée liée à la publication. L'ordre des diapositives serait défini par une boîte de méta personnalisée séparée qui est également liée à la publication. Je recommanderais de soumettre des mises à jour de diapositives via AJAX afin que vous puissiez mettre à jour dynamiquement la méta-boîte d'ordre des diapositives en fonction des informations (cela évite d'avoir à appuyer manuellement sur "mise à jour" et d'attendre que la page se recharge avant de déplacer les choses).
jQuery UI a une grande interface " glissable " que vous pouvez facilement manipuler à vos fins dans cette méta-boîte personnalisée. La partie difficile n'est pas la construction de l'interface, elle obtient une communication cohérente et précise entre la méta-boîte et la collection de méta-boîtes de diapositives ailleurs sur la page.
En résumé
Ce que j'ai compris de votre message, c'est que vous avez une solution quelque peu réalisable:
La façon dont j'aborderais cela est d'abstraire le processus de création de méta personnalisé à une classe que je peux utiliser encore et encore pour créer de nouveaux champs de méta personnalisés. Ensuite, j'étendrais la classe pour initialiser deux types de métadonnées: une pour les diapositives, une pour la structure des diapositives. Je voudrais également intégrer à la méta-boîte de structure de diapositives la possibilité de créer dynamiquement de nouvelles méta-boîtes de diapositive (les méta-boîtes de diapositive hébergeraient leur propre action de «suppression»).
Le diaporama entier serait stocké non pas par les méta-boîtes de diapositives, mais par la méta-boîte de structure de diapositives dans un champ méta personnalisé pour la publication - la méta personnalisée serait un tableau dentelé, avec chacune des diapositives représentées comme des tableaux à l'intérieur - dans ordre . La personnalisation de l'ordre du diaporama dans la boîte de méta de structure réorganiserait le tableau et ré-enregistrerait la méta post. De cette façon, je n'ai qu'une seule méta-valeur à lire lorsque je veux accéder au diaporama.
Entre SlideDeck, More Fields et le code personnalisé que vous avez créé jusqu'à présent, vous avez déjà la plupart de votre solution en main ... il vous suffit de tout faire fonctionner ensemble en même temps. Je me concentrerais sur la suppression de l'implémentation racine avant d'ajouter les embellissements JavaScript - la création, la modification, la sauvegarde et la suppression dynamiques de diapositives sont plus importantes qu'un éditeur de texte enrichi, IMO. Obtenez cela en premier. Descendez ensuite le système de commande. Ensuite, vous pouvez vous concentrer sur le fonctionnement de plusieurs instances de TinyMCE sur la page.
la source
J'ai trouvé cela, c'est exactement ce que vous recherchez (je suis) -> http://pippinsplugins.com/drag-and-drop-order-for-plugin-options/
la source