Изменение JS-файла с данными из настроек плагина
У меня есть плагин, который среди прочего содержит JavaScript файл, требующий несколько пользовательских настроек. Как лучше всего передать эти настройки в JavaScript из параметров настроек плагина?
Другими словами, если я сделаю эти настройки частью страницы настроек, где пользователь может их ввести, как лучше всего получить эти значения в JavaScript? Нужно ли использовать что-то для добавления script тегов и установки значений через PHP при каждой загрузке страницы? Или лучше использовать cookie для этой цели?

Лучше использовать функции WordPress для этого, пример для мультиязычности:
add_action( 'admin_enqueue_scripts', 'add_scripts' );
function add_scripts($where) {
wp_localize_script( 'post2media', 'post2media_strings', $this->localize_vars() );
}
function localize_vars() {
$strings = array(
'btntext' => __( 'Связать с записью', INPSYDE_P2M_TEXTDOMAIN ),
'txtallnone' => __( 'Включить в галерею:', INPSYDE_P2M_TEXTDOMAIN ),
'txtall' => __( 'Все', INPSYDE_P2M_TEXTDOMAIN ),
'txtnone' => __( 'Ничего', INPSYDE_P2M_TEXTDOMAIN ),
'ttlcb' => __( 'Включить изображение в эту галерею', INPSYDE_P2M_TEXTDOMAIN )
);
return $strings;
}
Используйте это в js-файле:
jQuery(function ($) {
buttonaddfunc = function() {
btntext = post2media_strings.btntext;
reg = /\d+/;
$( '.savesend > .button' ) . each( function() {
inputname = $( this ) . attr( 'name' );
number = reg . exec( inputname );
$( this ) . after( '<input type="submit" value="' + btntext + '" name="link[' + number + ']" class="button">' );
} );
$( '.describe-toggle-on' ).unbind( 'click', buttonaddfunc );
};
$( '.describe-toggle-on' ).bind( 'click', buttonaddfunc );
} );
Также смотрите пост от Otto

Я не очень хорошо понял ваш код, но ссылка оказалась очень полезной.

Это действительно отлично, спасибо! Я давно задавался вопросом, как это сделать; большое спасибо! Я хотел спросить об этом в списке рассылки wp-hackers, но так и не собрался. Еще раз спасибо.

Вы можете посмотреть в моем последнем плагине post2media (http://wordpress.org/extend/plugins/post2media/) живой пример работы плагина; плагин содержит не так много исходного кода, и я думаю, это отлично подходит для чтения кода и понимания решения.

Вот более простой пример, который охватывает основы (в вашем примере слишком много всего): http://www.prelovac.com/vladimir/best-practice-for-adding-javascript-code-to-wordpress-plugin

Поскольку ссылка нерабочая, вот оригинальная статья: https://web.archive.org/web/20190422164736/http://ottopress.com/2010/dont-include-wp-load-please/ и еще одна очень полезная: https://web.archive.org/web/20190429195119/http://ottopress.com/2010/passing-parameters-from-php-to-javascripts-in-plugins

Есть несколько способов сделать это. Один из них я использовал ранее, другой — нет, но применял для XML-конфигурационных файлов.
Первый способ — включить переменные в тег script внутри шапки или подвала WordPress, перед тегом script, где подключается ваш JS-файл, например:
<script type="text/javascript">
var test = "<?php echo "hello world"; /* соответствующий PHP-код для вывода нужных данных */ ?>";
var slider_type = "<?php echo "nivo"; /* аналогично */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>
Другой вариант — включить JS внутри PHP-файла, который подключается через тег script.
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/javascripts.php"></script>
Внутри этого файла вы размещаете ваш JavaScript, и так как PHP будет его обрабатывать, вы сможете использовать PHP-вызовы аналогично первому способу, просто выводя необходимые данные или настройки. Важно отметить, что может потребоваться установить заголовки вывода как text/javascript
.
Лично я предпочитаю первый метод и использую его, когда есть настраиваемые пользователем параметры, влияющие на JavaScript-файлы.
