Woocommerce Order Delivery 插件更改显示位置

Posted

技术标签:

【中文标题】Woocommerce Order Delivery 插件更改显示位置【英文标题】:Woocommerce Order Delivery plugin change display location 【发布时间】:2016-03-16 18:11:16 【问题描述】:

我正在开发一个使用以下插件的 Woocommerce 网站:https://docs.woothemes.com/document/woocommerce-order-delivery/(“WooCommerce 订单交付”)

该插件现在显示在 Checkout 页面上 checkout_shipping 部分的计费字段下,我正在尝试通过挂钩功能将此位置更改为 checkout_order_review 部分。

但我似乎无法让它工作。

我的functions.php中的代码:

function action_woocommerce_checkout_shipping( $instance ) 
global $woocommerce;

  if ( is_checkout() && $woocommerce->cart->needs_shipping() ) 
     echo 'Hi World!';
    if ( wc_od() )
     echo 'Found wc_od function';
    

    remove_action( 'woocommerce_checkout_shipping', 'checkout_content' );
  
;

// add the action
add_action( 'woocommerce_checkout_shipping', 'action_woocommerce_checkout_shipping' );

我在这段代码背后的想法是,我删除了检索插件模板的函数“checkout_content”,然后将操作添加到woocommerce_checkout_order_review 函数以将其显示在订单审查部分。

但我的 remove_action 似乎不起作用。

插件中添加 checkout_content 动作的代码:

protected function __construct() 
        // WP Hooks.
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );

        // WooCommerce hooks.
        add_action( 'woocommerce_checkout_shipping', array( $this, 'checkout_content' ), 99 );
        add_action( 'woocommerce_checkout_process', array( $this, 'validate_delivery_date' ) );
        add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'update_order_meta' ) );

        // Delivery date validation hooks.
        add_filter( 'wc_od_validate_delivery_date', array( $this, 'validate_delivery_day' ), 10, 2 );
        add_filter( 'wc_od_validate_delivery_date', array( $this, 'validate_minimum_days' ), 10, 2 );
        add_filter( 'wc_od_validate_delivery_date', array( $this, 'validate_maximum_days' ), 10, 2 );
        add_filter( 'wc_od_validate_delivery_date', array( $this, 'validate_no_events' ), 10, 2 );
    

有人可以给我一个正确的方向吗? 我做错了吗?还是有更好的方法来实现这一点?

【问题讨论】:

【参考方案1】:

你有两个问题。

首先,您需要在删除操作时指定执行优先级,或者至少在它不是默认值 10 时指定执行优先级。在您的情况下,执行优先级是 99。

其次,checkout_content() 是类函数,不是独立函数,所以需要在函数引用中指定。

所以你的remove_action 代码行将是:

remove_action( 'woocommerce_checkout_shipping', array( $the_class_variable, 'checkout_content' ), 99 );

其中$the_class_variable 是包含__construct() 函数的类的实例。您如何引用它取决于该类在插件中的实例化方式。

您可以在http://jespervanengelen.com/different-ways-of-instantiating-wordpress-plugins/ 阅读有关实例化类的不同方法和对应的remove_action

您可以在https://codex.wordpress.org/Function_Reference/remove_action 中阅读有关remove_action 的信息

【讨论】:

感谢分配,我将深入研究这个!给你一个 +1,如果我设法解决我的问题,我会将你的答案设置为已解决。 感谢分配!!第一个网址真的帮助了我,我设法解决了我的问题:) 我有同样的问题,但它对我不起作用:remove_action('woocommerce_checkout_shipping', array($the_class_variable, 'checkout_content'), 99);我将此行添加到我的子主题 functions.php 文件中 @Ravi - $the_class_variable 只是一个占位符。您需要了解如何在代码中引用该类。此外,WooCommerce 代码会不断更新,因此在 3 年多之后,现在操作名称和/或优先级可能会有所不同。 你好@JamesJones,谢谢你的回答。但是请让我通知您,我最近下载了这个插件,并且看到了上面提到的具有相同 ACTION 的相同课程。你能帮我如何使用这个变量 $the_class_variable 吗?

以上是关于Woocommerce Order Delivery 插件更改显示位置的主要内容,如果未能解决你的问题,请参考以下文章

woocommerce_order_status_completed 没有数据

Woocommerce Order Delivery 插件更改显示位置

WooCommerce - 从单独的 PHP 文件访问“WC_Order”

Woocommerce - 获取 WC_Order_Item_Product line 折扣

通过 WooCommerce 管理员电子邮件通知中的“woocommerce_email_order_meta”挂钩显示产品自定义字段

在 WooCommerce 3 中获取订单商品和 WC_Order_Item_Product