Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/modules
File: stats.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Module Name: Jetpack Stats
[2] Fix | Delete
* Module Description: Clear, concise traffic insights right in your WordPress dashboard.
[3] Fix | Delete
* Sort Order: 1
[4] Fix | Delete
* Recommendation Order: 2
[5] Fix | Delete
* First Introduced: 1.1
[6] Fix | Delete
* Requires Connection: Yes
[7] Fix | Delete
* Auto Activate: Yes
[8] Fix | Delete
* Module Tags: Jetpack Stats, Site Stats, Recommended
[9] Fix | Delete
* Feature: Engagement
[10] Fix | Delete
* Additional Search Queries: statistics, tracking, analytics, views, traffic, stats
[11] Fix | Delete
*
[12] Fix | Delete
* @package automattic/jetpack
[13] Fix | Delete
*/
[14] Fix | Delete
[15] Fix | Delete
use Automattic\Jetpack\Admin_UI\Admin_Menu;
[16] Fix | Delete
use Automattic\Jetpack\Connection\Client;
[17] Fix | Delete
use Automattic\Jetpack\Redirect;
[18] Fix | Delete
use Automattic\Jetpack\Stats\Main as Stats;
[19] Fix | Delete
use Automattic\Jetpack\Stats\Options as Stats_Options;
[20] Fix | Delete
use Automattic\Jetpack\Stats\Tracking_Pixel as Stats_Tracking_Pixel;
[21] Fix | Delete
use Automattic\Jetpack\Stats\WPCOM_Stats;
[22] Fix | Delete
use Automattic\Jetpack\Stats\XMLRPC_Provider as Stats_XMLRPC;
[23] Fix | Delete
use Automattic\Jetpack\Stats_Admin\Admin_Post_List_Column;
[24] Fix | Delete
use Automattic\Jetpack\Stats_Admin\Dashboard as Stats_Dashboard;
[25] Fix | Delete
use Automattic\Jetpack\Stats_Admin\Main as Stats_Main;
[26] Fix | Delete
use Automattic\Jetpack\Status\Host;
[27] Fix | Delete
use Automattic\Jetpack\Tracking;
[28] Fix | Delete
[29] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[30] Fix | Delete
exit( 0 );
[31] Fix | Delete
}
[32] Fix | Delete
[33] Fix | Delete
if ( defined( 'STATS_DASHBOARD_SERVER' ) ) {
[34] Fix | Delete
return;
[35] Fix | Delete
}
[36] Fix | Delete
[37] Fix | Delete
define( 'STATS_DASHBOARD_SERVER', 'dashboard.wordpress.com' );
[38] Fix | Delete
[39] Fix | Delete
/**
[40] Fix | Delete
* Stats content markers.
[41] Fix | Delete
* Used to test for content vs script when parsing server-generated HTML.
[42] Fix | Delete
*/
[43] Fix | Delete
const STATS_BODY_MARKER = '<div id="statchart"';
[44] Fix | Delete
const STATS_CONTENT_MARKER = '<div class="gotonewdash">';
[45] Fix | Delete
[46] Fix | Delete
add_action( 'jetpack_modules_loaded', 'stats_load' );
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Load Stats.
[50] Fix | Delete
*
[51] Fix | Delete
* @access public
[52] Fix | Delete
* @return void
[53] Fix | Delete
*/
[54] Fix | Delete
function stats_load() {
[55] Fix | Delete
Jetpack::enable_module_configurable( __FILE__ );
[56] Fix | Delete
[57] Fix | Delete
// Only run the callback for those who can see the stats.
[58] Fix | Delete
if ( is_user_logged_in() && current_user_can( 'view_stats' ) ) {
[59] Fix | Delete
add_action( 'admin_head', 'stats_admin_bar_head', 100 );
[60] Fix | Delete
add_action( 'wp_head', 'stats_admin_bar_head', 100 );
[61] Fix | Delete
}
[62] Fix | Delete
[63] Fix | Delete
Admin_Post_List_Column::register();
[64] Fix | Delete
[65] Fix | Delete
add_action( 'jetpack_admin_menu', 'stats_admin_menu' );
[66] Fix | Delete
[67] Fix | Delete
add_filter( 'pre_option_db_version', 'stats_ignore_db_version' );
[68] Fix | Delete
[69] Fix | Delete
// Filter for adding the Jetpack plugin version to tracking stats.
[70] Fix | Delete
add_filter( 'stats_array', 'filter_stats_array_add_jp_version' );
[71] Fix | Delete
[72] Fix | Delete
require_once __DIR__ . '/stats/class-jetpack-stats-upgrade-nudges.php';
[73] Fix | Delete
add_action( 'updating_jetpack_version', array( 'Jetpack_Stats_Upgrade_Nudges', 'unset_nudges_setting' ) );
[74] Fix | Delete
}
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Checks if filter is set and dnt is enabled.
[78] Fix | Delete
*
[79] Fix | Delete
* @deprecated 11.5
[80] Fix | Delete
* @return bool
[81] Fix | Delete
*/
[82] Fix | Delete
function jetpack_is_dnt_enabled() {
[83] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Main::jetpack_is_dnt_enabled' );
[84] Fix | Delete
return Stats::jetpack_is_dnt_enabled();
[85] Fix | Delete
}
[86] Fix | Delete
[87] Fix | Delete
/**
[88] Fix | Delete
* Prevent sparkline img requests being redirected to upgrade.php.
[89] Fix | Delete
* See wp-admin/admin.php where it checks $wp_db_version.
[90] Fix | Delete
*
[91] Fix | Delete
* @access public
[92] Fix | Delete
* @param mixed $version Version.
[93] Fix | Delete
* @return string $version.
[94] Fix | Delete
*/
[95] Fix | Delete
function stats_ignore_db_version( $version ) {
[96] Fix | Delete
if (
[97] Fix | Delete
is_admin() &&
[98] Fix | Delete
isset( $_GET['page'] ) && 'stats' === $_GET['page'] && // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[99] Fix | Delete
isset( $_GET['chart'] ) && strpos( $_GET['chart'], 'admin-bar-hours' ) === 0 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput
[100] Fix | Delete
) {
[101] Fix | Delete
global $wp_db_version;
[102] Fix | Delete
return $wp_db_version;
[103] Fix | Delete
}
[104] Fix | Delete
return $version;
[105] Fix | Delete
}
[106] Fix | Delete
[107] Fix | Delete
/**
[108] Fix | Delete
* Maps view_stats cap to read cap as needed.
[109] Fix | Delete
*
[110] Fix | Delete
* @deprecated 11.5
[111] Fix | Delete
*
[112] Fix | Delete
* @access public
[113] Fix | Delete
* @param mixed $caps Caps.
[114] Fix | Delete
* @param mixed $cap Cap.
[115] Fix | Delete
* @param mixed $user_id User ID.
[116] Fix | Delete
* @return array Possibly mapped capabilities for meta capability.
[117] Fix | Delete
*/
[118] Fix | Delete
function stats_map_meta_caps( $caps, $cap, $user_id ) {
[119] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Main::map_meta_caps' );
[120] Fix | Delete
return Stats::map_meta_caps( $caps, $cap, $user_id );
[121] Fix | Delete
}
[122] Fix | Delete
[123] Fix | Delete
/**
[124] Fix | Delete
* Stats Template Redirect.
[125] Fix | Delete
*
[126] Fix | Delete
* @deprecated 11.5
[127] Fix | Delete
* @access public
[128] Fix | Delete
* @return void
[129] Fix | Delete
*/
[130] Fix | Delete
function stats_template_redirect() {
[131] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Main::template_redirect' );
[132] Fix | Delete
Stats::template_redirect();
[133] Fix | Delete
}
[134] Fix | Delete
[135] Fix | Delete
/**
[136] Fix | Delete
* Stats Build View Data.
[137] Fix | Delete
*
[138] Fix | Delete
* @deprecated 11.5
[139] Fix | Delete
* @access public
[140] Fix | Delete
* @return array
[141] Fix | Delete
*/
[142] Fix | Delete
function stats_build_view_data() {
[143] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Tracking_Pixel::build_view_data' );
[144] Fix | Delete
return Stats_Tracking_Pixel::build_view_data();
[145] Fix | Delete
}
[146] Fix | Delete
[147] Fix | Delete
/**
[148] Fix | Delete
* Stats Get Options.
[149] Fix | Delete
*
[150] Fix | Delete
* @deprecated 11.5
[151] Fix | Delete
*
[152] Fix | Delete
* @access public
[153] Fix | Delete
* @return array
[154] Fix | Delete
*/
[155] Fix | Delete
function stats_get_options() {
[156] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Options::get_options' );
[157] Fix | Delete
return Stats_Options::get_options();
[158] Fix | Delete
}
[159] Fix | Delete
[160] Fix | Delete
/**
[161] Fix | Delete
* Get Stats Options.
[162] Fix | Delete
*
[163] Fix | Delete
* @deprecated 11.5
[164] Fix | Delete
*
[165] Fix | Delete
* @access public
[166] Fix | Delete
* @param mixed $option Option.
[167] Fix | Delete
* @return mixed|null
[168] Fix | Delete
*/
[169] Fix | Delete
function stats_get_option( $option ) {
[170] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Options::get_option' );
[171] Fix | Delete
return Stats_Options::get_option( $option );
[172] Fix | Delete
}
[173] Fix | Delete
[174] Fix | Delete
/**
[175] Fix | Delete
* Stats Set Options.
[176] Fix | Delete
*
[177] Fix | Delete
* @deprecated 11.5
[178] Fix | Delete
*
[179] Fix | Delete
* @access public
[180] Fix | Delete
* @param mixed $option Option.
[181] Fix | Delete
* @param mixed $value Value.
[182] Fix | Delete
* @return bool
[183] Fix | Delete
*/
[184] Fix | Delete
function stats_set_option( $option, $value ) {
[185] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Options::set_option' );
[186] Fix | Delete
return Stats_Options::set_option( $option, $value );
[187] Fix | Delete
}
[188] Fix | Delete
[189] Fix | Delete
/**
[190] Fix | Delete
* Stats Set Options.
[191] Fix | Delete
*
[192] Fix | Delete
* @deprecated 11.5
[193] Fix | Delete
*
[194] Fix | Delete
* @access public
[195] Fix | Delete
* @param mixed $options Options.
[196] Fix | Delete
* @return bool
[197] Fix | Delete
*/
[198] Fix | Delete
function stats_set_options( $options ) {
[199] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Options::set_options' );
[200] Fix | Delete
return Stats_Options::set_options( $options );
[201] Fix | Delete
}
[202] Fix | Delete
[203] Fix | Delete
/**
[204] Fix | Delete
* Stats Upgrade Options.
[205] Fix | Delete
*
[206] Fix | Delete
* @deprecated 11.5
[207] Fix | Delete
*
[208] Fix | Delete
* @access public
[209] Fix | Delete
* @param mixed $options Options.
[210] Fix | Delete
* @return array|bool
[211] Fix | Delete
*/
[212] Fix | Delete
function stats_upgrade_options( $options ) {
[213] Fix | Delete
_deprecated_function( __METHOD__, 'jetpack-11.5', 'Automattic\Jetpack\Stats\Options::upgrade_options' );
[214] Fix | Delete
return Stats_Options::upgrade_options( $options );
[215] Fix | Delete
}
[216] Fix | Delete
[217] Fix | Delete
/**
[218] Fix | Delete
* Admin Pages.
[219] Fix | Delete
*
[220] Fix | Delete
* @access public
[221] Fix | Delete
* @return void
[222] Fix | Delete
*/
[223] Fix | Delete
function stats_admin_menu() {
[224] Fix | Delete
global $pagenow;
[225] Fix | Delete
[226] Fix | Delete
// If we're at an old Stats URL, redirect to the new one.
[227] Fix | Delete
// Don't even bother with caps, menu_page_url(), etc. Just do it.
[228] Fix | Delete
if ( 'index.php' === $pagenow && isset( $_GET['page'] ) && 'stats' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[229] Fix | Delete
$redirect_url = str_replace( array( '/wp-admin/index.php?', '/wp-admin/?' ), '/wp-admin/admin.php?', isset( $_SERVER['REQUEST_URI'] ) ? filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : null );
[230] Fix | Delete
$relative_pos = strpos( $redirect_url, '/wp-admin/' );
[231] Fix | Delete
if ( false !== $relative_pos ) {
[232] Fix | Delete
wp_safe_redirect( admin_url( substr( $redirect_url, $relative_pos + 10 ) ) );
[233] Fix | Delete
exit( 0 );
[234] Fix | Delete
}
[235] Fix | Delete
}
[236] Fix | Delete
[237] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[238] Fix | Delete
if ( ! ( new Host() )->is_woa_site() && isset( $_GET['enable_new_stats'] ) && '1' === $_GET['enable_new_stats'] ) {
[239] Fix | Delete
// Passing true enables Odyssey Stats.
[240] Fix | Delete
// We're ignorning the return value for now.
[241] Fix | Delete
Stats_Main::update_new_stats_status( true );
[242] Fix | Delete
}
[243] Fix | Delete
[244] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[245] Fix | Delete
if ( ! Stats_Options::get_option( 'enable_odyssey_stats' ) || isset( $_GET['noheader'] ) ) {
[246] Fix | Delete
// Show old Jetpack Stats interface for:
[247] Fix | Delete
// - When the "enable_odyssey_stats" option is disabled.
[248] Fix | Delete
// - When being shown in the adminbar outside of wp-admin.
[249] Fix | Delete
$hook = Admin_Menu::add_menu( __( 'Stats', 'jetpack' ), __( 'Stats', 'jetpack' ), 'view_stats', 'stats', 'jetpack_admin_ui_stats_report_page_wrapper' );
[250] Fix | Delete
add_action( "load-$hook", 'stats_reports_load' );
[251] Fix | Delete
} else {
[252] Fix | Delete
// Enable the new Odyssey Stats experience.
[253] Fix | Delete
$stats_dashboard = new Stats_Dashboard();
[254] Fix | Delete
$hook = Admin_Menu::add_menu( __( 'Stats', 'jetpack' ), __( 'Stats', 'jetpack' ), 'view_stats', 'stats', array( $stats_dashboard, 'render' ), 1 );
[255] Fix | Delete
add_action( "load-$hook", array( $stats_dashboard, 'admin_init' ) );
[256] Fix | Delete
}
[257] Fix | Delete
}
[258] Fix | Delete
[259] Fix | Delete
/**
[260] Fix | Delete
* Stats Admin Path.
[261] Fix | Delete
*
[262] Fix | Delete
* @access public
[263] Fix | Delete
* @return string
[264] Fix | Delete
*/
[265] Fix | Delete
function stats_admin_path() {
[266] Fix | Delete
return Jetpack::module_configuration_url( __FILE__ );
[267] Fix | Delete
}
[268] Fix | Delete
[269] Fix | Delete
/**
[270] Fix | Delete
* Stats Reports Load.
[271] Fix | Delete
*
[272] Fix | Delete
* @access public
[273] Fix | Delete
* @return void
[274] Fix | Delete
*/
[275] Fix | Delete
function stats_reports_load() {
[276] Fix | Delete
require_once __DIR__ . '/stats/class-jetpack-stats-upgrade-nudges.php';
[277] Fix | Delete
Jetpack_Stats_Upgrade_Nudges::init();
[278] Fix | Delete
[279] Fix | Delete
wp_enqueue_script( 'jquery' );
[280] Fix | Delete
wp_enqueue_script( 'postbox' );
[281] Fix | Delete
wp_enqueue_script( 'underscore' );
[282] Fix | Delete
[283] Fix | Delete
Jetpack_Admin_Page::load_wrapper_styles();
[284] Fix | Delete
add_action( 'admin_print_styles', 'stats_reports_css' );
[285] Fix | Delete
[286] Fix | Delete
if ( ! empty( $_GET['nojs'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[287] Fix | Delete
$parsed = wp_parse_url( admin_url() );
[288] Fix | Delete
// Remember user doesn't want JS.
[289] Fix | Delete
setcookie( 'stnojs', '1', time() + 172800, $parsed['path'], COOKIE_DOMAIN, is_ssl(), true ); // 2 days.
[290] Fix | Delete
}
[291] Fix | Delete
[292] Fix | Delete
if ( ! empty( $_COOKIE['stnojs'] ) ) {
[293] Fix | Delete
// Detect if JS is on. If so, remove cookie so next page load is via JS.
[294] Fix | Delete
add_action( 'admin_print_footer_scripts', 'stats_js_remove_stnojs_cookie' );
[295] Fix | Delete
} elseif ( ! isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[296] Fix | Delete
// Normal page load. Load page content via JS.
[297] Fix | Delete
add_action( 'admin_print_footer_scripts', 'stats_script_dismiss_nudge_handler' );
[298] Fix | Delete
}
[299] Fix | Delete
}
[300] Fix | Delete
[301] Fix | Delete
/**
[302] Fix | Delete
* JavaScript to dismiss the Odyssey nudge.
[303] Fix | Delete
*
[304] Fix | Delete
* @access public
[305] Fix | Delete
* @return void
[306] Fix | Delete
*/
[307] Fix | Delete
function stats_script_dismiss_nudge_handler() {
[308] Fix | Delete
?>
[309] Fix | Delete
<script type="text/javascript">
[310] Fix | Delete
function stats_odyssey_dismiss_nudge() {
[311] Fix | Delete
// Hide the nudge UI, effectively dismissing it.
[312] Fix | Delete
var element = document.getElementById( "stats-odyssey-nudge-main" );
[313] Fix | Delete
element.classList.toggle( "is-hidden" );
[314] Fix | Delete
// Send an AJAX request.
[315] Fix | Delete
// Note we can provide a 'postponed_for' parameter to set the delay.
[316] Fix | Delete
// Without a parameter it defaults to 30 days which is what we want here.
[317] Fix | Delete
let nonce = <?php echo wp_json_encode( wp_create_nonce( 'wp_rest' ) ); ?>;
[318] Fix | Delete
let url = <?php echo wp_json_encode( rest_url( '/jetpack/v4/stats-app/stats/notices' ) ); ?>;
[319] Fix | Delete
let data = {
[320] Fix | Delete
id: 'opt_in_new_stats',
[321] Fix | Delete
status: 'postponed',
[322] Fix | Delete
};
[323] Fix | Delete
jQuery.ajax({
[324] Fix | Delete
type: "POST",
[325] Fix | Delete
url: url,
[326] Fix | Delete
data: data,
[327] Fix | Delete
headers: { "x-wp-nonce": nonce },
[328] Fix | Delete
});
[329] Fix | Delete
}
[330] Fix | Delete
</script>
[331] Fix | Delete
<?php
[332] Fix | Delete
}
[333] Fix | Delete
[334] Fix | Delete
/**
[335] Fix | Delete
* Stats Reports CSS.
[336] Fix | Delete
*
[337] Fix | Delete
* @access public
[338] Fix | Delete
* @return void
[339] Fix | Delete
*/
[340] Fix | Delete
function stats_reports_css() {
[341] Fix | Delete
?>
[342] Fix | Delete
<style type="text/css">
[343] Fix | Delete
#jp-stats-wrap, #jp-stats-report-bottom {
[344] Fix | Delete
max-width: 1040px;
[345] Fix | Delete
margin: 0 auto;
[346] Fix | Delete
overflow: hidden;
[347] Fix | Delete
}
[348] Fix | Delete
</style>
[349] Fix | Delete
<?php
[350] Fix | Delete
}
[351] Fix | Delete
[352] Fix | Delete
/**
[353] Fix | Delete
* Detect if JS is on. If so, remove cookie so next page load is via JS.
[354] Fix | Delete
*
[355] Fix | Delete
* @access public
[356] Fix | Delete
* @return void
[357] Fix | Delete
*/
[358] Fix | Delete
function stats_js_remove_stnojs_cookie() {
[359] Fix | Delete
$parsed = wp_parse_url( admin_url() );
[360] Fix | Delete
?>
[361] Fix | Delete
<script type="text/javascript">
[362] Fix | Delete
/* <![CDATA[ */
[363] Fix | Delete
document.cookie = 'stnojs=0; expires=Wed, 9 Mar 2011 16:55:50 UTC; path=<?php echo esc_js( $parsed['path'] ); ?>';
[364] Fix | Delete
/* ]]> */
[365] Fix | Delete
</script>
[366] Fix | Delete
<?php
[367] Fix | Delete
}
[368] Fix | Delete
[369] Fix | Delete
/**
[370] Fix | Delete
* Jetpack Admin Page Wrapper.
[371] Fix | Delete
*/
[372] Fix | Delete
function jetpack_admin_ui_stats_report_page_wrapper() {
[373] Fix | Delete
if ( ! isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) && empty( $_COOKIE['stnojs'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[374] Fix | Delete
Jetpack_Admin_Page::wrap_ui( 'stats_reports_page', array( 'is-wide' => true ) );
[375] Fix | Delete
} else {
[376] Fix | Delete
stats_reports_page();
[377] Fix | Delete
}
[378] Fix | Delete
}
[379] Fix | Delete
[380] Fix | Delete
/**
[381] Fix | Delete
* Stats Report Page.
[382] Fix | Delete
*
[383] Fix | Delete
* @access public
[384] Fix | Delete
* @param bool $main_chart_only (default: false) Main Chart Only.
[385] Fix | Delete
*/
[386] Fix | Delete
function stats_reports_page( $main_chart_only = false ) {
[387] Fix | Delete
if ( isset( $_GET['dashboard'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[388] Fix | Delete
stats_dashboard_widget_content();
[389] Fix | Delete
exit( 0 ); // @phan-suppress-current-line PhanPluginUnreachableCode -- Safer to include it even though stats_dashboard_widget_content() never returns.
[390] Fix | Delete
}
[391] Fix | Delete
[392] Fix | Delete
$blog_id = Stats_Options::get_option( 'blog_id' );
[393] Fix | Delete
$learn_url = Redirect::get_url( 'jetpack-stats-learn-more' );
[394] Fix | Delete
$redirect_url = admin_url( 'admin.php?page=stats&enable_new_stats=1' );
[395] Fix | Delete
$stats_bg_url = plugins_url( 'images/odyssey-upgrade/background.png', JETPACK__PLUGIN_FILE );
[396] Fix | Delete
$stats_bg_gradient_url = plugins_url( 'images/odyssey-upgrade/gradient.png', JETPACK__PLUGIN_FILE );
[397] Fix | Delete
[398] Fix | Delete
if ( ! $main_chart_only && ! isset( $_GET['noheader'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
[399] Fix | Delete
?>
[400] Fix | Delete
[401] Fix | Delete
<style>
[402] Fix | Delete
.stats-odyssey-notice {
[403] Fix | Delete
display: flex;
[404] Fix | Delete
font-size: var( --font-body );
[405] Fix | Delete
[406] Fix | Delete
border: 1px solid var( --jp-gray-5 );
[407] Fix | Delete
border-left-color: var( --jp-black );
[408] Fix | Delete
border-left-width: 6px;
[409] Fix | Delete
border-radius: 4px;
[410] Fix | Delete
[411] Fix | Delete
margin-top: 24px;
[412] Fix | Delete
background: white;
[413] Fix | Delete
position: relative;
[414] Fix | Delete
}
[415] Fix | Delete
.stats-odyssey-notice--content__highlighted {
[416] Fix | Delete
border-left-color: var( --jp-red );
[417] Fix | Delete
}
[418] Fix | Delete
.stats-odyssey-notice--content {
[419] Fix | Delete
padding: 24px 0 24px 30px;
[420] Fix | Delete
font-size: 2em;
[421] Fix | Delete
width: 100%;
[422] Fix | Delete
}
[423] Fix | Delete
.stats-odyssey-notice--content-header {
[424] Fix | Delete
font-size: 24px;
[425] Fix | Delete
line-height: 32px;
[426] Fix | Delete
margin: 0;
[427] Fix | Delete
margin-bottom: 8px;
[428] Fix | Delete
}
[429] Fix | Delete
.stats-odyssey-notice--content-text {
[430] Fix | Delete
font-size: 16px;
[431] Fix | Delete
margin: 0;
[432] Fix | Delete
}
[433] Fix | Delete
.stats-odyssey-notice--image-container {
[434] Fix | Delete
background-image: url("<?php echo esc_url( $stats_bg_url ); ?>"), url("<?php echo esc_url( $stats_bg_gradient_url ); ?>");
[435] Fix | Delete
background-size: cover;
[436] Fix | Delete
padding-right: 28px;
[437] Fix | Delete
width: 100%;
[438] Fix | Delete
}
[439] Fix | Delete
.stats-odyssey-notice--close-button {
[440] Fix | Delete
position: absolute;
[441] Fix | Delete
top: 1rem;
[442] Fix | Delete
right: 1rem;
[443] Fix | Delete
background-color: transparent;
[444] Fix | Delete
border: none;
[445] Fix | Delete
cursor: pointer;
[446] Fix | Delete
}
[447] Fix | Delete
.stats-odyssey-notice--action-bar {
[448] Fix | Delete
display: flex;
[449] Fix | Delete
align-items: center;
[450] Fix | Delete
margin-top: 24px;
[451] Fix | Delete
}
[452] Fix | Delete
.stats-odyssey-notice--primary-button {
[453] Fix | Delete
margin-right: 18px;
[454] Fix | Delete
padding-left: 20px;
[455] Fix | Delete
padding-right: 20px;
[456] Fix | Delete
font-size: 16px;
[457] Fix | Delete
border-color: black;
[458] Fix | Delete
background-color: black;
[459] Fix | Delete
}
[460] Fix | Delete
.stats-odyssey-notice--primary-button:hover {
[461] Fix | Delete
border-color: #3c434a;
[462] Fix | Delete
background-color: #3c434a;
[463] Fix | Delete
}
[464] Fix | Delete
.is-primary-link {
[465] Fix | Delete
color: white;
[466] Fix | Delete
text-decoration: none;
[467] Fix | Delete
}
[468] Fix | Delete
.is-primary-link:active {
[469] Fix | Delete
color: white;
[470] Fix | Delete
}
[471] Fix | Delete
.is-primary-link:focus {
[472] Fix | Delete
color: white;
[473] Fix | Delete
box-shadow: none;
[474] Fix | Delete
outline: none;
[475] Fix | Delete
}
[476] Fix | Delete
.is-primary-link:hover {
[477] Fix | Delete
color: white;
[478] Fix | Delete
}
[479] Fix | Delete
.is-secondary-link {
[480] Fix | Delete
color: black;
[481] Fix | Delete
font-size: var( --font-body );
[482] Fix | Delete
}
[483] Fix | Delete
.is-secondary-link:hover {
[484] Fix | Delete
color: black;
[485] Fix | Delete
}
[486] Fix | Delete
.is-hidden {
[487] Fix | Delete
display: none;
[488] Fix | Delete
}
[489] Fix | Delete
</style>
[490] Fix | Delete
<div id="jp-stats-wrap">
[491] Fix | Delete
<div class="wrap">
[492] Fix | Delete
<h1><?php esc_html_e( 'Jetpack Stats', 'jetpack' ); ?>
[493] Fix | Delete
<?php
[494] Fix | Delete
if ( current_user_can( 'jetpack_manage_modules' ) ) :
[495] Fix | Delete
$i18n_headers = jetpack_get_module_i18n( 'stats' );
[496] Fix | Delete
?>
[497] Fix | Delete
<a
[498] Fix | Delete
style="font-size:13px;"
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function