将产品对象传递给Java脚本

时间:2018-08-01 作者:Omer

我在php中得到一个product对象,我想将其传递给JavaScript。

这是php代码:

<?php

// Add custom Theme Functions here
// 

//gg stands for Gear Guide
function gear_guide_product_view( $atts ) {

    //Get Ids from shortcode
    $gg_attributes = shortcode_atts( array(
        \'id\' => \'0\'
    ), $atts );

    $gg_products_ids = Array();
    $gg_products = Array();

    //Push ID\'s into array
    if ( strpos( $gg_attributes[\'id\'], \',\' ) !== false ) {
        echo \'Multiple ID\\\'s!\';
        $gg_products_ids = explode( \',\', $gg_attributes[\'id\'] );
    } else {
        echo \'Just one Id!\';
        $gg_products_ids[] = $gg_attributes[\'id\'];
    }
    echo var_dump($gg_products_ids);

    //Get product by ID\'s
    foreach ( $gg_products_ids as $gg_product_id ) {
        $gg_product = trim( $gg_product_id, \' \' );
        array_push($gg_products, wc_get_product( $gg_product ));
    }
    echo var_dump( $gg_products );
    wp_register_script( \'load_product_info\' , \'/wp-content/themes/flatsome-child/js/test.js\' , array( \'jquery\' ) );
    wp_enqueue_script( \'load_product_info\' );
    wp_localize_script( \'load_product_info\' , \'products\' , $gg_products);
}

add_action( \'woocommerce_loaded\', \'my_function_with_wc_functions\' );

add_shortcode( \'fsg\' , \'gear_guide_product_view\' );
这是我的JavaScript:

function load_product_info() {
    console.log(products);
}
load_product_info();
当我echoing公司gg_products 变量看起来不错,但在console.log 我得到一个包含两个空对象的数组。

有人知道为什么会这样吗?

如果需要更多信息,请告诉我,我会尽全力提供。

谢谢

1 个回复
SO网友:Andrea Somovigo

只要换一下

 wp_localize_script( \'load_product_info\' , \'products\' , $gg_products);
with(EDITED->wp\\u localize\\u script()接受数组作为第三部分。)

 wp_localize_script( \'load_product_info\' , \'products\' , array(\'current_products\'=>json_encode($gg_products ) ) );
将php对象转换为json字符串并构建数组。

然后在js文件中,将字符串转换为带有JSON的js对象。作语法分析

function load_product_info() {
  var _products=JSON.parse( products )
  console.log( _products.current_products );
}
load_product_info();

结束