【问题标题】:Wordpress get post fieldWordpress 获取帖子字段
【发布时间】:2015-07-11 03:28:46
【问题描述】:

我正在覆盖 WooCommerce 中的管理员电子邮件通知模板,当订单交易成功时,我想在电子邮件中添加交易 ID。

我在管理员电子邮件模板中尝试了$order->get_transaction_id() as explained here,但它返回一个空结果。

然后我在管理员电子邮件模板中尝试了这个:

do_action('getOrderTransactionID', $order->id);

在我的主题的functions.php中我添加了这个,但这个函数也不返回任何东西。

add_action('getOrderTransactionID', 'getOrderTransactionIDForEmail');

function getOrderTransactionIDForEmail($orderId){
    echo get_metadata('post', $orderId, '_transaction_id', true);

    //get_post_data doesn't return anything either
    //get_post_meta( $orderId, '_transaction_id', true);
}

wp_postmeta 表中,_transaction_id 元键在每次成功交易后保存。那为什么我无法检索数据库中已经存在的_transaction_id

【问题讨论】:

  • 订单是用“post”类型保存的还是其他类型的?
  • wp_post 表中,我看到订单记录的post_typeshop_order
  • get_metadata 的第一个参数是对象类型 (codex.wordpress.org/Function_Reference/get_metadata)。 Woocommerce 的订单肯定不使用默认的 WordPress post 类型吗?
  • 这就是你试图获取post 类型的元数据但你有shop_order 的问题
  • 尝试使用echo get_metadata('shop_order', $orderId, '_transaction_id', true);

标签: php wordpress woocommerce


【解决方案1】:

您使用的是什么网关?如果您没有看到_transaction_id,那么您需要在网关插件中手动保存返回的 transaction_id。 Check out this page

尝试将交易ID保存在您的支付网关文件中,然后尝试查看它是否在您这样做时显示var_dump(get_post_custom($order->id));

add_post_meta( $order->id, '_transaction_id', YOUR_TRANSACTION_ID, true );

【讨论】:

  • 这样做的好处是我不需要任何woocommerce_email_order_meta 或在我的主题功能中添加任何东西。我的管理员电子邮件模板中的$order->get_transaction_id() 方法现在返回交易ID。再次感谢!
【解决方案2】:

以下是如何使用现有挂钩将数据添加到电子邮件模板的示例。

function kia_display_email_order_meta( $order, $sent_to_admin, $plain_text ) {
    $some_field = get_post_meta( $order->id, '_some_field', true ),
    $another_field = get_post_meta( $order->id, '_another_field', true ),
    if( $plain_text ){
        echo 'The value for some field is ' . $some_field . ' while the value of another field is ' . $another_field;
    } else {
        echo '<p>The value for <strong>some field</strong> is ' . $some_field. ' while the value of <strong>another field</strong> is ' . $another_field;</p>;
    }
}
add_action( 'woocommerce_email_order_meta', 'kia_display_email_order_meta', 30, 3 );

【讨论】:

  • 303 是什么?
  • 这并没有真正帮助我。 get_post_meta 不会为我返回任何值。
  • 这是一个示例。除非您将 _some_field_another_field 作为元值,否则您将不会返回任何内容。您需要使用所需的元键进行修改...我相信是_transaction_id
  • 303 是要从操作挂钩传递的变量的优先级和数量。见add_action()
  • 我在我的主题功能中添加了您的代码,当然将其更改为_transaction_id,并在管理员电子邮件模板中调用do_action('kia_display_email_order_meta', $order)。仍然没有任何事情发生。不返回任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2012-07-22
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多