Por que loop renderiza apenas a última metabox da matriz?

O auestion é, por que meu loop foreach processa metabox apenas com informações da última matriz? O código da class:

class CusomMetaBox { /** * Hook into the appropriate actions when the class is constructed. */ //public function __construct( $post_type, $unicname, $headline, $fieldDisc ) { public function __construct( $array ) { global $post; foreach ( $array as $metabox ) { $this->post_type = $metabox['post_type']; $this->unicname = $metabox['unicname']; $this->headline = $metabox['headline']; $this->fieldDisc = $metabox['field_desc']; add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) ); add_action( 'save_post', array( $this, 'save' ), 1, 2); } } here a goes other methods that render and save metaboxes... public function add_meta_box() { add_meta_box( $this->unicname ,$this->headline ,array( $this, 'render_meta_box_content' ) ,$this->post_type ,'advanced' ,'high' ); } 

Esta é function de functions.php que inicializa a class:

 function call_createCustomMetaBox() { new CusomMetaBox( array( 'eventdata'=>array( 'post_type'=>'event', 'unicname'=>'eventdata', 'headline'=>'Event Date', 'field_desc'=>'Enter the date of your event' ), 'eventplace'=>array( 'post_type'=>'event', 'unicname'=>'eventplace', 'headline'=>'Place of the event', 'field_desc'=>'Enter address of the event' ), 'productcost'=>array( 'post_type'=>'product', 'unicname'=>'productcost', 'headline'=>'Cost of the product', 'field_desc'=>'Enter the cost of the product. For example: 50.00$ per hour' ) ) ); } 

Eu não posso figrue, porque eu tenho apenas 1 checkbox meta em vez de 3 (2 na publicação do evento e 1 na publicação do produto)?

Solutions Collecting From Web of "Por que loop renderiza apenas a última metabox da matriz?"

É porque você está atribuindo seu último elemento de matriz às propriedades da sua class post_type , unicname , headline , fieldDisc

Uma vez que a input é uma matriz, você está substituindo as propriedades da class novamente e novamente, apenas o último elemento da matriz é salvo lá ( post_type , unicname , headline , fieldDisc ).

Então, o que eu sugiro é armazenar toda a matriz em uma propriedade ou tornar cada propriedade uma matriz para que eles ganhem espaço para manter vários valores

 public function __construct( $array ) { global $post; $this->metabox_array = $array; add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) ); add_action( 'save_post', array( $this, 'save' ), 1, 2); } //here a goes other methods that render and save metaboxes... public function add_meta_box() { //looping over all input array foreach ( $this->metabox_array as $metabox ) { add_meta_box( $metabox['unicname'] ,$metabox['headline'] ,array( $this, 'render_meta_box_content' ) ,$metabox['post_type'] ,'advanced' ,'high' ); } } 

Seu render_meta_box_content deve ter conteúdo em conformidade, ao fazer o loop sobre a matriz.