diff --git a/wp-content/mu-plugins/object-cache-bootstrap.php b/wp-content/mu-plugins/object-cache-bootstrap.php new file mode 100644 index 0000000..007c115 --- /dev/null +++ b/wp-content/mu-plugins/object-cache-bootstrap.php @@ -0,0 +1,14 @@ +branch ) ) { $this->branch['address'] = get_option( 'branch_address' ) ?: carbon_get_theme_option( 'site_address' ) ?: carbon_get_post_meta( $this->post_id, 'contact_address' ) ?: ''; } + wp_cache_set( $cache_key, $this->branch['address'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['address']; } @@ -68,11 +74,17 @@ class Pksh_Data { * Координаты филиала (для карты) */ public function get_coords(): string { + $cache_key = 'dekart_branch_coords'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'coords', $this->branch ) ) { $this->branch['coords'] = get_option( 'branch_coords' ) ?: carbon_get_post_meta( $this->post_id, 'contact_location' ) ?: ''; } + wp_cache_set( $cache_key, $this->branch['coords'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['coords']; } @@ -80,12 +92,18 @@ class Pksh_Data { * Телефон филиала */ public function get_phone(): string { + $cache_key = 'dekart_branch_phone'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'phone', $this->branch ) ) { $this->branch['phone'] = get_option( 'branch_phone' ) ?: carbon_get_theme_option( 'site_phone' ) ?: carbon_get_post_meta( $this->post_id, 'contact_tel' ) ?: ''; } + wp_cache_set( $cache_key, $this->branch['phone'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['phone']; } @@ -103,12 +121,18 @@ class Pksh_Data { * Email филиала */ public function get_email(): string { + $cache_key = 'dekart_branch_email'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'email', $this->branch ) ) { $this->branch['email'] = get_option( 'branch_email' ) ?: carbon_get_theme_option( 'site_mail' ) ?: carbon_get_post_meta( $this->post_id, 'contact_mail' ) ?: ''; } + wp_cache_set( $cache_key, $this->branch['email'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['email']; } @@ -116,11 +140,17 @@ class Pksh_Data { * Название филиала / организации */ public function get_name(): string { + $cache_key = 'dekart_branch_name'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'name', $this->branch ) ) { $this->branch['name'] = get_option( 'branch_name' ) ?: carbon_get_theme_option( 'site_name' ) ?: 'Декарт'; } + wp_cache_set( $cache_key, $this->branch['name'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['name']; } @@ -128,9 +158,15 @@ class Pksh_Data { * Город с предлогом (например "в Щёлково") */ public function get_city_prep(): string { + $cache_key = 'dekart_branch_city_prep'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'city_prep', $this->branch ) ) { $this->branch['city_prep'] = get_option( 'branch_city_prep', 'в Щёлково' ); } + wp_cache_set( $cache_key, $this->branch['city_prep'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['city_prep']; } @@ -148,9 +184,15 @@ class Pksh_Data { * Количество отзывов на внешних площадках */ public function get_ext_review_count(): string { + $cache_key = 'dekart_branch_ext_review_count'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'ext_review_count', $this->branch ) ) { $this->branch['ext_review_count'] = get_option( 'branch_ext_review_count', '247' ); } + wp_cache_set( $cache_key, $this->branch['ext_review_count'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['ext_review_count']; } @@ -158,12 +200,18 @@ class Pksh_Data { * Социальные сети (из branch_social option или CF) */ public function get_social_links(): array { + $cache_key = 'dekart_branch_social'; + $cached = wp_cache_get( $cache_key, 'dekart_branch' ); + if ( false !== $cached ) { + return $cached; + } if ( ! array_key_exists( 'social', $this->branch ) ) { $raw = get_option( 'branch_social' ) ?: carbon_get_post_meta( $this->post_id, 'social_media' ) ?: []; $this->branch['social'] = is_array( $raw ) ? $raw : []; } + wp_cache_set( $cache_key, $this->branch['social'], 'dekart_branch', DAY_IN_SECONDS ); return $this->branch['social']; } diff --git a/wp-content/themes/dekart/inc/schema.php b/wp-content/themes/dekart/inc/schema.php index 53a9e5d..6e35d5b 100644 --- a/wp-content/themes/dekart/inc/schema.php +++ b/wp-content/themes/dekart/inc/schema.php @@ -67,6 +67,15 @@ function dekart_schema_output(): void { return; } + // Object Cache key: page ID + locale + schema version + $cache_key = 'dekart_schema_graph_' . get_the_ID() . '_' . determine_locale(); + $cached = wp_cache_get( $cache_key, 'dekart_schema' ); + + if ( false !== $cached ) { + echo $cached; + return; + } + $graph = array(); // 1. WebPage @@ -180,7 +189,12 @@ function dekart_schema_output(): void { return; // тихий выход вместо WSOD } - echo '' . "\n"; + $output = '' . "\n"; + + // Cache for 1 hour (3600 seconds) in 'dekart_schema' group + wp_cache_set( $cache_key, $output, 'dekart_schema', 3600 ); + + echo $output; } /* =====================================================================