post_type = get_post_type_object( $args['post_type'] ); $taxonomies = get_object_taxonomies( $args['post_type'], 'objects' ); $this->post_taxonomies = wp_filter_object_list( $taxonomies, [ 'public' => true, 'show_in_nav_menus' => true, ] ); parent::__construct( $args ); } public function get_priority(): int { return 70; } public function get_name(): string { return $this->post_type->name . '_archive'; } public function get_all_label(): string { return sprintf( __( '%s Archive', 'templately' ), $this->post_type->label ); } public function get_label(): string { return sprintf( __( '%s Archive', 'templately' ), $this->post_type->labels->singular_name ); } public function get_type(): string { return 'archive'; } public function check( $args = [] ): bool { return is_post_type_archive( $this->post_type->name ) || ( 'post' === $this->post_type->name && is_home() ); } protected function register_sub_conditions() { if ( ! empty( $this->post_taxonomies ) ) { foreach ( $this->post_taxonomies as $taxonomy => $taxonomy_object ) { $condition = new Taxonomy( [ 'taxonomy' => $taxonomy, 'instance' => $taxonomy_object ] ); $this->register_sub_condition( $condition ); } } if ( $this->post_type->name === 'product' ) { $condition = new ProductSearch(); $this->register_sub_condition( $condition ); } } }