data[$name] ) ) { return $this->data[$name]; } /* translators: %s: Property name */ throw new \Exception( sprintf( esc_html__( 'Undefined property %s', 'timetics' ), esc_attr( $name ) ) ); } /** * Set dynamic property * * @param string $key * @param mixed $value * * @return void */ public function __set( $key, $value ) { if ( ! isset( $this->data[$key] ) ) { /* translators: %s: Property name */ throw new \Exception( sprintf( esc_html__( 'Undefined property %s', 'timetics' ), esc_attr( $key ) ) ); } $this->data[$key] = $value; } /** * Debug info for current object * * @return mixed */ public function __debugInfo() { return $this->data; } /** * Handle dynamic static method call * * @param string $method Method name for dynamic call * @param mixed $params method params * * @return string */ public static function __callStatic( $method, $params ) { return static::forwardCallToStatic( new static , $method, $params ); } /** * Handle dynamic method call * * @param string $method Method name for dynamic call * @param mixed $params method params * * @return string */ public function __call( $method, $params ) { return static::forwardCallToStatic( ( new static ), $method, $params ); } /** * Get property of current post * * @return mixed */ public function get_prop( $name = '' ) { $key = $this->prefix . $name; return get_post_meta( $this->id, $key, true ); } /** * Convert object property to an Array * * @return array */ public function toArray() { $items = []; $data = $this->data; $items['id'] = $this->id; unset( $data['id'] ); foreach ( $data as $key => $value ) { $prop = $this->get_prop( $key ); $items[$key] = '' === $prop ? $value : $prop; } return $items; } /** * Get all models * * @return array */ public static function all( $data = [] ) { $models = []; $model = new static(); $meta = []; if ( $data ) { foreach ( $data as $key => $value ) { $meta_data = [ 'key' => $model->prefix . $key, 'value' => $value, 'compare' => '=', ]; $meta[] = $meta_data; } } $args = [ 'post_type' => $model->post_type, ]; if ( $meta ) { $meta['relation'] = 'AND'; // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Meta query is necessary for filtering posts by meta fields $args['meta_query'] = $meta; } $posts = get_posts( $args ); foreach ( $posts as $post ) { $object = new static(); $model->load( $object, $post ); $models[] = $object; } return $models; } }