Использование параметров PHP в слайдере Jquery
Так что я не уверен, что я упустил что-то очевидное в этом. (Я думаю, что это может быть связано с несовместимостью двух языков, поскольку, насколько я знаю, PHP интерпретируется на сервере?)… Хотя я довольно плохо знаком с PHP.
Я использую замечательные Jquery Plugin ResponsiveSlides на первой странице моего собственного сайта на основе WordPress. Это прекрасно работает с этим кодом:
$(".home-slides").responsiveSlides({
auto: true,
speed: 500,
pause: true,
timeout: 7000,
pager: true,
nav: true,
maxwidth: 1280,
namespace: "home-slides",
prevText: "",
nextText: "",
navContainer:".home-slides",
manualControls: "#home-tabs"
});
Тем не менее, я хочу иметь возможность позволить клиенту иметь некоторый контроль над плагином, используя настраиваемые поля на домашней странице в бэкэнде WordPress. Эти настраиваемые поля можно легко вызвать и правильно отобразить в предупреждении:
var speed = <?php echo the_field( "speed" ); ?>;
var timeout = <?php echo the_field( "timeout" ); ?>;
Однако, если я попытаюсь вставить их как переменные или напрямую с помощью приведенного выше PHP, мне не повезет. Самое близкое, что у меня есть:
$(".home-slides").responsiveSlides({
auto: true,
speed: <?php echo the_field( "speed" ); ?>,
pause: true,
timeout: <?php echo the_field( "timeout" ); ?>,
pager: true,
nav: true,
maxwidth: 1280,
namespace: "home-slides",
prevText: "",
nextText: "",
navContainer:".home-slides",
manualControls: "#home-tabs"
});
Который правильно отображается в источнике живой страницы (т.е. timeout: 7000
и т. д.), но ломает слайдер. Есть ли способ заставить это работать? Я что-то пропустил?
Спасибо вам всем!
РЕДАКТИРОВАТЬ:
Благодаря предложению Тома Крика, я могу правильно повторить сценарий. Это приводит к правильному сценарию в источнике живой страницы, но ползунок все еще не работает. Однако, если я скопирую тот же сценарий из исходного кода страницы в реальный файл и протестирую его, он отлично работает. По какой-то причине кажется, что браузер игнорирует скрипт при отображении PHP.
2 ответа
echo '<script type="text/javascript">
$(".home-slides").responsiveSlides({
auto: true,
speed: '. the_field("speed") .',
pause: true,
timeout: '. the_field("timeout") .',
pager: true,
nav: true,
maxwidth: 1280,
namespace: "home-slides",
prevText: "",
nextText: "",
navContainer:".home-slides",
manualControls: "#home-tabs"
});
</script>';
Чтобы включить плагины jQuery в WordPress, нужно поставить сценарии в правильном порядке (с wp_enqueue_scripts
) и передать наши пользовательские метаданные в файл JavaScript (с wp_localize_script
).
Простой пример, обратите внимание, что файлы JS находятся внутри подпапки плагина /my-plugin/js/
, MAIN-PLUGIN-FILE.js
соответствует файлам плагина jQuery (слайдер, плеер, галерея), добавить больше wp_register_script
по мере необходимости. И CUSTOM-CONFIG.js
файл содержит инициализацию плагина.
plugin.php
<?php
/**
* Plugin Name: (SO) Simple jQuery plugin enqueue
* Plugin URI: http://stackru.com/a/25531753/1287812
* Author: brasofilo
*/
class SO_25527828
{
private $plugin_url;
public function __construct()
{
$this->plugin_url = plugins_url( '/', __FILE__ );
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) );
}
public function enqueue()
{
# Enqueue only on specific places
# http://codex.wordpress.org/Conditional_Tags
if( !is_home() && !is_front_page() )
return;
# Can be anything from unheap.com
wp_register_script(
'main_plugin',
$this->plugin_url . 'js/MAIN-PLUGIN-FILE.js'
);
# You'll have to play with dependencies, on_footer and do separately wp_enqueue_script's
# to achieve the exact HTML that the jQ plugin requires
wp_enqueue_script(
'config_plugin',
$this->plugin_url . 'js/CUSTOM-CONFIG.js',
array( 'jquery', 'main_plugin' ), // dependencies
false, // version
true // on footer
);
# Pass PHP values to JS
wp_localize_script(
'config_plugin',
'my_cfg',
array(
'url' => $this->plugin_url, // To load stuff from the plugin's dir
'option' => get_option( 'my_option' ), // Your custom config values, simple value or full object
)
);
}
}
new SO_25527828();
CUSTOM-CONFIG.js
, my_cfg
var напечатан в заголовке и содержит значения, которые мы локализовали
jQuery(document).ready(function($)
{
console.dir(my_cfg);
});