Si un complemento utiliza algún script (ejemplo destacado: jQuery UI Datepicker), pero no está satisfecho con la forma en que el script representa la salida, entonces hay dos posibilidades:
1. Anule el registro del script> Agregue su propia versión
Así que primero que había necesidad de comprobar el mango, y luego encontrar la prioridad y el gancho ( wp_enqueue_scripts
, login_enqueue_scripts
, etc.) ... Lo de siempre.
2. Cambie los parámetros del complemento jQuery
Normalmente, si el complemento no es basura, pasa a través de los parámetros de PHP a JS usando
wp_localize_script( $handle, $object_name, array(
// data
) );
Ahora, esta es una forma inteligente de agregar sus datos a un script JS, pero ... no se puede filtrar de manera predeterminada. Ni WP_Scripts
tampoco WP_Dependencies
ofrece ningún filtro que los usuarios puedan utilizar más tarde
Pregunta: ¿Cómo podemos filtrar los argumentos / parámetros que se mueven de PHP a Javascript usando
wp_localize_script
?
fuente
wp_localize_script()
: una matriz única o multidimensional .@toscho gran implementación. Probado y verdadero. Aquí hay una versión ligeramente modificada, que también pasa el $ handle y $ object_name para que pueda filtrar solo cuando sea necesario.
fuente
¡La respuesta aceptada es genial! Pero me encontré con un problema que Advanced Custom Fields dejó de funcionar en el back-end debido a un error de JavaScript. Después de excavar durante unas horas, llegué a la conclusión de que al objeto Filterable_Scripts le faltaban los archivos javascript registrados por el complemento ACF. No sé exactamente por qué hizo esto, pero he encontrado una solución adecuada para esto si te encuentras con el mismo problema.
La
$GLOBALS['wp_scripts']
afortunadamente, aún contenían las secuencias de comandos adecuados. Entonces hice lo siguiente enadd_action
:Debido a que el objeto contiene una matriz de todos los scripts registrados y los controladores también son las claves de la matriz, podría usar array_diff_key para determinar qué scripts faltaban en el objeto extendido y volver a agregarlos. Hice esto y no solo
$fscripts->registered = $GLOBALS['wp_scripts']->registered;
porque no quería sobrescribir ningún cambio realizado por el objeto extendido.
fuente
$acf_field_group = $GLOBALS['wp_scripts']->registered['acf-field-group'];
(tambiénacf-input
) y luego agregarlas nuevamente a la instancia de laWP_Scripts
etiqueta extendida :$GLOBALS['wp_scripts']->registered['acf-field-group'] = $acf_field_group
luego me di cuenta de que ACF solo está usando los scripts dentro de Admin y estoy solol10n
en frente, así que simplemente envolvió la acción y filtró en una!is_admin
prueba.