Digamos que necesita generar código javascript o CSS que depende del contexto actual.
Por ejemplo, tiene un formulario en la página de inicio que dispara una solicitud ajax al enviarlo, y un formulario diferente en la página única. O, en el caso de CSS, desea crear un tema que permita a sus usuarios crear su propio diseño, cambiar colores, etc.
Soluciones que veo hasta ahora:
Incluya el código en la sección principal del documento (o al final en el caso de JS)
Haga una solicitud especial que muestre el código, como site.com?get_assets . Esto es lento porque WP se carga dos veces.
Almacénelo en archivos temporales durante un cierto período de tiempo y cárguelo desde allí. No es muy confiable para temas públicos o complementos.
Solo Javascript: hágalo estático colocándolo en un archivo normal que se carga cada vez. En este caso, deberías hacer que tu código maneje cualquier situación
¿Conoces a otros? ¿Qué camino deberías elegir?
fuente
Respuestas:
Una opción adicional, dependiendo del tipo de parámetros que necesita pasar. Llamemos (2a). También puede crear scripts PHP que generen dinámicamente
text/css
otext/javascript
notext/html
, y proporcionarles los datos que necesitan utilizando los parámetros GET en lugar de cargar WordPress. Por supuesto, esto solo funciona si necesita pasar un número relativamente pequeño de parámetros relativamente compactos. Entonces, por ejemplo, digamos que necesita pasar solo la URL de una publicación o el directorio de un archivo o similar, puede hacer algo como esto:En header.php:
En fancy-js.php:
etc.
Pero esto solo le permite acceder a los datos directamente pasados en los parámetros GET; y solo funcionará si la cantidad de cosas que necesita pasar es relativamente pequeña, y la representación de esas cosas es relativamente compacta. (Básicamente, un puñado de cadenas o valores numéricos: un nombre de usuario, digamos o un directorio; no una lista de todas las publicaciones recientes de un usuario o algo así).
En cuanto a cuál de estas opciones es la mejor, no lo sé; eso depende de su caso de uso. La opción (1) tiene el mérito de ser simple y claramente permitirle acceder a cualquier información de WordPress que pueda necesitar, sin el impacto en el rendimiento de cargar WordPress dos veces. Es casi seguro lo que debe hacer a menos que tenga una buena razón para no hacerlo (por ejemplo, debido al tamaño de la hoja de estilo o script que necesita usar).
Si el tamaño se vuelve lo suficientemente grande como para causar un problema en términos del peso de su página, puede probar (2) o (2a).
O bien, esta es probablemente la mejor idea, puede intentar separar las partes del guión o la hoja de estilo que realmente utilizan los datos dinámicos de las partes que pueden especificarse estáticamente. Di que tienes una hoja de estilo que necesita pasar un directorio de WordPress para establecer un parámetro de fondo para el elemento # my-fancy. Podrías poner todo esto en el elemento principal:
¿Pero por qué necesitarías hacer eso? Aquí solo hay una línea que depende de los datos de WordPress. Es mejor dividir solo las líneas que dependen de WordPress:
Coloque todo lo demás en una hoja de estilo estática que cargue con un elemento de enlace estándar (style.css o lo que sea):
Y deja que la cascada haga el trabajo.
Lo mismo ocurre con JavaScript: en lugar de hacer esto:
En su lugar, coloque algo como esto en el elemento principal:
Y luego suelte el resto en un archivo JavaScript estático, reescribiendo my_huge_function () y my_other_function () para hacer uso de los globales WordPressPostData.url y WordPressPostData.author.
40K de CSS o 40K de JS casi siempre se pueden dividir en <1K que realmente depende de datos dinámicos, y el resto, que se puede especificar en un archivo externo estático y luego recombinar usando la cascada (para CSS) o accesible globalmente variables (globales, elementos DOM o cualquier otro cubículo que prefiera, para JS).
fuente
El caso de CSS dinámico es bastante simple.
Simplemente cree una función que genere las definiciones dinámicas de CSS dentro de las
<style type="text/css"></style>
etiquetas y luego conecte esa funciónwp_print_styles
. p.ejO, digamos que tiene esquemas de color preconfigurados; puede poner en cola la hoja de estilo apropiada de acuerdo con la configuración actual del usuario:
Tenga en cuenta que, en este caso, la función se conecta
wp_enqueue_scripts
, ya que WordPress no tiene unwp_enqueue_styles
enlace de acción.fuente
Estaba pensando eso por un tiempo ahora. Tu pregunta me hace volver a ella. No estoy seguro de si es una buena idea o no, así que me gustaría que los expertos comentaran al respecto.
¿Qué sucede si escribo el archivo javascript / css a través de php cuando el administrador guarda los datos? Será una escritura única hasta que el usuario vuelva a cambiar el diseño (que el usuario no puede hacer con demasiada frecuencia). De esta forma, solo accedemos a la base de datos para la configuración del usuario una vez que el usuario guarda datos.
Después de escribir el archivo, será un archivo javascript / css normal, por lo que no tenemos que llamar a la base de datos cada vez que se carga el tema.
Una pregunta que necesita respuesta: ¿Qué sucederá cuando un visitante intente acceder al sitio en el instante en que php escriba el archivo?
Déjame saber lo que piensas.
fuente
wp-content/uploads
(el único directorio que se puede escribir desde el código WP), podría ser un enfoque viable. Creo que incluso WP Core usa esta técnica para un archivo js.Para pequeñas secuencias de comandos, que quizás no desee incluir en un archivo separado, por ejemplo, porque se generan dinámicamente, WordPress 4.5 y otras ofertas
wp_add_inline_script
. Esta función básicamente bloquea el script con otro script. Digamos, por ejemplo, que está desarrollando un tema y desea que su cliente pueda insertar sus propios scripts (como Google Analytics o AddThis) a través de la página de opciones. Ejemplo .Para los estilos hay
wp_add_inline_style
, que básicamente funciona igual. Lo usaría, por ejemplo, para recorrer todos sus mods de personalización y reunirlos en una cadena llamada$all_mods
, que luego agregaría de esta manera a su hoja de estilo principal:fuente
Cree un archivo JS.php dinámico y aliméntelo con query_vars importantes. Esas variables
$_GET
ayudarán al archivo a determinar el contexto y en él puede almacenar en caché y usarreadfile()
para futuras solicitudes ... haga lo que sea.Solo asegúrese de que el archivo cargue
wp-load.php
antes que cualquier otra cosa, para que tenga acceso a las funciones de WP. Use la ruta relativa a la carpeta actual(dirname(__FILE__))
o simplemente digg descendiendo en la estructura de la carpeta para ubicarlowp-load.php
independientemente de la ubicación del complemento.Código para buscar wp-load.php desde cualquier lugar
Saludos, Scribu!
PD : Para estructuras complicadas donde las carpetas no siguen la estructura decremental WP normal, los complementos principales pueden compartir información con archivos directamente accesibles. Un complemento padre que viene con un archivo PHP dinámico que procesa CSS / JS puede escribir en un archivo
realpath()
elwp-load.php
y el archivo independiente puede usar eso. Esto sería un problema para el 0.1% de los usuarios de WP. Creo que aquellos que mueven carpetas y no siguen la estructura normal saben lo que están haciendo y probablemente puedan agregar complementos PIMP que deben cargarsewp-load.php
directamente.fuente
wp-load.php
desde un tema o un archivo de complemento, ya que los directorioswp-content
y / oplugins
podrían estar en cualquier lugar en relación con el directorio raíz de WP. Recuerde WP_CONTENT_DIR y WP_PLUGINS_DIR.