Как самостоятельно инициализировать класс в разработке плагинов wp?

Ниже приведен пример кода для плагина WP. Я хочу включить таблицу стилей с функцией в классе. Но мой хук ‘init’ не будет запускать функцию init.

class RentProduct{

public function init() {

load_plugin_textdomain( 'eg', false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );

add_action( 'wp_enqueue_scripts', array( $this, 'register_plugin_styles' ) );

// add_filter( 'the_content', array( $this, 'append_post_notification' ) );
}


public function register_plugin_styles() {
wp_register_style( 'style', plugins_url( 'eg/assets/css/style.css' ) );
wp_enqueue_style( 'style' );
}
}

add_action( 'init', array( 'RentProduct', 'init' ));

1

Решение

Если бы у меня был режим отладки раньше .. я мог бы увидеть ошибку, $this is undefined, Я должен был использовать имя класса вместо $ this. Причина, по которой я не могу использовать $ this, это еще не инициализированный класс, а $ this — экземпляр класса. Таким образом, $ this будет работать нормально в других методах инициализации класса coz, уже выполненных в то время.

class RentProduct{

public static function init() {

// load_plugin_textdomain( 'lang', false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );

add_action( 'wp_enqueue_scripts', array( 'RentProduct' , 'register_plugin_styles' ) );

// add_filter( 'the_content', array( $this, 'append_post_notification' ) );
}


public static function register_plugin_styles() {
wp_register_style( 'main', plugins_url( 'wc-rent-products/assets/css/main.css' ) );
wp_enqueue_style( 'main' );
}
}

add_action( 'init', array( 'RentProduct', 'init' ));
1

Другие решения

// create new instance from your class
$rentProduct = new RentProduct();

class RentProduct {
// __construct will be called, if you call the class
public function __construct() {
add_action( 'wp_enqueue_scripts', array( $this, 'register_plugin_styles' ) );
load_plugin_textdomain( 'eg', false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );
}


public function register_plugin_styles() {
wp_register_style( 'style', plugins_url( 'eg/assets/css/style.css' ) );
wp_enqueue_style( 'style' );
}
}
0

По вопросам рекламы [email protected]