PHP-код в JS-файл на WordPress
В a .js-файл, мне нужно получить шаблон-каталог темы Wordpress, т. е. мне нужно получить возвращаемое значение <?php bloginfo('template_directory');?>
внутри js-файла.
идея что-то вроде:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";
как этого можно добиться? Каков стандартный (Wordpress) способ сделать это?
4 ответов
как ранее писал Эрик, расширение файла для 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
вместо.)
Wordpress предлагает wp_localize_script()
функция, которая позволяет передавать массив PHP в a .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>
расширение файла для файла javascript бессмысленно. Вы можете использовать PHP для вывода файла javascript так же, как и HTML-страницы. Включите файл JS как:
<script src="my_javascript_file.php"></script>
и затем вы можете использовать строку из вашего вопроса в вашем файле javascript:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";