【问题标题】:How to manipulate the WooCommerce order key by removing the "wc_" prefix?如何通过删除“wc_”前缀来操作 WooCommerce 订单键?
【发布时间】:2021-05-24 09:32:28
【问题描述】:

我想通过从中删除wc_ 来操作订单密钥。 问题是,无论我做什么,wc_ 都不会被删除。

有没有办法做到这一点?

add_filter( 'woocommerce_generate_order_key', 'woocommerce_generate_custom_order_key', 10, 1 );
function woocommerce_generate_custom_order_key($order_key){
$order_key = str_replace( 'wc_', '', $order_key );
return $order_key;
}

【问题讨论】:

    标签: woocommerce


    【解决方案1】:

    _order_key (Order Key)post_id (Order ID) 字段不同。

    • 您在 WooCommerce 后端看到的 订单号post_id Wordpress 数据库的wp_posts 表的字段。
    • order key 改为引用 Wordpress 数据库的 wp_postmeta 表的 _order_key (meta_key) 字段。

    woocommerce_generate_order_key 过滤器记录在 here 中,如您所见,您不能使用它从订单的 _order_key 字段中删除 wc_ 前缀。这是source code的摘录:

    /**
     * Generate an order key with prefix.
     *
     * @since 3.5.4
     * @param string $key Order key without a prefix. By default generates a 13 digit secret.
     * @return string The order key.
     */
    function wc_generate_order_key( $key = '' ) {
        if ( '' === $key ) {
            $key = wp_generate_password( 13, false );
        }
    
        return 'wc_' . apply_filters( 'woocommerce_generate_order_key', 'order_' . $key );
    }
    

    如果您想操作 WooCommerce 订单密钥,您必须使用 WC_Order 类的 set_order_key() 方法。 Here 你可以找到文档。

    您还需要更新wp_posts 表中的订单post_password 字段。

    因此,例如,如果您想为每个新订单设置自定义订单键(删除 wc_ 前缀),您可以使用这个功能:

    // removes the "wc_" prefix from the WooCommerce order key field for each new order
    add_action( 'woocommerce_new_order', 'set_custom_order_key', 99, 2 );
    function set_custom_order_key( $order_id, $order ) {
    
        // get the order object
        $order = wc_get_order( $order_id );
        // gets the current order key
        $order_key = $order->get_order_key();
        // remove the "wc_" prefix
        $new_order_key = str_replace( 'wc_', '', $order_key );
    
        // updates the "_order_key" field of the "wp_postmeta" table
        $order->set_order_key( $new_order_key );
        $order->save();
    
        // updates the "post_password" field of the "wp_posts" table
        $post = get_post( $order_id );
        $post->post_password = $new_order_key;
        wp_update_post( $post );
    
    }
    

    代码已经过测试并且可以运行。将其添加到活动主题的 functions.php 中。

    如果您想操作 WooCommerce 订单 ID,您必须使用 woocommerce_order_number 过滤器。可以在here找到文档。

    你可以在这里找到一些例子:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      相关资源
      最近更新 更多