You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.3 KiB
56 lines
1.3 KiB
9 months ago
|
<?php
|
||
|
/**
|
||
|
* A registry for storing all meta boxes.
|
||
|
*
|
||
|
* @link https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html
|
||
|
*/
|
||
|
class RWMB_Meta_Box_Registry {
|
||
|
private $data = [];
|
||
|
|
||
|
/**
|
||
|
* Create a meta box object.
|
||
|
*
|
||
|
* @param array $settings Meta box settings.
|
||
|
* @return \RW_Meta_Box
|
||
|
*/
|
||
|
public function make( array $settings ) {
|
||
|
$class_name = apply_filters( 'rwmb_meta_box_class_name', 'RW_Meta_Box', $settings );
|
||
|
|
||
|
$meta_box = new $class_name( $settings );
|
||
|
$this->add( $meta_box );
|
||
|
return $meta_box;
|
||
|
}
|
||
|
|
||
|
public function add( RW_Meta_Box $meta_box ) {
|
||
|
$this->data[ $meta_box->id ] = $meta_box;
|
||
|
}
|
||
|
|
||
|
public function get( $id ) {
|
||
|
return $this->data[ $id ] ?? false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get meta boxes under some conditions.
|
||
|
*
|
||
|
* @param array $args Custom argument to get meta boxes by.
|
||
|
*/
|
||
|
public function get_by( array $args ) : array {
|
||
|
$meta_boxes = $this->data;
|
||
|
foreach ( $meta_boxes as $index => $meta_box ) {
|
||
|
foreach ( $args as $key => $value ) {
|
||
|
$meta_box_key = 'object_type' === $key ? $meta_box->get_object_type() : $meta_box->$key;
|
||
|
if ( $meta_box_key !== $value ) {
|
||
|
unset( $meta_boxes[ $index ] );
|
||
|
continue 2; // Skip the meta box loop.
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $meta_boxes;
|
||
|
}
|
||
|
|
||
|
public function all() {
|
||
|
return $this->data;
|
||
|
}
|
||
|
}
|