termmeta; } public function get_entity_id_column(): string { return 'term_id'; } public function get_primary_table(): string { global $wpdb; return $wpdb->terms; } public function get_primary_id_column(): string { return 'term_id'; } public function get_cache_group(): string { return 'wpdo_term_profile'; } public function get_delete_hook(): string { return 'delete_term'; } public function extend_native_query( $query_object ): void { // Term 查詢使用 terms_clauses filter,不使用 $query_object } /** * Term 特有:透過 terms_clauses filter 注入 */ public function extend_term_clauses( array $clauses, array $taxonomies, array $args ): array { if ( empty( $args['wpdo_meta_query'] ) || ! is_array( $args['wpdo_meta_query'] ) ) { return $clauses; } return TMDO_Query_Compiler::inject_into_terms_clauses( $clauses, $args['wpdo_meta_query'] ); } public function get_entity_ids_after( int $after_id, int $limit ): array { global $wpdb; return array_map( 'intval', $wpdb->get_col( $wpdb->prepare( "SELECT term_id FROM `{$wpdb->terms}` WHERE term_id > %d ORDER BY term_id ASC LIMIT %d", $after_id, $limit ) ) ?: array() ); } } // 註冊 terms_clauses filter(unit test 下 add_filter 未載入時跳過) if ( function_exists( 'add_filter' ) ) { add_filter( 'terms_clauses', function ( $clauses, $taxonomies, $args ) { $adapter = TMDO_Entity_Registry::get_adapter( 'term' ); if ( $adapter instanceof TMDO_Adapter_Term ) { return $adapter->extend_term_clauses( $clauses, $taxonomies, $args ); } return $clauses; }, 10, 3 ); }