在WordPress插件中,作者定义了父类,并使用标准实例方法供其他插件作者访问插件示例:
function WP_Plugin() {
return WP_PLUGIN_NAME::instance();
}
在
__construct
在其他几个类上初始化该插件类的函数require\\u一次示例:
require_once( \'includes/class-wp-plugin-child-class.php\' );
该类还具有
__construct
函数(在初始化主类时运行)。
问题是,从主类加载的其他类没有实例方法或任何直接访问它们的方式(我可以找到)
如何访问这些其他类中的任何函数/挂钩/等。当然不需要重新说明类别,即:
$subclass = new WpPluginChildClass();
将不起作用(它将触发所有
__construct
函数等重新运行)。
<小时>Edit - 添加更多详细和精确的示例插件代码,尝试使用。
我在几个不同的较大插件中遇到过这种情况(尤其是与WooCommerce相关的插件)。目前我正在尝试的是一个付费插件,所以我觉得我只需负责包含与问题相关的内容:)
该插件使用单例实例化模式:
class WC_Freshdesk {
protected static $instance = null;
public static function get_instance() {
// If the single instance hasn\'t been set, set it now.
if ( null == self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
}
在
__construct()
方法父类包括多个文件。其中之一是儿童班。
class WC_Freshdesk_Integration extends WC_Integration {
public function __construct() {
add_action( \'woocommerce_view_order\', array( $this, \'view_order_create_ticket\' ), 40 );
}
}
我正在尝试访问add\\u操作,以将其从主题模板中删除。
我尝试了以下方法:
$freshdesk = WC_Freshdesk::get_instance();
remove_action( \'woocommerce_view_order\', array( $freshdesk, \'view_order_create_ticket\', 40 ) );
那里没有骰子。
然后尝试时:
$freshdesk = new WC_Freshdesk_Integration();
remove_action( \'woocommerce_view_order\', array( $freshdesk, \'view_order_create_ticket\', 40 ) );
显然,我最终重新声明了WC\\u Freshdesk\\u integration()类,因为add\\u操作挂钩运行了两次。
访问此子类以删除该操作的正确方法是什么?