1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<?php /** * Class RESTPreloader. * * @package AmpProject\AmpWP */
namespace AmpProject\AmpWP\Admin;
use AmpProject\AmpWP\Infrastructure\Service;
/** * Preloads REST responses for client-side applications to prevent having to call fetch on page load. * * @package AmpProject\AmpWP * @since 2.0 * @internal */ final class RESTPreloader implements Service {
/** * Paths to preload. * * @var array */ private $paths = [];
/** * Adds a REST path to be preloaded. * * @param string $path A REST path to cache for apiFetch middleware. */ public function add_preloaded_path( $path ) { // Delay adding the preload_data action hook until after a path is added. if ( empty( $this->paths ) ) { add_action( 'admin_enqueue_scripts', [ $this, 'preload_data' ], 99 ); }
if ( ! in_array( $path, $this->paths, true ) ) { $this->paths[] = $path; } }
/** * Preloads data using apiFetch preloading middleware. */ public function preload_data() { if ( ! function_exists( 'rest_preload_api_request' ) ) { // Not available pre-5.0. return; }
$preload_data = array_reduce( $this->paths, 'rest_preload_api_request', [] );
wp_add_inline_script( 'wp-api-fetch', sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ), 'after' ); } }
|