PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.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 2 years ago carousel 2 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 2 years ago contact-form 1 year ago custom-css 2 years ago custom-post-types 2 years ago geo-location 4 years ago google-analytics 3 years ago google-fonts 2 years ago gravatar 6 years ago infinite-scroll 3 years ago likes 3 years ago markdown 3 years ago masterbar 2 years ago memberships 2 years ago photon-cdn 2 years ago plugin-search 4 years ago post-by-email 3 years ago related-posts 2 years ago scan 2 years ago seo-tools 2 years ago sharedaddy 2 years ago shortcodes 2 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 2 years ago sso 2 years ago stats 2 years ago subscriptions 2 years ago theme-tools 2 years ago tiled-gallery 2 years ago verification-tools 4 years ago videopress 2 years ago widget-visibility 2 years ago widgets 2 years ago woocommerce-analytics 2 years ago wordads 2 years ago wpcom-block-editor 2 years ago wpcom-tos 5 years ago action-bar.php 3 years ago blaze.php 3 years ago carousel.php 4 years ago comment-likes.php 3 years ago comments.php 2 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 2 years ago gravatar-hovercards.php 2 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago lazy-images.php 2 years ago likes.php 2 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 2 years ago module-info.php 2 years ago monitor.php 2 years ago notes.php 2 years ago photon-cdn.php 3 years ago photon.php 3 years ago plugin-search.php 2 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 3 years ago publicize.php 2 years ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 2 years ago shortcodes.php 3 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 2 years ago stats.php 2 years ago subscriptions.php 2 years ago theme-tools.php 3 years ago tiled-gallery.php 4 years ago vaultpress.php 2 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
245 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\Current_Plan as Jetpack_Plan;
15 use Automattic\Jetpack\Stats\Options as Stats_Options;
16
17 /**
18 * Jetpack-specific elements of Infinite Scroll
19 */
20 class Jetpack_Infinite_Scroll_Extras {
21 /**
22 * Class variable singleton.
23 *
24 * @var Jetpack_Infinite_Scroll_Extras
25 */
26 private static $instance = null;
27
28 /**
29 * Option names.
30 *
31 * @var string
32 */
33 private $option_name_google_analytics = 'infinite_scroll_google_analytics';
34
35 /**
36 * Singleton implementation
37 *
38 * @return object
39 */
40 public static function instance() {
41 if ( ! self::$instance instanceof Jetpack_Infinite_Scroll_Extras ) {
42 self::$instance = new Jetpack_Infinite_Scroll_Extras();
43 }
44
45 return self::$instance;
46 }
47
48 /**
49 * Register actions and filters
50 *
51 * @uses add_action, add_filter
52 */
53 private function __construct() {
54 add_action( 'jetpack_modules_loaded', array( $this, 'action_jetpack_modules_loaded' ) );
55
56 add_action( 'admin_init', array( $this, 'action_admin_init' ), 11 );
57
58 add_action( 'after_setup_theme', array( $this, 'action_after_setup_theme' ), 5 );
59
60 add_filter( 'infinite_scroll_js_settings', array( $this, 'filter_infinite_scroll_js_settings' ) );
61
62 add_action( 'wp_enqueue_scripts', array( $this, 'action_wp_enqueue_scripts' ) );
63 }
64
65 /**
66 * Enable "Configure" button on module card
67 *
68 * @uses Jetpack::enable_module_configurable
69 * @action jetpack_modules_loaded
70 */
71 public function action_jetpack_modules_loaded() {
72 Jetpack::enable_module_configurable( __FILE__ );
73 }
74
75 /**
76 * Register Google Analytics setting
77 *
78 * @uses add_settings_field, __, register_setting
79 * @action admin_init
80 */
81 public function action_admin_init() {
82 if ( ! Jetpack_Plan::supports( 'google-analytics' ) ) {
83 return;
84 }
85
86 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' );
87 register_setting( 'reading', $this->option_name_google_analytics, array( $this, 'sanitize_boolean_value' ) );
88 }
89
90 /**
91 * Render Google Analytics option
92 *
93 * @uses checked, get_option, __
94 */
95 public function setting_google_analytics() {
96 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>';
97 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>';
98 }
99
100 /**
101 * Sanitize value as a boolean
102 *
103 * @param mixed $value - the value we're sanitizing.
104 * @return bool
105 */
106 public function sanitize_boolean_value( $value ) {
107 return (bool) $value;
108 }
109
110 /**
111 * Load theme's infinite scroll annotation file, if present in the IS plugin.
112 * The `setup_theme` action is used because the annotation files should be using `after_setup_theme` to register support for IS.
113 *
114 * 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.
115 *
116 * @uses is_admin, wp_get_theme, apply_filters
117 * @action setup_theme
118 * @return null
119 */
120 public function action_after_setup_theme() {
121 $theme = wp_get_theme();
122
123 if ( ! $theme instanceof WP_Theme && ! is_array( $theme ) ) {
124 return;
125 }
126
127 /** This filter is already documented in modules/infinite-scroll/infinity.php */
128 $customization_file = apply_filters( 'infinite_scroll_customization_file', __DIR__ . "/infinite-scroll/themes/{$theme['Stylesheet']}.php", $theme['Stylesheet'] );
129
130 if ( is_readable( $customization_file ) ) {
131 require_once $customization_file;
132 } elseif ( ! empty( $theme['Template'] ) ) {
133 $customization_file = __DIR__ . "/infinite-scroll/themes/{$theme['Template']}.php";
134
135 if ( is_readable( $customization_file ) ) {
136 require_once $customization_file;
137 }
138 }
139 }
140
141 /**
142 * Modify Infinite Scroll configuration information
143 *
144 * @uses Jetpack::get_active_modules, is_user_logged_in, stats_get_options, Jetpack_Options::get_option, get_option, JETPACK__API_VERSION, JETPACK__VERSION
145 * @filter infinite_scroll_js_settings
146 *
147 * @param array $settings - the settings.
148 * @return array
149 */
150 public function filter_infinite_scroll_js_settings( $settings ) {
151 // Provide WP Stats info for tracking Infinite Scroll loads
152 // Abort if Stats module isn't active
153 if ( in_array( 'stats', Jetpack::get_active_modules(), true ) ) {
154 // Abort if user is logged in but logged-in users shouldn't be tracked.
155 if ( is_user_logged_in() ) {
156 $stats_options = Stats_Options::get_options();
157 $track_loggedin_users = isset( $stats_options['count_roles'] ) ? (bool) $stats_options['count_roles'] : false;
158
159 if ( ! $track_loggedin_users ) {
160 return $settings;
161 }
162 }
163
164 // We made it this far, so gather the data needed to track IS views
165 $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;
166
167 // Pagetype parameter
168 $settings['stats'] .= '&x_pagetype=infinite';
169 if ( 'click' === $settings['type'] ) {
170 $settings['stats'] .= '-click';
171 }
172
173 $settings['stats'] .= '-jetpack';
174 }
175
176 // Check if Google Analytics tracking is requested.
177 $settings['google_analytics'] = Jetpack_Plan::supports( 'google-analytics' ) && Jetpack_Options::get_option_and_ensure_autoload( $this->option_name_google_analytics, 0 );
178
179 return $settings;
180 }
181
182 /**
183 * 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.
184 *
185 * @global $videopress
186 * @uses do_action()
187 * @uses apply_filters()
188 * @uses wp_enqueue_style()
189 * @uses wp_enqueue_script()
190 * @action wp_enqueue_scripts
191 * @return null
192 */
193 public function action_wp_enqueue_scripts() {
194 // Do not load scripts and styles on singular pages and static pages
195 $load_scripts_and_styles = ! ( is_singular() || is_page() );
196 if (
197 /**
198 * Allow plugins to enqueue all Infinite Scroll scripts and styles on singular pages as well.
199 *
200 * @module infinite-scroll
201 *
202 * @since 3.1.0
203 *
204 * @param bool $load_scripts_and_styles Should scripts and styles be loaded on singular pahes and static pages. Default to false.
205 */
206 ! apply_filters( 'jetpack_infinite_scroll_load_scripts_and_styles', $load_scripts_and_styles )
207 ) {
208 return;
209 }
210
211 // VideoPress stand-alone plugin
212 global $videopress;
213 if ( ! empty( $videopress ) && The_Neverending_Home_Page::archive_supports_infinity() && is_a( $videopress, 'VideoPress' ) && method_exists( $videopress, 'enqueue_scripts' ) ) {
214 $videopress->enqueue_scripts();
215 }
216
217 // VideoPress Jetpack module
218 if ( Jetpack::is_module_active( 'videopress' ) ) {
219 wp_enqueue_script( 'videopress' );
220 }
221
222 // Fire the post_gallery action early so Carousel scripts are present.
223 if ( Jetpack::is_module_active( 'carousel' ) ) {
224 /** This filter is already documented in core/wp-includes/media.php */
225 do_action( 'post_gallery', '', '', 0 );
226 }
227
228 // Always enqueue Tiled Gallery scripts when both IS and Tiled Galleries are enabled
229 if ( Jetpack::is_module_active( 'tiled-gallery' ) ) {
230 Jetpack_Tiled_Gallery::default_scripts_and_styles();
231 }
232 }
233 }
234 Jetpack_Infinite_Scroll_Extras::instance();
235
236 /**
237 * Load main IS file
238 */
239 require_once __DIR__ . '/infinite-scroll/infinity.php';
240
241 /**
242 * 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();
243 */
244 remove_action( 'after_setup_theme', 'the_neverending_home_page_theme_support', 5 );
245