我有一个Woocommerce网站,我使用Gravity Forms进一步扩展每个订单。
我正在编写一个管理工具,它使用两个API来制作一些统计信息和其他管理工具。
我可以获得Gravity Forms条目的列表,以及订单列表。我遇到的问题是我不知道如何获得与特定订单相关的条目。
有办法做到这一点吗?
答案 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 );