Disons que vous devez générer du code javascript ou CSS qui dépend du contexte actuel.
Par exemple, vous avez un formulaire sur la page d'accueil qui déclenche une demande ajax lors de la soumission, et un autre formulaire sur la page unique. Ou dans le cas de CSS, vous souhaitez créer un thème qui permet à ses utilisateurs de créer leur propre mise en page, de changer les couleurs, etc.
Solutions que je vois jusqu'à présent:
Inclure le code dans la section tête du document (ou à la fin en cas de JS)
Faites une demande spéciale qui génère le code, comme site.com?get_assets . C'est lent car WP est chargé deux fois.
Stockez-le dans des fichiers temporaires pendant un certain temps et chargez-le à partir de là. Pas très fiable pour les thèmes ou plugins publics.
Javascript uniquement - rendez-le statique en le plaçant dans un fichier normal qui est chargé à chaque fois. Dans ce cas, vous devrez faire en sorte que votre code gère toute situation
Connaissez-vous les autres? Dans quelle direction iriez-vous?
la source
Réponses:
Une option supplémentaire, selon le type de paramètres que vous devez transmettre. Appelons-le (2a). Vous pouvez également créer des scripts PHP qui génèrent dynamiquement
text/css
outext/javascript
plutôttext/html
, et leur fournir les données dont ils ont besoin en utilisant les paramètres GET plutôt qu'en chargeant WordPress. Bien sûr, cela ne fonctionne que si vous devez transmettre un nombre relativement petit de paramètres relativement compacts. Ainsi, par exemple, supposons que vous ne deviez transmettre que l'URL d'une publication ou le répertoire d'un fichier ou similaire, vous pouvez faire quelque chose comme ceci:Dans header.php:
Dans fancy-js.php:
etc.
Mais cela vous permet uniquement d'accéder aux données directement transmises dans les paramètres GET; et cela ne fonctionnera que si le nombre de choses que vous devez transmettre est relativement petit et la représentation de ces choses relativement compacte. (Fondamentalement, une poignée de chaînes ou de valeurs numériques - un nom d'utilisateur, par exemple, ou un répertoire; pas une liste de tous les messages récents d'un utilisateur ou quelque chose comme ça.)
Quant à savoir laquelle de ces options est la meilleure - je ne sais pas; cela dépend de votre cas d'utilisation. L'option (1) a le mérite d'être simple et de vous permettre clairement d'accéder à toutes les données WordPress dont vous pourriez avoir besoin, sans les performances de chargement de WordPress deux fois. C'est presque certainement ce que vous devez faire, sauf si vous avez une bonne raison de ne pas le faire (par exemple, en raison de la taille de la feuille de style ou du script que vous devez utiliser).
Si la taille devient suffisamment grande pour causer un problème en termes de poids de votre page, vous pouvez essayer (2) ou (2a).
Ou bien - c'est probablement la meilleure idée - vous pouvez essayer de séparer les parties du script ou de la feuille de style qui utilisent réellement les données dynamiques des parties qui peuvent être spécifiées statiquement. Ssay vous avez une feuille de style qui doit passer un répertoire de WordPress afin de définir un paramètre d'arrière-plan pour l'élément # my-fancy. Vous pouvez mettre tout cela dans l'élément head:
Mais pourquoi auriez-vous besoin de faire cela? Il n'y a qu'une seule ligne ici qui dépend des données de WordPress. Mieux vaut ne séparer que les lignes qui dépendent de WordPress:
Mettez tout le reste dans une feuille de style statique que vous chargez avec un élément de lien standard (style.css ou autre):
Et laissez la cascade faire le travail.
Il en va de même pour JavaScript: plutôt que de faire ceci:
Au lieu de cela, mettez quelque chose comme ça dans l'élément head:
Ensuite, déposez le reste dans un fichier JavaScript statique, réécrivant my_huge_function () et my_other_function () pour utiliser les globaux WordPressPostData.url et WordPressPostData.author.
40K de CSS ou 40K de JS peuvent presque toujours être divisés en <1K qui dépend en fait des données dynamiques, et le reste, qui peut être spécifié dans un fichier externe statique et ensuite recombiné en utilisant soit la cascade (pour CSS) ou globalement accessible variables (globales, éléments DOM, ou tout autre cubby-hole que vous préférez, pour JS).
la source
Le cas CSS dynamique est assez simple.
Créez simplement une fonction qui génère les définitions CSS dynamiques à l'intérieur des
<style type="text/css"></style>
balises, puis connectez cette fonction àwp_print_styles
. par exempleOu, disons que vous avez des schémas de couleurs préconfigurés; vous pouvez mettre en file d'attente la feuille de style appropriée en fonction du paramètre utilisateur actuel:
Notez que, dans ce cas, la fonction s'accroche
wp_enqueue_scripts
, puisque WordPress n'a pas dewp_enqueue_styles
hook d'action.la source
Je pensais ça depuis un moment maintenant. Votre question me fait y revenir. Je ne suis pas sûr que ce soit une bonne idée ou non, alors j'aimerais que les experts commentent cela.
Et qu'est-ce qui se passerait si j'écris le javascript / fichier css via php lors de l' enregistrement des données d' administration. Ce sera une écriture unique jusqu'à ce que l'utilisateur modifie à nouveau la mise en page (ce que l'utilisateur ne peut pas faire trop souvent). De cette façon, nous accédons à la base de données pour les paramètres utilisateur une seule fois lorsque l'utilisateur enregistre des données.
Après avoir écrit le fichier, ce sera un fichier javascript / css normal, nous n'avons donc pas besoin d'appeler la base de données à chaque chargement du thème.
Une question à laquelle il faut répondre: que se passera-t-il lorsqu'un visiteur tentera d'accéder au site à l'instant où php écrit le fichier?
Laissez-moi savoir ce que vous pensez.
la source
wp-content/uploads
(le seul répertoire garanti être accessible en écriture à partir du code WP), cela pourrait être une approche viable. Je pense que même WP Core utilise cette technique pour un fichier js.Pour les petits morceaux de scripts, que vous ne voudrez peut-être pas inclure dans un fichier séparé, par exemple parce qu'ils sont générés dynamiquement, WordPress 4.5 et d'autres offres
wp_add_inline_script
. Cette fonction verrouille essentiellement le script dans un autre script. Disons, par exemple, que vous développez un thème et que vous souhaitez que votre client puisse insérer ses propres scripts (comme Google Analytics ou AddThis) via la page d'options. Exemple .Pour les styles, il y a
wp_add_inline_style
, qui fonctionne essentiellement de la même manière. Vous l'utiliseriez, par exemple, pour parcourir tous vos mods de personnalisation et les rassembler dans une chaîne appelée$all_mods
, que vous ajouteriez ensuite comme ceci à votre feuille de style principale:la source
Créez un fichier JS.php dynamique et alimentez-le en important query_vars. Ces variables
$_GET
aideront le fichier à déterminer le contexte et vous pourrez y mettre en cache et utiliserreadfile()
pour de futures requêtes ... faites tout.Assurez-vous simplement que le fichier se charge
wp-load.php
avant toute autre chose, afin d'avoir accès aux fonctions WP. Utilisez le chemin relatif vers le dossier en cours(dirname(__FILE__))
ou simplement digg descendant dans la structure du dossier pour localiserwp-load.php
indépendamment du placement du plugin.Code pour rechercher wp-load.php de n'importe où
À la vôtre, Scribu!
PS : Pour les structures compliquées où les dossiers ne suivent pas la structure décrémentielle WP normale, les plugins parents peuvent partager des informations avec des fichiers directement accessibles. Un plugin parent fourni avec un fichier PHP dynamique qui rend CSS / JS peut écrire dans un fichier
realpath()
lewp-load.php
et le fichier autonome peut l'utiliser. Ce serait un problème pour 0,1% des utilisateurs de WP. Je pense que ceux qui déplacent des dossiers et ne suivent pas la structure normale savent ce qu'ils font et peuvent probablement des plugins PIMP qui doivent être chargéswp-load.php
directement.la source
wp-load.php
partir d'un thème ou d'un fichier de plugin, car les répertoireswp-content
et / ouplugins
peuvent être n'importe où par rapport au répertoire racine WP. N'oubliez pas WP_CONTENT_DIR et WP_PLUGINS_DIR.