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