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