php внутри js-файла Wordpress - PullRequest
       8

php внутри js-файла Wordpress

7 голосов
/ 24 июля 2011

В .js-файле мне нужно получить каталог-шаблон темы Wordpress, т.е. мне нужно получить возвращаемое значение <?php bloginfo('template_directory');?> внутри js-файла.

Идеяэто что-то вроде:

var blogTemplateDir = "<?php bloginfo('template_directory');?>";

Как этого достичь?Каков стандартный (Wordpress) способ сделать это?

Ответы [ 4 ]

12 голосов
/ 15 апреля 2012

Wordpress предлагает функцию wp_localize_script(), которая позволяет передавать массив PHP в файл .js при регистрации в Wordpress.

Работает так

1) Зарегистрируйте ваш скрипт в Wordpress, используя wp_register_script () ; Создайте массив ваших параметров, которые вы хотите отправить в скрипт.

wp_enqueue_script('my-script','/path/to/script.js');

2) Создайте массив ваших параметров, которые вы хотите отправить в скрипт.

$params = array('foo' => 'bar','setting' => 123);

3) Вызовите wp_localize_script () и присвойте своим параметрам уникальное имя.

wp_localize_script( 'my-script', 'MyScriptParams', $params );

4) Вы можете получить доступ к переменным в JavaScript следующим образом:

<script>
alert(object_name.some_string);
</script>

Примечание: вам нужно использовать wp_enqueue_script (), когда вы хотите, чтобы Wordpress включил файл JavaScript в заголовок.

Собираем все вместе

<?php
$myPlugin = new MyPlugin();

//Add some JS to the admin section
add_action('admin_enqueue_scripts', array($myPlugin, 'adminJavaScript'));

class MyPlugin{

        public function adminJavaScript() {

        $settings = array(
            'foo' => 'bar',
            'setting' => 123
        );

        wp_register_script('myJavaScriptName', plugins_url('/myJavaScript.min.js', __FILE__));
        wp_localize_script('myJavaScriptName', 'settings', $settings); //pass any php settings to javascript
        wp_enqueue_script('myJavaScriptName'); //load the JavaScript file
    }
}
?>

<script>
    alert(settings.foo);
</script>
4 голосов
/ 24 июля 2011

Как ранее писал Эрик, расширение файла для JavaScript-файла не имеет смысла, так как в итоге все сводится к контенту.Столкнувшись с такой ситуацией во время разработки, я обнаружил, что мне нужно добавить в начало так называемого JavaScript-файла следующее:

<?php

   //Let's set the header straight
   header('Content-type: text/javascript');

   //Get the WP-specifics, so that we can use constants and what not
   $home_dir = preg_replace('^wp-content/plugins/[a-z0-9\-/]+^', '', getcwd());
   include($home_dir . 'wp-load.php');
?>

Это гарантирует, что вы получите определения в свой JavaScript-файлВы можете использовать приведенный выше пример и с темами (просто убедитесь, что вместо /plugins вместо /themes).

3 голосов
/ 24 июля 2011

Расширение файла для файла JavaScript не имеет смысла. Вы можете использовать PHP для вывода вашего файла JavaScript так же, как вы делаете HTML-страницы. Включить файл JS как:

<script src="my_javascript_file.php"></script>

И тогда вы можете использовать строку из вашего вопроса в вашем файле JavaScript:

var blogTemplateDir = "<?php bloginfo('template_directory');?>";
1 голос
/ 24 июля 2011

Оберните .js в файл .php и просто включите его в свой контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...