control_classes = array( 'Neve\\Admin\\Metabox\\Main', ); $this->control_classes = apply_filters( 'neve_filter_metabox_controls', $this->control_classes ); } /** * Instantiate the controls and actually load them into the control manager. */ public function load_controls() { if ( empty( $this->control_classes ) ) { return; } foreach ( $this->control_classes as $control_manager ) { if ( ! class_exists( $control_manager ) ) { continue; } $control_instance = new $control_manager(); if ( ! $control_instance instanceof Controls_Base ) { continue; } $control_instance->init(); $this->controls = array_merge( $this->controls, $control_instance->get_controls() ); } $this->order_by_priority(); } /** * The metabox content. */ public function render_controls() { global $post; foreach ( $this->controls as $control ) { $control->render( $post->ID ); } } /** * Save metabox content. * * @param int $post_id the post id. */ public function save( $post_id ) { foreach ( $this->controls as $control ) { $control->save( $post_id ); } } /** * Register meta box to control layout on pages and posts. */ public function add() { if ( $this->should_add_meta() === false ) { return; } $post_type = 'Neve'; $post_type_from_db = get_post_type(); if ( $post_type_from_db ) { $post_type = ucfirst( $post_type_from_db ); } add_meta_box( 'neve-page-settings', sprintf( /* translators: %s - post type */ __( '%s Settings', 'neve' ), $post_type ), array( $this, 'render_metabox' ), array( 'post', 'page', 'product' ), 'side' ); } /** * The metabox content. */ public function render_metabox() { $this->render_controls(); } /** * Decide if the metabox should be visible. * * @return bool */ public function should_add_meta() { global $post; if ( empty( $post ) ) { return false; } $restricted_pages_id = array(); if ( in_array( $post->ID, $restricted_pages_id ) ) { return false; } return true; } /** * Enqueue scripts and styles. */ public function enqueue() { $screen = get_current_screen(); if ( ! is_object( $screen ) ) { return; } if ( $screen->base !== 'post' ) { return; } wp_register_script( 'neve-metabox', NEVE_ASSETS_URL . 'js/metabox' . ( ( NEVE_DEBUG ) ? '' : '.min' ) . '.js', array( 'jquery' ), NEVE_VERSION, true ); wp_localize_script( 'neve-metabox', 'neveMetabox', $this->get_localization() ); wp_enqueue_script( 'neve-metabox' ); } /** * Localize the Metabox script. * * @return array */ private function get_localization() { return array(); } /** * Order the controls by given priority. */ private function order_by_priority() { $order = array(); foreach ( $this->controls as $key => $control_object ) { $order[ $key ] = $control_object->priority; } array_multisort( $order, SORT_ASC, $this->controls ); } }