WooCommerce正在从订单中检索自定义字段值

时间:2019-12-16 作者:Anvilhouse

我试图从客户的所有订单中获得一个特定的元值,并简单地将其返回到我帐户中的下载页面。这就是我目前所拥有的,但无法获得$skey来检索和显示从后端设置的指定值。基本思想是转到客户的订单,在s\\u键自定义字段中定义所述订单的所需内容,并在客户购买下载链接后立即为其填充。

这方面的任何帮助都会很棒!php初学者认证,所以我可能做了一些不太正确的事情。

function return_s_key_field() {
$args = array(
\'customer_id\' => $user_id);
$orders = wc_get_orders($args);
$skey = get_post_meta( $orders, \'s_key\', true );

echo (\'<div id="request_title"></div>\');

if ( empty($skey) == \'true\' || $skey != \'N/A\' ){
    echo (\'<div id="key_container"><div id="key_label"><p>Arbitrary text:</p></div><div id="steam_key"><p>\' . $skey . \'</p></div></div>\'); 
}
else { 
    echo (\'<div id="key_container"><div id="key_label"><p>Arbitrary text:</p></div><div id="steam_key"><p>N/A</p></div></div>\');
}
}
add_action( \'woocommerce_after_available_downloads\', \'return_s_key_field\' );

2 个回复
最合适的回答,由SO网友:Yatix 整理而成

代码的一些基本问题。由于这个钩子没有任何数据提供给函数,所以您需要让当前用户登录。

其次,正如@antti所提到的,get\\u post\\u meta接受第一个参数作为post id(在本例中为order id),即单个值。

function return_s_key_field() {

$orders = wc_get_orders(array(
    \'customer_id\' => get_current_user_id(),
    \'return\' => \'ids\',
))

$meta_data = array();

foreach ($orders as $order_id) {
  $meta_data[$order_id] = get_post_meta($order_id, \'s_key\', true);  
}

// var_dump($meta_data);

}
add_action( \'woocommerce_after_available_downloads\', \'return_s_key_field\' );
尝试取消对var\\u dump的注释,然后根据需要使用该数据。

SO网友:Antti Koskinen

代码的问题是,您传递的是一个订单数组wc_get_orders() 据我所知,请查阅WooC文档get_post_meta(), 它期望第一个参数是一个整数post ID。

因此,修改orders查询以仅返回ID,然后在每次迭代中循环该数组,并在每次迭代中执行get_post_meta() 对于该特定ID。将找到的元数据推送到helper数组变量,然后在循环完成后使用该数据执行某些操作。

$order_ids = array(); // array of WooC order IDs
$meta_data = array();

foreach ($order_ids as $order_id) {
  $meta_data[$order_id] = get_post_meta($order_id, \'s_key\', true);  
}

if ( $meta_data ) {
  // do something
}

https://developer.wordpress.org/reference/functions/get_post_meta/