wp_localize_script не принимает значение Dynami c - PullRequest
0 голосов
/ 29 февраля 2020

* Контекст

Хорошо, я новичок в разработке плагинов для 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 для получения помощи, но не смог найти. Будем благодарны за любые ссылки.

* Я знаю , что я мог бы использовать эту функцию ненадлежащим образом. Я не в курсе (и новичок в этом).

* НАЧАЛО ПОМОЩИ

Пожалуйста, помогите !!!! Я застрял на несколько дней! ПОЖАЛУЙСТА ПОМОГИ!!! (

1 Ответ

1 голос
/ 29 февраля 2020

Необходимо внести некоторые изменения, например,

Шаг 1:

function sp_carousel_settings() {

    wp_register_script( 'sp_main_js', 'you/file/path/here', array( 'jquery' ), '1.0', true);

}
add_action( 'wp_enqueue_scripts', 'sp_carousel_settings' );

Шаг 2:

add_shortcode( 'sp-slider', 'sp_slider_get_posts');
function sp_slider_get_posts( $atts ) {
  .....
  $carousel_settings = array( 'autoplay' => $autoplay);
  wp_localize_script( 'sp_main_js', 'carousel_settings', $carousel_settings );

 wp_enqueue_script( 'sp_main_js' );

  ......

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