Wordpress:将 php 数组放入 JS-Function

Car*_*Mar 4 php arrays variables wordpress jquery

我想使用一个 PHP 数组,我在 WP-Loop 中检索到一个 javascript 函数,我在一个单独的 js 文件中。

这就是我在循环中回显我的 php 数组(来自高级自定义字段)的方式:

$images = get_field('galerie');
if( $images ): ?>
    <?php 
    $i = 0;
    foreach( $images as $image ): 
        $i++;
        ?>
        <div class="slider">
             <?php echo $image['url']; ?>');">
        </div>
    <?php endforeach; ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

在最终代码中,这将如下所示:

<div class="slider">   
   THERE_GOES_THE_IMG_URL_1 
   THERE_GOES_THE_IMG_URL_2 
   THERE_GOES_THE_IMG_URL_3
</div>
Run Code Online (Sandbox Code Playgroud)

但我需要在我的 Vegas Slider JQuery 插件中使用图像 URL。代码位于单独的 custom.js 文件中,如下所示:

$(".slider").vegas({
      slides: [
          { src: "THERE_GOES_THE_IMG_URL_1" },
          { src: "THERE_GOES_THE_IMG_URL_2" },
          { src: "THERE_GOES_THE_IMG_URL_3" }
      ]
  });
Run Code Online (Sandbox Code Playgroud)

如何将图像 URL 从 php 循环传递到 jQuery 插件?

谢谢你的帮助!卡拉

Ion*_*ula 5

我不知道您的数组的结构,但您可以使用json_encode($images).js 变量在 JS 变量中使用和传递数据wp_localize_script。所以在functions.php中你这样做:

$images = get_field('galerie');
$images = json_encode($images);

wp_enqueue_script( 'my_js_file', get_template_directory_uri() . '/js/custom.js' );
$data_to_send = array(
    'images' => $images
);
wp_localize_script( 'my_js_file', 'object_name', $data_to_send );
Run Code Online (Sandbox Code Playgroud)

然后在你的 javascript 文件中custom.js你可以得到你需要的东西:

var my_images = JSON.parse(object_name.images);
var imagesToAppend = [];
for(var i = 0; i < my_images.length; i++){
    var img_src = my_images[i].url;
    imagesToAppend[i] = { src: img_src };
}
console.log(imagesToAppend);
$(".slider").vegas({
      slides: imagesToAppend
  });
Run Code Online (Sandbox Code Playgroud)

请注意,您必须使用JSON.parse.

一个简化的解决方案是将ACF的名称更改urlsrc,这样您就不必使用该循环并将对象的键更改为src,然后您只需附加my_images到 Vegas 滑块 init,如下所示:

var my_images = JSON.parse(object_name.images);
$(".slider").vegas({
  slides: my_images
});
Run Code Online (Sandbox Code Playgroud)

此外,如果您custom.js以其他方式包含脚本,那么我在上面举例说明了,请删除它,否则您将得到两次相同的响应。

这实际上取决于您的数组结构,但这应该有效。

此外,您可以wp_localize_script 在此处阅读更多信息。