首页 文章

Woocommerce Order Delivery插件更改显示位置

提问于
浏览
0

我正在使用以下插件的Woocommerce网站:https://docs.woothemes.com/document/woocommerce-order-delivery/("WooCommerce Order Delivery")

该插件现在显示在checkout_shipping部分的计费字段下的Checkout页面上,我试图通过挂钩到函数将此位置更改为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 回答

  • 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 这个

相关问题