在AJAX请求上呈现模块化插件短码

时间:2021-03-28 作者:iuriiGav

我正在使用Modula插件来加速画廊的创建过程。它工作得很好,但我不知道如何在ajax调用中正确渲染它。我阅读了有关通过ajax呈现短代码的文章,但到目前为止,我很难在代码中实现它。以下是我使用的代码:

add_action(\'wp_ajax_nopriv_getHistory\', \'getHistory_ajax\');
add_action(\'wp_ajax_getHistory\', \'getHistory_ajax\');

function getHistory_ajax(){ 
 $args = array(
        \'post_type\'      => \'gallery\',
        \'posts_per_page\' => -1,
        \'meta_query\' => array(
            array(
                \'key\' => \'post_gallery_gallery_year\',
                \'value\' => $festivalQueryYear,
                \'compare\' => \'LIKE\'
                )
            ),
        \'meta_key\'       => \'post_gallery_gallery_year\',
        \'orderby\'        => \'meta_value_num\',
        \'order\'          => \'DESC\',
     
    );
    
    $gallery= new WP_Query($args); 

    if($gallery->have_posts()) : while($gallery->have_posts()): $gallery->the_post();

        $shortcode = get_field(\'gallery_shortcode\');

        echo do_shortcode($shortcode);

    endwhile; wp_reset_postdata(); endif; 

 }
在中ajax.js

   $(".festival-year-toggler-js-ajax").on("click", function (e) { 
      $.ajax({
          url: wpAjax.ajaxUrl,
          data: { action: "getHistory", festivalQueryYear },
          type: "POST",
          success: function (data) {
               $(\'.target-div\').html(data);
          },
          error: function (error) {
               console.warn(error);
          },
        });

 })

结果是,库中的图像被渲染,但没有指定的布局,这显然是因为短代码没有在其默认环境中运行。如何运行此短代码,使其在ajax调用中的呈现方式与在正常页面加载中的呈现方式相同?

非常感谢您的帮助!!!

2 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

我只能在一般层面上对此发表评论,因为我不熟悉您使用的插件。(这可能不是询问此类插件相关问题的最佳场所,因为第三方插件目前在WPSE上被认为是离题的。

我遇到的大多数此类插件都有某种javascript(或jQuery),它在页面加载时执行,用于设置布局、启用灯箱和其他功能。脚本运行之后,它们就完成了,不关心DOM或html之后会发生什么。这意味着,如果您通过Ajax向页面添加新的html,您需要找到一种方法,自己再次启动这些相同的设置脚本。

$.ajax({
    success: function (data) {
        // add html to the DOM
        $(\'.target-div\').html(data);

        // the basic idea..
        some_vendor_function_to_init_gallery(
            $(\'.target-div\')
        );
    },
});
这些安装脚本是否全局可用取决于您使用的插件。您需要深入了解插件的源代码,浏览其文档,和/或联系插件作者。如果安装脚本不在全局范围内,那么您可能运气不好。

SO网友:iuriiGav

这是我从Modula团队获得的重新初始化插件的代码片段:

var modulaGalleries = jQuery(\'.modula.modula-gallery\'); 
     jQuery.each(modulaGalleries, function () { 
          var modulaID = jQuery(this).attr(\'id\'), 
          modulaSettings = jQuery(this).data(\'config\');
          jQuery(\'#\' + modulaID).modulaGallery(modulaSettings); 
     });
正如Antti所写,需要这样添加:

$.ajax({
    success: function (data) {
        // add html to the DOM
        $(\'.target-div\').html(data);
          var modulaGalleries = jQuery(\'.modula.modula-gallery\'); 
          jQuery.each(modulaGalleries, function () { 
          var modulaID = jQuery(this).attr(\'id\'), 
          modulaSettings = jQuery(this).data(\'config\');
          jQuery(\'#\' + modulaID).modulaGallery(modulaSettings); 
          });
});