因此,我的WooCommerce页面上有一个隐藏的重力形式(触发重力流)。将产品添加到购物车时触发此操作,但这不是我想要的。
我可以通过删除init上的操作来删除此行为。下面的动作是我不想要的行为。
add_action( 'init', 'remove_gravityflow_after_submit' );
function remove_gravityflow_after_submit(){
remove_action( 'gform_entry_pre_handle_confirmation', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_pre_handle_confirmation', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_after_submission', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_post_add_entry', array( gravity_flow(), 'action_gform_post_add_entry' ), 10 );
}
这很好,所以我以后可以在其他地方手动提交表单。
这种方法的问题是它禁用了我所有其他的重力形式。所以这让我开始思考..解决方案将是仅在我在WooCommerce页面上时删除此行为。如果我可以使它工作,哪一个还不可行
我的解决方法是
add_action( 'init', 'remove_gravityflow_after_submit' );
function remove_gravityflow_after_submit(){
if ( is_woocommerce() || is_product() ){
remove_action( 'gform_entry_pre_handle_confirmation', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_pre_handle_confirmation', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_after_submission', array( gravity_flow(), 'after_submission' ), 9 );
remove_action( 'gform_post_add_entry', array( gravity_flow(), 'action_gform_post_add_entry' ), 10 );
}
}
但这不能正常工作,主要是因为我认为此时尚未加载WooCommerce,因此条件条件不起作用。另一个选择是将删除的操作重新添加
if ( is_woocommerce() ) { ... remove action } else { add_action }
但是因为我不能在'init'中使用条件,所以我也不能使这种方法起作用。做这样的事情的最佳方法是什么?我还尝试了删除'template_redirect'挂钩,但是它也不起作用。