Gravity Forms和Woocommerce API之间的链接

时间:2014-10-13 16:16:12

标签: php wordpress woocommerce gravity-forms-plugin

我有一个Woocommerce网站,我使用Gravity Forms进一步扩展每个订单。

我正在编写一个管理工具,它使用两个API来制作一些统计信息和其他管理工具。

我可以获得Gravity Forms条目的列表,以及订单列表。我遇到的问题是我不知道如何获得与特定订单相关的条目。

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:1)

您是否尝试过使用woocomerce历史插件或从项目中获取原始元数据?

wc_get_order_item_meta($ order_item_id,“_ gravity_forms_history”);  wc_get_order_item_meta($ order_item_id,“_ gravity_form_data”);

请记住,这将需要创建一个新的端点而不是放置框。

答案 1 :(得分:0)

我最后一次使用WooCommerce Gravity Forms产品附件(大约一年前),它没有将订单ID存储在条目中(必须在创建条目后和创建订单后发生),或订单中的条目ID。后者可能更有意义,但两者都需要自定义代码。

同样,自从我使用附加组件以来已经有一段时间了。我会支持WC支持,看看他们是否有任何关于实现此支持的技巧。

答案 2 :(得分:0)

这是我在WooCommerce和重力形式产品插件之间找到链接的地方:

在数据库中,找到表 your_table_prefix _posts中的顺序,并获取其ID。我正在过滤post_type" shop_order。"

your_table_prefix _woocommerce_order_items表中,找到刚找到的ID并过滤" line_item"在" order_item_type"列,并抓住" order_item_id。"

使用" order_item_id"在表格中找到订单的元数 your_table_prefix _woocommerce_order_itemmeta。

所有订单的重力表格数据都在那里。看起来除了填写表格并且数据被抓住并插入 your_table_prefix _woocommerce_order_itemmeta之外,woo和重力之间没有真正的联系。我找不到任何将特定订单与特定gf条目联系起来的东西,但你可以从Woo获取数据,至少用它来搜索GF条目。

答案 3 :(得分:0)

我能够使用Gravity Forms,Gravity Forms Product Addons和Woocommerce,使用三个步骤来完成此任务:

步骤1:输入GF条目ID并将其存储在会话中。这在签出完成之前发生,有时在用户登录之前发生。

add_action( 'gform_after_submission', 'blb_get_lead_entry_id', 10, 2 );
function blb_get_lead_entry_id( $entry, $form ) {

    $meta_value = $entry['id'];

    //session array with all the entries because GF creates 2 entries each time for validation purposes apparently
    if (!isset($_SESSION['entryclump'])) {
    $_SESSION['entryclump'] = array();
    }
    $_SESSION['entryclump'][]  = $meta_value;

    //also an array with just the current entry which will end up be the later of the two entries added by GF
    $_SESSION[ 'gf-entry-id' ] = $meta_value;
}

第2步:将您刚刚收集的条目($ _SESSION ['gf-entry-id'])包含在购物车元项目中,然后保存。

在这种情况下,我正在保存一个名为“_gf_entry_ID”的字段,该字段将被添加到具有正确order_item_id的woocommerce_order_itemmeta表中,并且两个GF条目中的较晚者将作为meta_value添加。

//add cart item data
add_filter( 'woocommerce_add_cart_item_data', 'blb_add_gfentry_to_cart_data', 10, 3 );
function blb_add_gfentry_to_cart_data( $cartItemData, $productId, $variationId ) {
    $entryid=$_SESSION[ 'gf-entry-id' ];
    $cartItemData['GFentryID'] = $entryid;
    return $cartItemData;
    unset($_SESSION[ 'gf-entry-id' ]);
}


//add cart item data: session stuff
add_filter( 'woocommerce_get_cart_item_from_session', 'blb_cart_item_session', 10, 3 );
function blb_cart_item_session( $cartItemData, $cartItemSessionData, $cartItemKey ) {
    if ( isset( $cartItemSessionData['GFentryID'] ) ) {
        $cartItemData['GFentryID'] = $cartItemSessionData['GFentryID'];
    }

    return $cartItemData;
}

//save the data
add_action( 'woocommerce_add_order_item_meta', 'blb_save_gfentry', 10, 3 );
function blb_save_gfentry( $itemId, $values, $key ) {
    if ( isset( $values['GFentryID'] ) ) {
    wc_add_order_item_meta( $itemId, '_gf_entry_ID', $values['GFentryID'] );
    }
}

步骤3(可选):更新GF表单以反映正确的created_by用户ID。现在结帐已完成并且用户已登录,我们可以这样做。

function blb_woocommerce_thankyou( $order_id ) { 
    //Current User
    $currentUserID = wp_get_current_user()->ID;

    //GF Entry Array for Order
    $order = new WC_Order( $order_id );
    $items = $order->get_items();
    $order_item_ids = array();
    $gf_entry_ids = array();
    foreach ( $items as $key=>$item ) {
      $gf_entry_ids[] = $item['item_meta']['_gf_entry_ID'][0];   
    }

    //First real quick clear all the entries in the entry clump (in case the user was already logged in)
    //This is important because GF creates two forms for product add ons with Woocommerce and we only want one to show up in the list and edit plugin
    $entryclump = $_SESSION[ 'entryclump' ];
    foreach ( $entryclump as $entry ) {
    global $wpdb;
    $wpdb->update('wp_rg_lead', array('created_by' => null), array('id' => $entry));
    }


    //Update wp_rg_lead
    if (($currentUserID!=0) && (isset($_SESSION[ 'entryclump' ])) ) {
        foreach ( $gf_entry_ids as $gf_entry_id ) {
        global $wpdb;
        $wpdb->update('wp_rg_lead', array('created_by' => $currentUserID), array('id' => $gf_entry_id));
        } //foreach
    } //if

    unset($_SESSION[ 'entryclump' ]);


}; 
add_action( 'woocommerce_thankyou', 'blb_woocommerce_thankyou', 10, 1 );