Плагин/шорткод Fire Wordpress после загрузки Ajax

У меня есть веб-сайт, который загружает свой основной контент через Ajax, но у меня возникла проблема с загрузкой любых плагинов/шорткодов, которые находятся в указанном контенте. Плагины работают нормально, если я напрямую загружаю каждую страницу через адресную строку.

Код Ajax

jQuery(document).ready(function() {
    var History = window.History;
    if (!History.enabled) {
        return false;
    }

    // Bind to StateChange Event
    History.Adapter.bind(window,'statechange',function(){ 
      var State = History.getState(); 
      //History.log(State.data, State.title, State.url);
      var goto_url = State.url;   
      jQuery('.content').load(goto_url+ ' #main').hide().delay(750).fadeIn(1000); 
    });

    jQuery('.main-menu a').click(function(evt){
        var href = jQuery(this).attr('href');
        History.pushState({}, '', href);

        var elementClassName = jQuery(this).attr('class');
        jQuery('.main-menu a').removeClass('active');
        jQuery('.main-menu a.'+elementClassName).addClass('active');

        jQuery('.content').load(href+ ' #main',
            function() { 
                jQuery(this).fadeIn(750);
            });
         return false;
    });
});

Я хочу запустить шорткоды для конкретных страниц.

<?php echo do_shortcode('[shortcode goes here]'); ?>

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

Пример функции шорткода

jQuery(document).ready(function($){ window.dzsp_init("#port0",{
settings_slideshowTime:3
,settings_mode: "masonry"
,title: ""
,design_item_width: ""
,design_item_height: ""
,design_categories_style: "normal"
,design_categories_pos: "top"
,design_pageContent_pos: "top"
,settings_disableCats: "off"
,settings_lightboxlibrary: "zoombox"
,settings_preloadall: "off"
,audioplayer_swflocation: "http://sbmdesigns.net/wp-content/plugins/dzs-portfolio/ap.swf"
,videoplayer_swflocation: "http://sbmdesigns.net/wp-content/plugins/dzs-portfolio/preview.swf"
,disable_itemmeta: "off"
,settings_ajax_loadmoremethod: "button"
,settings_mode_masonry_layout: "masonry"
,design_total_height_full: "off"
,settings_mode_masonry_layout_straightacross_setitemsoncenter: "off"
,design_item_height_same_as_width : "off"})
});

person SBM    schedule 06.10.2013    source источник
comment
Вы не сможете запускать шорткоды из браузера. Они должны быть уже запущены, когда сервер отвечает на запрос AJAX. Можете ли вы опубликовать свой php-код, который отвечает на AJAX? Сначала нужно убедиться, что сервер обрабатывает все...   -  person manishie    schedule 07.10.2013
comment
Как упомянул Маниши, нам нужно будет увидеть php-код, чтобы помочь с этим. Скорее всего, вы можете использовать выходные буферы в обработчике ajax (т. е. вашей php-функции ajax, которая обрабатывает этот запрос) для обработки шорткода php и сохранения его в строке. Затем верните эту строку, чтобы вы могли использовать функцию успеха jQuery, чтобы поместить строку, полученную с сервера, в соответствующее место в документе.   -  person zoranc    schedule 27.10.2013


Ответы (1)


Не самое элегантное решение, но в зависимости от того, какие плагины/шорткоды вы пытаетесь повторно инициализировать, вы можете сделать это для многих в обратном вызове .load с соответствующей инициализацией jQuery.

$( "#result" ).load( "ajax/test.html", function() { /*put re-init code here*/ });

Например, для гибких слайдеров:

jQuery('.slider-<?php echo $slider->ID; ?>').flexslider({
                                      animation: "<?php echo $animation; ?>",
                                      easing: "swing",
                                      direction: "<?php echo $direction; ?>",
                                      slideshowSpeed: "<?php echo $slideshow_speed; ?>",
                                      animationSpeed: "<?php echo $animation_speed; ?>",
                                      controlNav: <?php echo $control_nav; ?>,               
                                      directionNav: <?php echo $directional_nav; ?>,  
                                      pauseOnAction: <?php echo $action; ?>,
                                      pauseOnHover: <?php echo $hover; ?>,
                                      useCSS: false
                                          });

Или, чтобы воспроизвести шорткод аудио, вы можете сделать что-то вроде этого (с соответствующими скриптами, ранее поставленными в очередь в functions.php):

$('.asset-audio').mediaelementplayer({videoHeight: 30,  videoWidth: 0, alwaysShowControls: true,
    features: ['playpause','progress','current','duration','volume'],
}); 
person tainterr    schedule 21.11.2013