PluginProbe
Parse.ly / 3.8.1
Parse.ly v3.8.1
3.24.1 3.24.0 3.23.7 3.23.6 3.23.5 3.23.4 3.23.3 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.17.0 3.18.0 3.18.1 3.19.0 3.19.1 3.19.2 3.19.3 3.2.0 3.2.1 3.20.0 3.20.1 3.20.2 3.20.3 All 105 releases
wp-parsely / wp-parsely.php

wp-parsely.php in Parse.ly 3.8.1, at wp-parsely.php

297 lines 10.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Parse.ly
4 *
5 * @package Parsely
6 * @author Parse.ly
7 * @copyright 2012 Parse.ly
8 * @license GPL-2.0-or-later
9 *
10 * @wordpress-plugin
11 * Plugin Name: Parse.ly
12 * Plugin URI: https://www.parse.ly/help/integration/wordpress
13 * Description: This plugin makes it a snap to add Parse.ly tracking code and metadata to your WordPress blog.
14 * Version: 3.8.1
15 * Author: Parse.ly
16 * Author URI: https://www.parse.ly
17 * Text Domain: wp-parsely
18 * License: GPL-2.0-or-later
19 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
20 * GitHub Plugin URI: https://github.com/Parsely/wp-parsely
21 * Requires PHP: 7.2
22 * Requires WP: 5.0.0
23 */
24
25 declare(strict_types=1);
26
27 namespace Parsely;
28
29 use Parsely\ContentHelper\Dashboard_Widget;
30 use Parsely\Endpoints\Analytics_Post_Detail_API_Proxy;
31 use Parsely\Endpoints\Analytics_Posts_API_Proxy;
32 use Parsely\Endpoints\GraphQL_Metadata;
33 use Parsely\Endpoints\Referrers_Post_Detail_API_Proxy;
34 use Parsely\Endpoints\Related_API_Proxy;
35 use Parsely\Endpoints\Rest_Metadata;
36 use Parsely\Integrations\Amp;
37 use Parsely\Integrations\Facebook_Instant_Articles;
38 use Parsely\Integrations\Google_Web_Stories;
39 use Parsely\Integrations\Integrations;
40 use Parsely\RemoteAPI\Analytics_Post_Detail_API;
41 use Parsely\RemoteAPI\Analytics_Posts_API;
42 use Parsely\RemoteAPI\Remote_API_Cache;
43 use Parsely\RemoteAPI\Referrers_Post_Detail_API;
44 use Parsely\RemoteAPI\Related_API;
45 use Parsely\RemoteAPI\WordPress_Cache;
46 use Parsely\UI\Admin_Bar;
47 use Parsely\UI\Admin_Columns_Parsely_Stats;
48 use Parsely\UI\Admin_Warning;
49 use Parsely\UI\Metadata_Renderer;
50 use Parsely\UI\Network_Admin_Sites_List;
51 use Parsely\UI\Plugins_Actions;
52 use Parsely\UI\Recommended_Widget;
53 use Parsely\UI\Row_Actions;
54 use Parsely\UI\Settings_Page;
55 use Parsely\UI\Site_Health;
56
57 require_once __DIR__ . '/src/Utils/utils.php';
58
59 if ( class_exists( Parsely::class ) ) {
60 return;
61 }
62
63 const PARSELY_VERSION = '3.8.1';
64 const PARSELY_FILE = __FILE__;
65
66 require_once __DIR__ . '/src/class-parsely.php';
67 require_once __DIR__ . '/src/class-scripts.php';
68 require_once __DIR__ . '/src/class-dashboard-link.php';
69 require_once __DIR__ . '/src/UI/class-admin-bar.php';
70 require_once __DIR__ . '/src/UI/class-metadata-renderer.php';
71 require_once __DIR__ . '/src/Endpoints/class-metadata-endpoint.php';
72 require_once __DIR__ . '/src/Endpoints/class-graphql-metadata.php';
73
74 require_once __DIR__ . '/src/class-metadata.php';
75 require_once __DIR__ . '/src/Metadata/class-metadata-builder.php';
76 require_once __DIR__ . '/src/Metadata/class-author-archive-builder.php';
77 require_once __DIR__ . '/src/Metadata/class-category-builder.php';
78 require_once __DIR__ . '/src/Metadata/class-date-builder.php';
79 require_once __DIR__ . '/src/Metadata/class-front-page-builder.php';
80 require_once __DIR__ . '/src/Metadata/class-page-builder.php';
81 require_once __DIR__ . '/src/Metadata/class-page-for-posts-builder.php';
82 require_once __DIR__ . '/src/Metadata/class-paginated-front-page-builder.php';
83 require_once __DIR__ . '/src/Metadata/class-post-builder.php';
84 require_once __DIR__ . '/src/Metadata/class-tag-builder.php';
85
86 add_action( 'plugins_loaded', __NAMESPACE__ . '\\parsely_initialize_plugin' );
87 /**
88 * Registers the basic classes to initialize the plugin.
89 */
90 function parsely_initialize_plugin(): void {
91 $GLOBALS['parsely'] = new Parsely();
92 $GLOBALS['parsely']->run();
93
94 if ( class_exists( 'WPGraphQL' ) ) {
95 $graphql = new GraphQL_Metadata( $GLOBALS['parsely'] );
96 $graphql->run();
97 }
98
99 $scripts = new Scripts( $GLOBALS['parsely'] );
100 $scripts->run();
101
102 $admin_bar = new Admin_Bar( $GLOBALS['parsely'] );
103 $admin_bar->run();
104
105 $metadata_renderer = new Metadata_Renderer( $GLOBALS['parsely'] );
106 $metadata_renderer->run();
107 }
108
109 require_once __DIR__ . '/src/UI/class-admin-columns-parsely-stats.php';
110 require_once __DIR__ . '/src/UI/class-admin-warning.php';
111 require_once __DIR__ . '/src/UI/class-plugins-actions.php';
112 require_once __DIR__ . '/src/UI/class-row-actions.php';
113 require_once __DIR__ . '/src/UI/class-site-health.php';
114 require_once __DIR__ . '/src/content-helper/dashboard-widget/class-dashboard-widget.php';
115
116 add_action( 'admin_init', __NAMESPACE__ . '\\parsely_admin_init_register' );
117 /**
118 * Registers the Parse.ly wp-admin warnings, plugin actions and row actions.
119 */
120 function parsely_admin_init_register(): void {
121 $parsely = $GLOBALS['parsely'];
122
123 ( new Admin_Warning( $parsely ) )->run();
124 ( new Plugins_Actions() )->run();
125 ( new Row_Actions( $parsely ) )->run();
126 ( new Admin_Columns_Parsely_Stats( $parsely ) )->run();
127 ( new Site_Health( $parsely ) )->run();
128 ( new Dashboard_Widget() )->run();
129 }
130
131 require_once __DIR__ . '/src/UI/class-settings-page.php';
132 require_once __DIR__ . '/src/UI/class-network-admin-sites-list.php';
133
134 add_action( 'init', __NAMESPACE__ . '\\parsely_wp_admin_early_register' );
135 /**
136 * Registers the additions the Parse.ly wp-admin settings page and Multisite
137 * Network Admin Sites List table.
138 */
139 function parsely_wp_admin_early_register(): void {
140 $GLOBALS['parsely_settings_page'] = new Settings_Page( $GLOBALS['parsely'] );
141 $GLOBALS['parsely_settings_page']->run();
142
143 $network_admin_sites_list = new Network_Admin_Sites_List( $GLOBALS['parsely'] );
144 $network_admin_sites_list->run();
145 }
146
147 require_once __DIR__ . '/src/RemoteAPI/interface-cache.php';
148 require_once __DIR__ . '/src/RemoteAPI/interface-remote-api.php';
149 require_once __DIR__ . '/src/RemoteAPI/class-remote-api-base.php';
150 require_once __DIR__ . '/src/RemoteAPI/class-remote-api-cache.php';
151 require_once __DIR__ . '/src/RemoteAPI/class-related-api.php';
152 require_once __DIR__ . '/src/RemoteAPI/class-analytics-posts-api.php';
153 require_once __DIR__ . '/src/RemoteAPI/class-analytics-post-detail-api.php';
154 require_once __DIR__ . '/src/RemoteAPI/class-referrers-post-detail-api.php';
155 require_once __DIR__ . '/src/RemoteAPI/class-wordpress-cache.php';
156
157 require_once __DIR__ . '/src/Endpoints/class-base-api-proxy.php';
158 require_once __DIR__ . '/src/Endpoints/class-related-api-proxy.php';
159 require_once __DIR__ . '/src/Endpoints/class-analytics-posts-api-proxy.php';
160 require_once __DIR__ . '/src/Endpoints/class-analytics-post-detail-api-proxy.php';
161 require_once __DIR__ . '/src/Endpoints/class-referrers-post-detail-api-proxy.php';
162 require_once __DIR__ . '/src/Endpoints/class-rest-metadata.php';
163
164 add_action( 'rest_api_init', __NAMESPACE__ . '\\parsely_rest_api_init' );
165 /**
166 * Registers REST Endpoints that act as a proxy to the Parse.ly API.
167 * This is needed to get around CORS issues with Firefox.
168 *
169 * @since 3.2.0
170 */
171 function parsely_rest_api_init(): void {
172 $wp_cache = new WordPress_Cache();
173 $rest = new Rest_Metadata( $GLOBALS['parsely'] );
174 $rest->run();
175
176 parsely_run_rest_api_endpoint(
177 Related_API::class,
178 Related_API_Proxy::class,
179 $wp_cache
180 );
181
182 parsely_run_rest_api_endpoint(
183 Analytics_Posts_API::class,
184 Analytics_Posts_API_Proxy::class,
185 $wp_cache
186 );
187
188 parsely_run_rest_api_endpoint(
189 Analytics_Post_Detail_API::class,
190 Analytics_Post_Detail_API_Proxy::class,
191 $wp_cache
192 );
193
194 parsely_run_rest_api_endpoint(
195 Referrers_Post_Detail_API::class,
196 Referrers_Post_Detail_API_Proxy::class,
197 $wp_cache
198 );
199 }
200
201 require_once __DIR__ . '/src/blocks/recommendations/class-recommendations-block.php';
202
203 add_action( 'init', __NAMESPACE__ . '\\init_recommendations_block' );
204 /**
205 * Registers the Recommendations Block.
206 */
207 function init_recommendations_block(): void {
208 $recommendations_block = new Recommendations_Block();
209 $recommendations_block->run();
210 }
211
212 require_once __DIR__ . '/src/blocks/content-helper/class-content-helper.php';
213
214 add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\init_content_helper' );
215 /**
216 * Inserts the PCH Editor Sidebar.
217 *
218 * @since 3.5.0 Moved from Parsely\Scripts\enqueue_block_editor_assets()
219 */
220 function init_content_helper(): void {
221 ( new Content_Helper() )->run();
222 }
223
224 require_once __DIR__ . '/src/UI/class-recommended-widget.php';
225
226 add_action( 'widgets_init', __NAMESPACE__ . '\\parsely_recommended_widget_register' );
227 /**
228 * Registers the Parse.ly Recommended widget.
229 */
230 function parsely_recommended_widget_register(): void {
231 register_widget( new Recommended_Widget( $GLOBALS['parsely'] ) );
232 }
233
234 require_once __DIR__ . '/src/Integrations/class-integration.php';
235 require_once __DIR__ . '/src/Integrations/class-integrations.php';
236 require_once __DIR__ . '/src/Integrations/class-amp.php';
237 require_once __DIR__ . '/src/Integrations/class-facebook-instant-articles.php';
238 require_once __DIR__ . '/src/Integrations/class-google-web-stories.php';
239
240 add_action( 'init', __NAMESPACE__ . '\\parsely_integrations' ); // @phpstan-ignore-line
241 /**
242 * Instantiates Integrations collection and registers built-in integrations.
243 *
244 * @since 2.6.0
245 *
246 * @param Parsely|string|null $parsely The Parsely object to pass to the integrations.
247 * @return Integrations
248 */
249 function parsely_integrations( $parsely = null ): Integrations {
250 // If $parsely value is "", then this function is being called by the init
251 // hook and we can get the value from $GLOBALS. If $parsely is an instance
252 // of the Parsely object, then this function is being called by a test.
253 if ( ! is_object( $parsely ) || get_class( $parsely ) !== Parsely::class ) {
254 $parsely = $GLOBALS['parsely'];
255 }
256
257 $parsely_integrations = new Integrations( $parsely );
258 $parsely_integrations->register( 'amp', Amp::class );
259 $parsely_integrations->register( 'fbia', Facebook_Instant_Articles::class );
260 $parsely_integrations->register( 'webstories', Google_Web_Stories::class );
261 $parsely_integrations = apply_filters( 'wp_parsely_add_integration', $parsely_integrations );
262 $parsely_integrations->integrate();
263
264 return $parsely_integrations;
265 }
266
267 /**
268 * Instantiates and runs the specified API endpoint.
269 *
270 * @since 3.6.0
271 *
272 * @param string $api_class_name The proxy class to instantiate.
273 * @param string $proxy_api_class_name The API proxy class to instantiate and run.
274 * @param WordPress_Cache $wp_cache The WordPress cache instance to be used.
275 */
276 function parsely_run_rest_api_endpoint(
277 string $api_class_name,
278 string $proxy_api_class_name,
279 WordPress_Cache &$wp_cache
280 ): void {
281 /**
282 * Internal Variable.
283 *
284 * @var RemoteAPI\Remote_API_Base
285 */
286 $remote_api = new $api_class_name( $GLOBALS['parsely'] );
287 $remote_api_cache = new Remote_API_Cache( $remote_api, $wp_cache );
288
289 /**
290 * Internal Variable.
291 *
292 * @var Endpoints\Base_API_Proxy
293 */
294 $remote_api_proxy = new $proxy_api_class_name( $GLOBALS['parsely'], $remote_api_cache );
295 $remote_api_proxy->run();
296 }
297