ruta del tema en el archivo javascript

15

Necesito incluir la ruta a mi archivo de tema dentro de un archivo javascript. ¿Cómo voy a hacer esto? Ya he intentado:

var templateUrl = "<?php get_stylesheet_directory_uri(); ?>";

function LightboxOptions() {
  this.fileLoadingImage = "'"+templateUrl+"/img/loading.gif'";
  this.fileCloseImage = "'"+templateUrl+"/img/close.png'";
  this.resizeDuration = 700;
  this.fadeDuration = 500;
  this.labelImage = "Image";
  this.labelOf = "of";
}

Esto no me da el camino, sino que simplemente inserta en <?php get_stylesheet_directory_uri(); ?>lugar del camino real. ¿Algunas ideas? ¡Gracias por adelantado!

charlenemasters
fuente

Respuestas:

32

Lo que estás buscando es la función wp_localize_script .

Lo usas así cuando pones un script

wp_register_script( 'my-script', 'myscript_url' );
wp_enqueue_script( 'my-script' );
$translation_array = array( 'templateUrl' => get_stylesheet_directory_uri() );
//after wp_enqueue_script
wp_localize_script( 'my-script', 'object_name', $translation_array );

En su style.js, habrá:

var templateUrl = object_name.templateUrl;
...
david.binda
fuente
increíble. ¡trabajado como un encanto!
James Hall
6

Estas son las siguientes dos formas de agregar una ruta de tema en un archivo javascript.

1) Puede usar wp_localize_script () sugerido por wordpress en su archivo functions.php. Esto creará un objeto Javascript en el encabezado, que estará disponible para sus scripts en tiempo de ejecución.

Ejemplo:

wp_register_script('custom-js',get_stylesheet_directory_uri().'/js/custom.js',array(),NULL,true);
wp_enqueue_script('custom-js');

$wnm_custom = array( 'stylesheet_directory_uri' => get_stylesheet_directory_uri() );
wp_localize_script( 'custom-js', 'directory_uri', $wnm_custom );

y puede usar en su archivo js de la siguiente manera:

alert(directory_uri.stylesheet_directory_uri); 

2) Puede crear un fragmento de Javascript que guarde el uri del directorio de plantilla en una variable, y usarlo más tarde de la siguiente manera: Agregue este código en el archivo header.php antes del archivo js en el que desea usar esta ruta. Ejemplo:

<script type="text/javascript">
var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
</script>

y puede usar en su archivo js de la siguiente manera:

alert(stylesheet_directory_uri);
Vinod Dalvi
fuente
¡wp_localize funciona! También probé el segundo enfoque, pero no pude hacerlo funcionar. wp_localize works es probablemente una mejor práctica, ¿no?
charlenemasters
@charlenemasters para hacer que el segundo enfoque funcione en el orden de declarar variables y acceder a ellas es muy importante.
Vinod Dalvi
2
el segundo enfoque debe ser con el echofin de trabajar
Claudiu Creanga
@ClaudiuCreanga Gracias, debe hacerse eco: var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
ycc_swe
1

Puede localizar sus archivos javascript, lo que le brinda la oportunidad de generar una matriz javascript llena de valores definidos por PHP (como localización o directorios).

Si carga su canal de JavaScript wp_enqueue_scripto wp_register_scriptes fácil de configurar de la siguiente manera:

function localize_vars() {
    return array(
        'stylesheet_directory' => get_stylesheet_directory_uri()
    );
}

wp_enqueue_script( 'my_script', plugins_url( 'my_plugin/my_script.js' ), array( 'jquery' ) );
wp_localize_script( 'my_script', 'my_unique_name', localize_vars() );

Y en sus archivos javascript, puede llamar a estas variables por:

my_unique_name.stylesheet_directory
Mike Madern
fuente
1

Comencé a usar este pequeño método conveniente para obtener el directorio de temas de WordPress y almacenarlo como una variable global de JavaScript (todo desde un archivo javascript):

function getThemeDir() {
    var scripts = document.getElementsByTagName('script'),
        index = scripts.length - 1,
        myScript = scripts[index];

    return myScript.src.replace(/themes\/(.*?)\/(.*)/g, 'themes/$1');
}
themeDir = getThemeDir();

Esto solo funcionará si se cumplen las siguientes condiciones :

    1. Este fragmento se ejecuta a través de un archivo JavaScript externo, como este:

<script src="/wp-content/themes/themename/assets/app.js"></script>

    2. El archivo js reside en el directorio de temas de su sitio (o subdirectorio).

blizzrdof77
fuente
1

Así es como lo hice.

Coloque el archivo JavaScript y las imágenes en la carpeta de tema / activos

Y edite los siguientes archivos.

En functions.php

/* for javascript (only when using child theme) */
wp_enqueue_script('my-script', get_template_directory_uri() . '-child/assets/test.js');
wp_localize_script('my-script', 'myScript', array(
    'theme_directory' => get_template_directory_uri() 
));

En su archivo javascript

var url = myScript.theme_directory + '-child/assets/';
Takao Shibamoto
fuente
0

Si el archivo javascript se carga desde el panel de administración, puede usar esta función javascript para obtener la raíz de su instalación de WordPress.

function getHomeUrl() {
  var href = window.location.href;
  var index = href.indexOf('/wp-admin');
  var homeUrl = href.substring(0, index);
  return homeUrl;
}

Luego solo contacta el camino hacia tu tema como se muestra a continuación.

var myThemePath = getHomeUrl() + '/wp-content/themes/myTheme';
Jam Risser
fuente