web-dev-qa-db-fra.com

Quelle est la bonne façon de parler wp_enqueue_script/style?

Tout d’abord, laissez-moi vous dire comment je le fais actuellement. J'ai cette fonction. Son but est de prendre la chaîne d'un chemin de système de fichiers (/ root/web/dir/some/path/to/file) et de renvoyer l'URL équivalente (http://mydomain.com/some/path/to/file ). Pour que cette fonction fonctionne correctement, elle doit savoir où se trouve le répertoire Web racine (RWD) sur le système. Pour ce faire, supposons que $ _SERVER ['DOCUMENT_ROOT'] est le RWD.

function path_to_url($path)
{
    $path = str_replace('\\', '/', $path);
    $doc_root = str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']);

    return 'http://'.$_SERVER['HTTP_Host'].'/'.str_replace(' ', '%20', str_replace($doc_root, '', $path));
}

S'il vous plaît apprendre cette fonction et savoir ce qu'elle fait afin de comprendre de quoi je parle dans ce post.

Avec cette fonction, tout ce que j’aurais besoin de savoir pour inclure un script/une feuille de style sur ma page est son chemin. J'écrirais du code qui ressemble à quelque chose comme:

wp_enqueue_script('myscript', path_to_url(dirname(__FILE__).'/script.js'));

Cela a bien fonctionné. En fait, ça a tellement bien fonctionné que j'ai commencé à utiliser path_to_url dans de nombreux endroits de mon thème.

Il y a une raison pour laquelle cette solution ne fonctionne pas dans certaines circonstances. Certains sites d'hébergement partagé (bluehost) n'ont pas $ _SERVER ['DOCUMENT_ROOT'] défini sur le RWD comme je m'y attendais et le supposait. Bluehost semble l'avoir toujours réglé sur "/ usr/local/Apache/htdocs", ce qui ne correspond pas aux chemins que j'utilise dans PHP - "/ home1/demo/public_html/wp-content/themes/... ". Donc, je dois soit travailler avec les plus malheureux pour que $ _SERVER ['DOCUMENT_ROOT'] soit réglé sur quelque chose d'aussi incorrect (du moins, à ma connaissance, cela semble être incorrect) comme ci-dessus, ou je devrais trouver un autre moyen de faire ce que je veux/dois faire.

La solution serait en quelque sorte de corriger $ _SERVER ['DOCUMENT_ROOT']. Mais cela ne semble pas être une solution valable pour mes clients. Ils auraient besoin de soumettre un ticket d'assistance pour m'aviser que mon thème ne fonctionne pas. Ensuite, je devrais répondre avec un message sur la façon dont ils peuvent résoudre le problème. Mais avant que je puisse simplement leur répondre avec une solution, je devrai connaître leur RWD en quelque sorte. Ce serait une solution très lourde et demanderait plus de temps et d'effort, alors cela semble pratique.

Il me reste donc la deuxième solution: trouver un autre moyen de faire ce dont j'ai besoin . En écrivant cela, je me suis dit que je pourrais utiliser l'approche codée en dur, et que c'est peut-être la seule façon de résoudre ce problème.

wp_enqueue_script('script', get_bloginfo('template_url').'/lib/framework/panel/script.js');

Après toute mon explication, cela semble être une évidence. Mais la seule querelle que j'ai avec ceci est sa rigidité. Par exemple, si je décide de déplacer mon fichier script.js, je devrai éditer ce code, quoi qu'il arrive. Ce que j’aime dans la solution path_to_url ci-dessus, c’est que si je déplace le script.js et le fichier modèle PHP, rien ne se casse; tant que le fichier script.js reste dans le même dossier que le fichier modèle PHP. En fait, ce que je faisais avec la solution path_to_url, c’est que les choses sont à nouveau relatives, par rapport au fichier de modèle php!

Malheureusement, je me rends compte qu’il n’est pas pratique de s’attendre à ce qu’il existe une formule pour convertir tous les chemins de système de fichiers sur tous les systèmes en URL. Cela est dû au fait qu'il existe différentes configurations de serveur qui empêchent une formule de connaître le RWD dans un chemin. Par exemple, un serveur peut avoir une configuration dans laquelle wordpress est installé sous http://example.com/~demo/ et le RWD serait/home1/demo/public_html /. Il n’ya donc aucun moyen de récupérer le RWD avec __FILE__ avec ce type de configuration. Comment pourrais-je?

J'espère que vous avez trouvé cet article/cette question intéressant. Je vous laisse avec cette question: comment puis-je rendre wp_enqueue_script('script', get_bloginfo('template_url') . '/lib/framework/panel/script.js'); plus relatif et moins rigide?

Merci les gars. Paix!

2
Sam

Faites ceci en tête de votre functions.php:

define('PATH_TO_URL', get_bloginfo('template_url') . [path to your libraries, etc.]);

Ensuite, appelez simplement wp_enqueue_script('script', PATH_TO_URL . 'myscript.js'); ou similaire où vous le souhaitez. Si vous modifiez l'emplacement, modifiez simplement define () et il se mettra à jour partout.

Peasy facile.

3
ZaMoose