b4400a68e5
Baseline before backporting wp-data-optimizer v3.0.1-v3.4.6. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TbG1keQQ7XBa7qMQY16KCY
178 lines
5.7 KiB
PHP
178 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* Bootstrap for 2meet Data Optimizer HivePress AddOn.
|
|
*
|
|
* 載入 13 adapter + 7 interceptor + 5 query interceptor + 補助組件 +
|
|
* admin tab + CLI namespace。
|
|
*
|
|
* 注意:HP 的 V3.0.0 family bootstrap 內部也有一個 class TMDO_HivePress_Bootstrap
|
|
* (在 includes/hivepress/class-tmdo-hivepress-bootstrap.php)。為避免衝突,本
|
|
* AddOn outer bootstrap 改名為 TMDO_HP_Bootstrap。
|
|
*
|
|
* @package TMDO_HIVEPRESS
|
|
* @since 0.1.0
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
final class TMDO_HP_Bootstrap {
|
|
|
|
public static function init(): void {
|
|
if ( ! class_exists( 'TMDO_API' ) && ! class_exists( 'WPDO_API' ) ) {
|
|
add_action( 'admin_notices', array( __CLASS__, 'missing_core_notice' ) );
|
|
return;
|
|
}
|
|
|
|
load_plugin_textdomain(
|
|
'tmdo-hivepress',
|
|
false,
|
|
dirname( plugin_basename( TMDO_HIVEPRESS_FILE ) ) . '/languages'
|
|
);
|
|
|
|
self::require_files();
|
|
self::register_hooks();
|
|
}
|
|
|
|
private static function require_files(): void {
|
|
$base = TMDO_HIVEPRESS_PATH;
|
|
|
|
// HivePress family bootstrap framework
|
|
require_once $base . 'includes/hivepress/interface-tmdo-hp-adapter.php';
|
|
require_once $base . 'includes/hivepress/trait-tmdo-hp-adapter.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-detector.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-conflict-guard.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-bootstrap.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-comment-router.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-cron-optimizer.php';
|
|
|
|
// 13 adapters
|
|
foreach ( array(
|
|
'core', 'reviews', 'favorites', 'messages', 'memberships',
|
|
'requests', 'tags', 'seo', 'social-links', 'blocks',
|
|
'bookings', 'marketplace', 'statistics',
|
|
) as $adapter_slug ) {
|
|
$file = $base . "includes/hivepress/adapters/class-tmdo-hivepress-{$adapter_slug}-adapter.php";
|
|
if ( file_exists( $file ) ) {
|
|
require_once $file;
|
|
}
|
|
}
|
|
|
|
// HP misc components
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-attribute-bridge.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-suitability-scorer.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-benchmark.php';
|
|
require_once $base . 'includes/hivepress/class-tmdo-hivepress-rest.php';
|
|
|
|
// 7 HPCT interceptors
|
|
foreach ( array(
|
|
'reviews', 'messages', 'favorites', 'memberships',
|
|
'statistics', 'requests', 'listing-meta',
|
|
) as $intslug ) {
|
|
$file = $base . "includes/interceptors/class-tmdo-{$intslug}-interceptor.php";
|
|
if ( file_exists( $file ) ) {
|
|
require_once $file;
|
|
}
|
|
}
|
|
|
|
// 5 query interceptors
|
|
foreach ( array(
|
|
'reviews', 'messages', 'memberships', 'requests', 'listing-meta',
|
|
) as $qslug ) {
|
|
$file = $base . "includes/query/class-tmdo-{$qslug}-query.php";
|
|
if ( file_exists( $file ) ) {
|
|
require_once $file;
|
|
}
|
|
}
|
|
|
|
// Misc HP integration files
|
|
require_once $base . 'includes/class-tmdo-hivepress.php';
|
|
require_once $base . 'includes/class-tmdo-hivepress-transient-filter.php';
|
|
require_once $base . 'includes/class-tmdo-hpct-import.php';
|
|
require_once $base . 'includes/class-tmdo-hivepress-term-comment-fields.php';
|
|
require_once $base . 'includes/class-tmdo-listing-stats.php';
|
|
}
|
|
|
|
private static function register_hooks(): void {
|
|
// HP family v3.0.0 per-addon adapter bootstrap
|
|
// (TMDO_HivePress_Bootstrap is the inner family bootstrap class
|
|
// from includes/hivepress/class-tmdo-hivepress-bootstrap.php)
|
|
if ( class_exists( 'TMDO_HivePress_Bootstrap' )
|
|
&& method_exists( 'TMDO_HivePress_Bootstrap', 'boot' ) ) {
|
|
TMDO_HivePress_Bootstrap::boot();
|
|
}
|
|
|
|
// 7 HPCT interceptors
|
|
foreach ( array(
|
|
'TMDO_Reviews_Interceptor',
|
|
'TMDO_Messages_Interceptor',
|
|
'TMDO_Favorites_Interceptor',
|
|
'TMDO_Memberships_Interceptor',
|
|
'TMDO_Statistics_Interceptor',
|
|
'TMDO_Requests_Interceptor',
|
|
'TMDO_Listing_Meta_Interceptor',
|
|
) as $cls ) {
|
|
if ( class_exists( $cls ) ) {
|
|
( new $cls() )->register_hooks();
|
|
}
|
|
}
|
|
|
|
// 5 query interceptors
|
|
foreach ( array(
|
|
'TMDO_Reviews_Query',
|
|
'TMDO_Messages_Query',
|
|
'TMDO_Memberships_Query',
|
|
'TMDO_Requests_Query',
|
|
'TMDO_Listing_Meta_Query',
|
|
) as $cls ) {
|
|
if ( class_exists( $cls ) ) {
|
|
( new $cls() )->register_hooks();
|
|
}
|
|
}
|
|
|
|
// HP transient filter (init:5)
|
|
if ( class_exists( 'TMDO_Hivepress_Transient_Filter' ) ) {
|
|
add_action( 'init', array( 'TMDO_Hivepress_Transient_Filter', 'init' ), 5 );
|
|
}
|
|
|
|
// Listing Stats hooks + cron
|
|
if ( class_exists( 'TMDO_Listing_Stats' ) ) {
|
|
TMDO_Listing_Stats::register_hooks();
|
|
TMDO_Listing_Stats::schedule_cron();
|
|
}
|
|
|
|
// Term/Comment fields
|
|
if ( class_exists( 'TMDO_Hivepress_Term_Comment_Fields' )
|
|
&& method_exists( 'TMDO_Hivepress_Term_Comment_Fields', 'register' ) ) {
|
|
TMDO_Hivepress_Term_Comment_Fields::register();
|
|
}
|
|
|
|
// Admin tab
|
|
if ( is_admin() ) {
|
|
$admin_file = TMDO_HIVEPRESS_PATH . 'admin/class-tmdo-admin-hivepress.php';
|
|
if ( file_exists( $admin_file ) ) {
|
|
require_once $admin_file;
|
|
}
|
|
}
|
|
|
|
// CLI namespace
|
|
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
|
$cli_file = TMDO_HIVEPRESS_PATH . 'cli/class-tmdo-cli-hivepress.php';
|
|
if ( file_exists( $cli_file ) ) {
|
|
require_once $cli_file;
|
|
if ( class_exists( 'TMDO_CLI_HivePress' ) ) {
|
|
\WP_CLI::add_command( 'tmdo hivepress', 'TMDO_CLI_HivePress' );
|
|
\WP_CLI::add_command( 'wpdo hivepress', 'TMDO_CLI_HivePress' );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function missing_core_notice(): void {
|
|
echo '<div class="notice notice-error"><p>';
|
|
echo esc_html__( '2meet Data Optimizer HivePress AddOn 需要 2meet-data-optimizer 核心外掛,請先安裝並啟用。', 'tmdo-hivepress' );
|
|
echo '</p></div>';
|
|
}
|
|
}
|