refactor(2meet-data-optimizer): resolve post_type/group/table mappings through the registry
- TMDO_Post_Fields::post_type_for_group() / groups_for_post_type() derive HivePress-style groups from their registry post_type scope (core keeps its own attachment / wc_product / nav_menu_item map); the three copy-pasted switches and the query router's POST_TYPE_GROUP_MAP use them - Term/comment backfill, shadow verifier and CLI take their groups from the registry (TMDO_Term_Comment_Backfill::registered_groups()); installer drops the hp_* entries already covered by its table patterns; REST listings default post type is filterable (tmdo_rest_default_post_type, default 'post') - Verify: NoHpMappingsTest guard + mapping/default tests; core unit 640 / integration 449, HP 146/49, WC 10/22 OK - PR: PR-020e
This commit is contained in:
@@ -43,6 +43,46 @@ if ( ! defined( 'ABSPATH' ) ) {
|
||||
*/
|
||||
final class TMDO_Post_Fields {
|
||||
|
||||
/**
|
||||
* Post type of each core group that is not scoped to post types in the
|
||||
* registry (wp_core spans every post type and is absent on purpose).
|
||||
*/
|
||||
private const GROUP_POST_TYPES = array(
|
||||
'attachment' => 'attachment',
|
||||
'wc_product' => 'product',
|
||||
'nav_menu_item' => 'nav_menu_item',
|
||||
);
|
||||
|
||||
/**
|
||||
* Primary post type of a post group: the registry scope for scoped groups
|
||||
* (e.g. the HivePress AddOn's), the core mapping otherwise.
|
||||
*
|
||||
* @param string $group Entity group name.
|
||||
* @return string|null Null for cross-post-type groups such as wp_core.
|
||||
*/
|
||||
public static function post_type_for_group( string $group ): ?string {
|
||||
$scoped = class_exists( 'TMDO_Entity_Registry' ) ? TMDO_Entity_Registry::get_group_post_types( 'post', $group ) : array();
|
||||
return $scoped[0] ?? ( self::GROUP_POST_TYPES[ $group ] ?? null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Post groups dedicated to a post type (wp_core excluded).
|
||||
*
|
||||
* @param string $post_type Post type slug.
|
||||
* @return string[]
|
||||
*/
|
||||
public static function groups_for_post_type( string $post_type ): array {
|
||||
$groups = array_keys( self::GROUP_POST_TYPES, $post_type, true );
|
||||
if ( class_exists( 'TMDO_Entity_Registry' ) ) {
|
||||
foreach ( TMDO_Entity_Registry::get_groups_for_type( 'post' ) as $group ) {
|
||||
if ( in_array( $post_type, TMDO_Entity_Registry::get_group_post_types( 'post', $group ), true ) ) {
|
||||
$groups[] = $group;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_values( array_unique( $groups ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook into WPDO entity field registration.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user