* Контекст
Хорошо, я новичок в разработке плагинов для WordPress и только начал разработку. Который в основном является плагином блога слайдера. Концепция очень проста. Пользователь может использовать шорткоды с параметрами, чтобы определить, какие сообщения и сколько сообщений будут отображаться. Там нет страницы настроек администратора для изменения внешнего вида слайдера, но я над этим поработаю. Пользователь должен использовать шорткод всякий раз, когда нужен слайдер.
Часть разработки также проста. Я проверяю параметры, которые пользователь передает через шорткод. Затем выполняется запрос, который возвращает массив сообщений, а затем отображает структуру. Очень просто.
* Проблема
Теперь я пытаюсь сделать параметры плагина более динамичными c (через шорткод), т.е. пользователь может контролировать, должен ли слайдер Автовоспроизведение или нет, l oop должен быть включен или нет, пауза при наведении, dots / nav hide или show et c. Я использую карусель сов для этого слайдера. Это означает, что мне нужно изменить атрибуты ползунка в файле javascript.
Основная идея c состоит в том, чтобы взять параметры из массива $ atts функции и передать его в файл javascript , Я знаю, что это можно сделать с помощью wp_localize_script
, но я не могу понять, как .
Вот мой код, чтобы прояснить ситуацию.
mainfile . php
add_shortcode( 'sp-slider', 'sp_slider_get_posts');
function sp_slider_get_posts( $atts ) {
$values = shortcode_atts( array(
'number' => '-1',
'category-id' => '', //DEFAULT VALUE null, WILL BE REPLACED ONCE USER DECLARES IN SHORTCODE
'category-name' => '',
'orderby' => '',
'order' => '',
'include-posts' => '',
'exclude-posts' => '',
'author-id' => '',
'author-name' => '',
'autoplay' => ''
), $atts );
if( !empty($values['number']) ||
!empty($values['category-id']) ||
!empty($values['category-name']) ||
!empty($values['orderby']) ||
!empty($values['order']) ||
!empty($values['include-posts']) ||
!empty($values['exclude-posts']) ||
!empty($values['author-id']) ||
!empty($values['author-name']) ||
!empty($values['autoplay'])) {
$args = array(
'numberposts' => $values['number'],
'cat' => $values['category-id'],
'category_name' => $values['category-name'],
'orderby' => $values['orderby'],
'order' => $values['order'],
'include' => $values['include-posts'],
'exclude' => $values['exclude-posts'],
'meta_key' => '',
'meta_value' => '',
'post_parent' => '',
'author' => $values['author-id'],
'author_name' => $values['author-name'],
'post_status' => 'publish',
'suppress_filters' => true,
'fields' => '',
);
$autoplay = $values['autoplay']; //GET AUTOPLAY VALUE. NO IDEA HOW TO USE IT. SO I TRIED THE FOLLOWING
// THE FOLLOWING FUNCTION HOLDS THE wp_localize_script FUNCTION, WHICH IS DECLARED AT THE END OF THIS CURRENT FUNCTION sp_slider_get_posts.
sp_carousel_settings($autoplay); //PASSING THE USER INPUT
$posts_array = get_posts( $args );
if( !empty( $posts_array ) ) {
$output = "<div class='sp-slider-wrapper'>";
$output .= '<div class="owl-carousel owl-theme">';
foreach( $posts_array as $post ) {
include( "includes/inc_slider_section.php"); // ALL THE SLIDER STRUCTURE IS IN DIFFERENT FILE WHICH IS INCLUDED HERE
}
$output .="</div>";
$output .="</div>";
}
return $output;
}
}
// HERE IS sp_carousel_settings() DECLARATION
function sp_carousel_settings( $autoplay ) {
$carousel_settings = array( 'autoplay' => $autoplay);
wp_localize_script( 'sp_main_js', 'carousel_settings', $carousel_settings );
}
add_action( 'wp_enqueue_scripts', 'sp_carousel_settings' );
main js. js
$(document).ready(function() {
...
...
var autoplay= '';
if(typeof carousel_settings !== 'undefined') {
autoplay = carousel_settings.autoplay;
}
else {
autoplay = false;
}
$('.owl-carousel').owlCarousel({
loop:true,
autoplay:autoplay,
autoplayTimeout:2000,
autoplayHoverPause:true,
...
...
}
})
Это не работает. Здесь я хотел бы отметить, что в функции add_action()
, если я поставлю wp_footer вместо wp_enqueue_scripts , он добавляет скрипт в нижний колонтитул страницы (я проверил его с помощью просмотр исходного кода), но значение автозапуска равно нулю.
Еще одна вещь, которую я хотел бы упомянуть, заключается в том, что в функции sp_carousel_settings()
вместо передачи переменной $autoplay
, если я пишу любое значение stati c, например это $carousel_settings = array( 'autoplay' => true);
, это работает.
* Я попытался повторить $autoplay
внутри sp_carousel_settings()
, и он печатает значение! Но не попадает в файл js.
* Я попытался проверить значение $autoplay
и передать жесткое ядро внутрь wp_localize_script
как
function sp_carousel_settings( $autoplay ) {
if( $autoplay == "true" ) {
echo "Inside!!!";
$carousel_settings = array( 'autoplay' => true);
}
else {
echo "Outside!!!";
$carousel_settings = array( 'autoplay' => false);
}
wp_localize_script( 'sp_main_js', 'carousel_settings', $carousel_settings );
}
add_action( 'wp_footer', 'sp_carousel_settings' );
не работает. ДАЖЕ распечатывает "Внутри !!!" но не соответствует истине в autoplay
. Значение всегда ложно.
* Я зарегистрировал файл js в начале плагина, где плагин активируется и инициализируется. Вот так
function sp_slider_include_css_js() {
...
...
wp_register_script('sp_main_js', plugins_url('assets/js/main.js',__FILE__));
wp_enqueue_script('sp_main_js');
...
...
}
add_action( 'wp_footer','sp_slider_include_css_js');
* Я искал inte rnet для получения помощи, но не смог найти. Будем благодарны за любые ссылки.
* Я знаю , что я мог бы использовать эту функцию ненадлежащим образом. Я не в курсе (и новичок в этом).
* НАЧАЛО ПОМОЩИ
Пожалуйста, помогите !!!! Я застрял на несколько дней! ПОЖАЛУЙСТА ПОМОГИ!!! (