PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.1.3
Jetpack – WP Security, Backup, Speed, & Growth v12.1.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / infinite-scroll.php
jetpack / modules Last commit date
calypsoify 3 years ago carousel 3 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 3 years ago contact-form 1 year ago custom-css 3 years ago custom-post-types 3 years ago geo-location 4 years ago google-analytics 3 years ago gravatar 6 years ago infinite-scroll 3 years ago likes 3 years ago markdown 3 years ago masterbar 3 years ago memberships 3 years ago photon 6 years ago photon-cdn 3 years ago plugin-search 4 years ago post-by-email 3 years ago related-posts 3 years ago scan 3 years ago seo-tools 3 years ago sharedaddy 3 years ago shortcodes 3 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 3 years ago sso 3 years ago stats 3 years ago subscriptions 3 years ago theme-tools 3 years ago tiled-gallery 3 years ago verification-tools 4 years ago videopress 3 years ago widget-visibility 3 years ago widgets 3 years ago woocommerce-analytics 4 years ago wordads 3 years ago wpcom-block-editor 4 years ago wpcom-tos 5 years ago action-bar.php 3 years ago carousel.php 4 years ago comment-likes.php 3 years ago comments.php 4 years ago contact-form.php 3 years ago copy-post.php 3 years ago custom-content-types.php 4 years ago custom-css.php 3 years ago enhanced-distribution.php 4 years ago geo-location.php 4 years ago google-analytics.php 4 years ago google-fonts.php 3 years ago gravatar-hovercards.php 3 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago lazy-images.php 4 years ago likes.php 3 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 3 years ago module-info.php 3 years ago monitor.php 4 years ago notes.php 3 years ago photon-cdn.php 3 years ago photon.php 4 years ago plugin-search.php 3 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 3 years ago publicize.php 3 years ago related-posts.php 4 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 4 years ago shortcodes.php 3 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 3 years ago stats.php 3 years ago subscriptions.php 3 years ago theme-tools.php 3 years ago tiled-gallery.php 4 years ago vaultpress.php 4 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 3 years ago widget-visibility.php 4 years ago widgets.php 3 years ago woocommerce-analytics.php 5 years ago wordads.php 5 years ago wpgroho.js 6 years ago
infinite-scroll.php
244 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Infinite Scroll
4 * Module Description: Automatically load new content when a visitor scrolls
5 * Sort Order: 26
6 * First Introduced: 2.0
7 * Requires Connection: No
8 * Auto Activate: No
9 * Module Tags: Appearance
10 * Feature: Appearance
11 * Additional Search Queries: scroll, infinite, infinite scroll
12 */
13
14 use Automattic\Jetpack\Stats\Options as Stats_Options;
15
16 /**
17 * Jetpack-specific elements of Infinite Scroll
18 */
19 class Jetpack_Infinite_Scroll_Extras {
20 /**
21 * Class variable singleton.
22 *
23 * @var Jetpack_Infinite_Scroll_Extras
24 */
25 private static $instance = null;
26
27 /**
28 * Option names.
29 *
30 * @var string
31 */
32 private $option_name_google_analytics = 'infinite_scroll_google_analytics';
33
34 /**
35 * Singleton implementation
36 *
37 * @return object
38 */
39 public static function instance() {
40 if ( ! self::$instance instanceof Jetpack_Infinite_Scroll_Extras ) {
41 self::$instance = new Jetpack_Infinite_Scroll_Extras();
42 }
43
44 return self::$instance;
45 }
46
47 /**
48 * Register actions and filters
49 *
50 * @uses add_action, add_filter
51 */
52 private function __construct() {
53 add_action( 'jetpack_modules_loaded', array( $this, 'action_jetpack_modules_loaded' ) );
54
55 add_action( 'admin_init', array( $this, 'action_admin_init' ), 11 );
56
57 add_action( 'after_setup_theme', array( $this, 'action_after_setup_theme' ), 5 );
58
59 add_filter( 'infinite_scroll_js_settings', array( $this, 'filter_infinite_scroll_js_settings' ) );
60
61 add_action( 'wp_enqueue_scripts', array( $this, 'action_wp_enqueue_scripts' ) );
62 }
63
64 /**
65 * Enable "Configure" button on module card
66 *
67 * @uses Jetpack::enable_module_configurable
68 * @action jetpack_modules_loaded
69 */
70 public function action_jetpack_modules_loaded() {
71 Jetpack::enable_module_configurable( __FILE__ );
72 }
73
74 /**
75 * Register Google Analytics setting
76 *
77 * @uses add_settings_field, __, register_setting
78 * @action admin_init
79 */
80 public function action_admin_init() {
81 if ( ! Jetpack_Plan::supports( 'google-analytics' ) ) {
82 return;
83 }
84
85 add_settings_field( $this->option_name_google_analytics, '<span id="infinite-scroll-google-analytics">' . __( 'Use Google Analytics with Infinite Scroll', 'jetpack' ) . '</span>', array( $this, 'setting_google_analytics' ), 'reading' );
86 register_setting( 'reading', $this->option_name_google_analytics, array( $this, 'sanitize_boolean_value' ) );
87 }
88
89 /**
90 * Render Google Analytics option
91 *
92 * @uses checked, get_option, __
93 */
94 public function setting_google_analytics() {
95 echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . esc_html__( 'Track each scroll load (7 posts by default) as a page view in Google Analytics', 'jetpack' ) . '</label>';
96 echo '<p class="description">' . esc_html__( 'Check the box above to record each new set of posts loaded via Infinite Scroll as a page view in Google Analytics.', 'jetpack' ) . '</p>';
97 }
98
99 /**
100 * Sanitize value as a boolean
101 *
102 * @param mixed $value - the value we're sanitizing.
103 * @return bool
104 */
105 public function sanitize_boolean_value( $value ) {
106 return (bool) $value;
107 }
108
109 /**
110 * Load theme's infinite scroll annotation file, if present in the IS plugin.
111 * The `setup_theme` action is used because the annotation files should be using `after_setup_theme` to register support for IS.
112 *
113 * As released in Jetpack 2.0, a child theme's parent wasn't checked for in the plugin's bundled support, hence the convoluted way the parent is checked for now.
114 *
115 * @uses is_admin, wp_get_theme, apply_filters
116 * @action setup_theme
117 * @return null
118 */
119 public function action_after_setup_theme() {
120 $theme = wp_get_theme();
121
122 if ( ! $theme instanceof WP_Theme && ! is_array( $theme ) ) {
123 return;
124 }
125
126 /** This filter is already documented in modules/infinite-scroll/infinity.php */
127 $customization_file = apply_filters( 'infinite_scroll_customization_file', __DIR__ . "/infinite-scroll/themes/{$theme['Stylesheet']}.php", $theme['Stylesheet'] );
128
129 if ( is_readable( $customization_file ) ) {
130 require_once $customization_file;
131 } elseif ( ! empty( $theme['Template'] ) ) {
132 $customization_file = __DIR__ . "/infinite-scroll/themes/{$theme['Template']}.php";
133
134 if ( is_readable( $customization_file ) ) {
135 require_once $customization_file;
136 }
137 }
138 }
139
140 /**
141 * Modify Infinite Scroll configuration information
142 *
143 * @uses Jetpack::get_active_modules, is_user_logged_in, stats_get_options, Jetpack_Options::get_option, get_option, JETPACK__API_VERSION, JETPACK__VERSION
144 * @filter infinite_scroll_js_settings
145 *
146 * @param array $settings - the settings.
147 * @return array
148 */
149 public function filter_infinite_scroll_js_settings( $settings ) {
150 // Provide WP Stats info for tracking Infinite Scroll loads
151 // Abort if Stats module isn't active
152 if ( in_array( 'stats', Jetpack::get_active_modules(), true ) ) {
153 // Abort if user is logged in but logged-in users shouldn't be tracked.
154 if ( is_user_logged_in() ) {
155 $stats_options = Stats_Options::get_options();
156 $track_loggedin_users = isset( $stats_options['count_roles'] ) ? (bool) $stats_options['count_roles'] : false;
157
158 if ( ! $track_loggedin_users ) {
159 return $settings;
160 }
161 }
162
163 // We made it this far, so gather the data needed to track IS views
164 $settings['stats'] = 'blog=' . Jetpack_Options::get_option( 'id' ) . '&host=' . wp_parse_url( get_option( 'home' ), PHP_URL_HOST ) . '&v=ext&j=' . JETPACK__API_VERSION . ':' . JETPACK__VERSION;
165
166 // Pagetype parameter
167 $settings['stats'] .= '&x_pagetype=infinite';
168 if ( 'click' === $settings['type'] ) {
169 $settings['stats'] .= '-click';
170 }
171
172 $settings['stats'] .= '-jetpack';
173 }
174
175 // Check if Google Analytics tracking is requested.
176 $settings['google_analytics'] = Jetpack_Plan::supports( 'google-analytics' ) && Jetpack_Options::get_option_and_ensure_autoload( $this->option_name_google_analytics, 0 );
177
178 return $settings;
179 }
180
181 /**
182 * Always load certain scripts when IS is enabled, as they can't be loaded after `document.ready` fires, meaning they can't leverage IS's script loader.
183 *
184 * @global $videopress
185 * @uses do_action()
186 * @uses apply_filters()
187 * @uses wp_enqueue_style()
188 * @uses wp_enqueue_script()
189 * @action wp_enqueue_scripts
190 * @return null
191 */
192 public function action_wp_enqueue_scripts() {
193 // Do not load scripts and styles on singular pages and static pages
194 $load_scripts_and_styles = ! ( is_singular() || is_page() );
195 if (
196 /**
197 * Allow plugins to enqueue all Infinite Scroll scripts and styles on singular pages as well.
198 *
199 * @module infinite-scroll
200 *
201 * @since 3.1.0
202 *
203 * @param bool $load_scripts_and_styles Should scripts and styles be loaded on singular pahes and static pages. Default to false.
204 */
205 ! apply_filters( 'jetpack_infinite_scroll_load_scripts_and_styles', $load_scripts_and_styles )
206 ) {
207 return;
208 }
209
210 // VideoPress stand-alone plugin
211 global $videopress;
212 if ( ! empty( $videopress ) && The_Neverending_Home_Page::archive_supports_infinity() && is_a( $videopress, 'VideoPress' ) && method_exists( $videopress, 'enqueue_scripts' ) ) {
213 $videopress->enqueue_scripts();
214 }
215
216 // VideoPress Jetpack module
217 if ( Jetpack::is_module_active( 'videopress' ) ) {
218 wp_enqueue_script( 'videopress' );
219 }
220
221 // Fire the post_gallery action early so Carousel scripts are present.
222 if ( Jetpack::is_module_active( 'carousel' ) ) {
223 /** This filter is already documented in core/wp-includes/media.php */
224 do_action( 'post_gallery', '', '', 0 );
225 }
226
227 // Always enqueue Tiled Gallery scripts when both IS and Tiled Galleries are enabled
228 if ( Jetpack::is_module_active( 'tiled-gallery' ) ) {
229 Jetpack_Tiled_Gallery::default_scripts_and_styles();
230 }
231 }
232 }
233 Jetpack_Infinite_Scroll_Extras::instance();
234
235 /**
236 * Load main IS file
237 */
238 require_once __DIR__ . '/infinite-scroll/infinity.php';
239
240 /**
241 * Remove the IS annotation loading function bundled with the IS plugin in favor of the Jetpack-specific version in Jetpack_Infinite_Scroll_Extras::action_after_setup_theme();
242 */
243 remove_action( 'after_setup_theme', 'the_neverending_home_page_theme_support', 5 );
244