Код плагина не будет работать должным образом внутри класса

Я написал простой фрагмент кода (собранный из различных учебников по всему Интернету), который создает простой мета-ящик (называемый «Подзаголовок») и удаляет пользовательские поля из области администрирования.

Все работает отлично – пока я не помещаю код внутри класса. Как только я это сделаю, мета-окно прекратит сохранение в базе данных. Я подозревал, что это связано с тем, что мне нужно определить некоторые аргументы для конструктора, но все, что я попробую, терпит неудачу. Я не могу понять, что происходит не так, поэтому любая помощь будет принята с благодарностью! Вот код:

class MySubBoxClass { function __construct() { add_action( 'add_meta_boxes', array( $this, 'meta_box_add' ) ); //Hooks meta_box_add() onto the add_meta_boxes hook add_action( 'save_post', array( $this, 'save_meta_box', 10, 2 ) ); //Hooks save_meta_box() onto the save_post hook add_action('admin_init', array( $this, 'remove_custom_meta_boxes') );//Hooks remove_custom_meta_boxes() onto admin_init } public function meta_box_add() //Function that triggers the add_meta_box() WordPress function { add_meta_box( 'meta-box-id', 'SUBHEADING', array($this, 'html_form_func'), 'post', 'normal', 'high' ); //Adds meta box with HTML id "meta-box" to the admin panel in the edit posts screen //Calls the add_meta_box_cb_function() which creates the HTML form (see below) } public function html_form_func( $object ) //Creates the HTML form and outputs its value if it has one { wp_nonce_field( basename( __FILE__ ), 'meta_box_nonce' ); <label><input type="text" name="subheading" id="meta-box-input" size="144" value="<?php echo get_post_meta( $object->ID, 'subheading', true ); ?>" /></label> } public function save_meta_box( $post_id, $post ) { //Verifies the nonce before proceeding. if ( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], basename( __FILE__ ) ) ) return $post_id; //Gets the post type object $post_type = get_post_type_object( $post->post_type ); //Assigns '$new_meta_value' variable the value that was newly submitted through the HTML form input named 'subheading' $new_meta_value = ( isset( $_POST['subheading'] ) ? esc_attr( $_POST['subheading'] ) : '' ); //Assigns'$meta_key' variable the value 'subheading' $meta_key = 'subheading'; //Assigns $meta_value variable the value of the custom field (identified by the key '$meta_key') that is currently //associated with that post $meta_value = get_post_meta( $post_id, $meta_key, true ); //If a new meta value was added and the previous meta value had no value (== ''), add the new meta value if ( $new_meta_value && $meta_value == '' ) add_post_meta( $post_id, $meta_key, $new_meta_value, true ); //If the new meta value does not match the old value, update it elseif ( $new_meta_value && $new_meta_value != $meta_value ) update_post_meta( $post_id, $meta_key, $new_meta_value ); //If there is no new meta value but an old value exists, delete it //elseif ( $new_meta_value == '' && $meta_value ) //delete_post_meta( $post_id, $meta_key, $meta_value ); } public function remove_custom_meta_boxes() { remove_meta_box('postcustom','post','normal'); remove_meta_box('postcustom','page','normal'); } } $MySubBoxClass = new MySubBoxClass; 

Solutions Collecting From Web of "Код плагина не будет работать должным образом внутри класса"

Включить магический метод __construct

Вы должны изменить следующую строку

 $MySubBoxClass = new MySubBoxClass; 

В

 $MySubBoxClass = new MySubBoxClass(); 

Таким образом будет использоваться метод магии __construct() .
Теперь методы add_action не вызываются.

Ошибка в html_form_func( $object )

+ Изменить

 public function html_form_func( $object ) //Creates the HTML form and outputs its value if it has one { wp_nonce_field( basename( __FILE__ ), 'meta_box_nonce' ); <label><input type="text" name="subheading" id="meta-box-input" size="144" value="<?php echo get_post_meta( $object->ID, 'subheading', true ); ?>" /></label> } 

В

 public function html_form_func( $object ) //Creates the HTML form and outputs its value if it has one { wp_nonce_field( basename( __FILE__ ), 'meta_box_nonce' ); ?> <label><input type="text" name="subheading" id="meta-box-input" size="144" value="<?php echo get_post_meta( $object->ID, 'subheading', true ); ?>" /></label> <?php } 

Методы объектов по ссылке

+ Изменить

 function __construct() { add_action( 'add_meta_boxes', array( $this, 'meta_box_add' ) ); //Hooks meta_box_add() onto the add_meta_boxes hook add_action( 'save_post', array( $this, 'save_meta_box', 10, 2 ) ); //Hooks save_meta_box() onto the save_post hook add_action('admin_init', array( $this, 'remove_custom_meta_boxes') );//Hooks remove_custom_meta_boxes() onto admin_init } 

В

 function __construct() { add_action( 'add_meta_boxes', array( &$this, 'meta_box_add' ) ); //Hooks meta_box_add() onto the add_meta_boxes hook add_action( 'save_post', array( &$this, 'save_meta_box', 10, 2 ) ); //Hooks save_meta_box() onto the save_post hook add_action( 'admin_init', array( &$this, 'remove_custom_meta_boxes' ) );//Hooks remove_custom_meta_boxes() onto admin_init } 

Если вы используете методы объектов в add_action вы должны использовать &$this чтобы использовать $this в ссылке.