【问题标题】:Get View Order URL for custom email in WooCommerce在 WooCommerce 中获取自定义电子邮件的查看订单 URL
【发布时间】:2017-04-18 21:50:02
【问题描述】:

我想获取 订单详情页面的 URL,用户可以从中查看他们的订单详情,因为我使用一些 3rd 方 API 在产品发货后向客户发送邮件。 p>

我试过这段代码

$order = wc_get_order(109);
$public_view_order_url = esc_url( $order->get_view_order_url() );
echo $public_view_order_url; //http://example.com/my-account/view-order/109/

但由 ^^ 以上代码生成的 URL 仅适用于已登录的客户。是否有可能获得一个 公共 URL 以便用户不必登录,因为大多数客户没有任何帐户。我知道出于安全原因需要电子邮件 ID 和发票号码。

我认为的一个解决方案是创建一个自定义页面,该页面将接受 GET 参数中的order_idorder_keyemail_id 并对其进行查询并显示结果;我必须创建的整个东西,但是否有任何 WooCommerce 功能/挂钩?

我用谷歌搜索过,也花时间在 Woo doc 上,但结果是否定的,

任何帮助或建议都会对我很有帮助。

谢谢。

【问题讨论】:

  • 我认为这在 WooCommerce 中实际上是不可能的,因为当未登录用户处理订单时,这是由临时会话和 cookie 处理的。因此,之后无法在公共模式下显示订单。这就是为什么您有一个“我的帐户”页面,其中包含与已登录客户的所有相关订单。 但是使用 WooCommerce 一切皆有可能,为此开发了一个自定义插件。
  • @LoicTheAztec:我不知道,所以我发布了这个问题,是的,我也可以通过自定义页面创建自定义。

标签: wordpress woocommerce


【解决方案1】:

不确定我是否遗漏了什么,但它听起来就像你想要的可以通过Order Received URL 实现:

$order->get_checkout_order_received_url()

这将为您提供类似https://example.com/checkout/order-received/12345/?key=wc_order_1ab2cd3ef4g 的信息,这是成功处理订单后显示的订单收据的直接链接。

默认情况下,此链接将显示帐单和运输详细信息、订单详细信息和付款方式,并且不需要客户拥有帐户或登录。

【讨论】:

    【解决方案2】:

    我找不到这样做的方法,所以我只是在我的电子邮件中添加了一个条件。如果他们有帐户,请链接到该订单,如果他们不鼓励他们为下一个订单创建帐户。

    <p><?php
    $email_order_url    =$order->get_view_order_url();
    
    if ( $order->get_user() ) {
        _e( "Your message with <a href='" . $email_order_number . "'>Order 
           Number'</a>.", 'woocommerce' );
        } else {
        _e( "Message to encourage them to create an account on the regular 
           accounts page" , 'woocommerce' );
    }
    

    【讨论】:

      【解决方案3】:

      你需要的一切都在帖子元中,这对我来说在可以访问get_the_ID()的循环中有效:

      <?php $the_order_id  = get_the_ID();
            $the_order_key = get_post_meta($the_order_id, '_order_key', true); ?>
      
      https://yoursiteurl.com/checkout/order-pay/<?php echo the_order_id; ?>/?pay_for_order=true&key=<?php echo $the_order_key; ?>
      

      否则,如果您可以通过其他方式将 get_the_ID() 替换为订单 ID(但是您在最初的问题中得到了 109),那也可以。

      【讨论】:

      • 您可能希望使用/order-received 而不是/order-pay。如果订单已经为用户付款,则不会出错。
      • 刻录链接不是一个好习惯,这就是为什么 woocommerce 有$order-&gt;get_checkout_order_received_url() 这样您就可以动态获取订单接收页面,尽管当前的域地址。
      • 关心扩展为什么这不是一个好的做法@svelandiag?以及“燃烧链接”是什么意思。以前从未听说过。
      猜你喜欢
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 2019-04-25
      相关资源
      最近更新 更多