我正在尝试使客户在结帐时从订单(通过ID或其他方式)选出的变异值映射到变量$存储和用于构建API URL的变量。
我尝试了多种方法将数据获取到变量上,但是API URL失败了,这使我相信我没有变量上的缩进值。
我当前的代码如下(摘录):
add_action( 'woocommerce_order_status_processing', 'my_function' );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = get_post_meta( $key, 'attribute_addon-storage' );
$tier = get_post_meta( $key, 'attribute_subscription-type' );
有人知道我如何抓住这两个变量addon-storage
和订阅类型的值?
我可以看到我想在woocommerce_order_itemmeta
表中获得数据库的值。
我可以从那里获得值吗?
编辑:
也可以根据Loictheaztec的建议,正确的方法是获取我在Woocommerce_order_itemmeta表中看到的数据的值,如$ meta_key是:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = wc_get_order_item_meta( $key, 'addon-storage', true );
$tier = wc_get_order_item_meta( $key, 'subscription-type', true );
$anyMetaValue = wc_get_order_item_meta( $key, '$meta_key', true );
// Then I can create the variable I need in the the API url with:
$package = "$tier$storage";
更新:您正在混淆订单元元数据和订购项目元数据,它们是非常不同的内容,并且位于不同的数据库表中。
您的代码也不完整,您不会使用 get_post_meta()
使用$key
(这是项目ID)...
-
get_post_meta( $order_id, 'meta_key', true )
功能将寻找订单元数据数据(与订单项目无关),并将订单ID用作参数。 -
wc_get_order_item_meta( $item_id, 'meta_key', true )
函数将寻找实现的订单项元数据,并将项目ID用作参数(您的代码中的$key
)…
因此,该功能应在foreach循环中使用,在此获取订单项目数据。
然后2种方法:
- 您应该在数据库中查看
wp_postmeta
和wp_woocommerce_order_itemmeta
表中的最后一个订单ID(通过phpmyadmin),以查看位于位置的数据… - 或者,您可以使用以下代码(仅用于测试),以输出订单项目原始数据所在的位置。
此原始数据将在商店中输出, Archive 和产品页面,仅可见用于登录中。您将需要来定义其中的订单ID。
这是此测试功能
add_action( 'woocommerce_before_main_content', 'my_testing_order_function' );
function my_testing_order_function() {
// Define an Order ID
$order_id = 724;
// Only for admin user role
if( ! current_user_can('edit_products')) return;
$order = wc_get_order( $order_id ); // The order object
foreach ( $order->get_items() as $item_id => $item ) {
// Order item meta data Raw output
echo "<pre>ORDER ITEM META DATA - (Item_id $item_id):"; print_r($item->get_data()); echo'</pre>';
echo "<pre>ORDER ITEM META META DATA - (Item_id $item_id):"; print_r($item->get_meta_data()); echo'</pre>';
}
}
现在,您拥有找到和获取数据所需的一切。下面的代码通常适用于您,使您可以从变体中获取数据:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
foreach ( $order->get_items() as $key => $item ) {
// get the data
$storage = wc_get_order_item_meta( $item_id, 'attribute_addon-storage', true );
$tier = wc_get_order_item_meta( $item_id, 'attribute_subscription-type', true );
}
}