Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/modules/infinite...
File: infinity.php
* @module infinite-scroll
[1500] Fix | Delete
*
[1501] Fix | Delete
* @since 2.0.0
[1502] Fix | Delete
*/
[1503] Fix | Delete
do_action( 'infinite_scroll_empty' );
[1504] Fix | Delete
$results['type'] = 'empty';
[1505] Fix | Delete
} elseif ( $this->has_wrapper() ) {
[1506] Fix | Delete
$wrapper_classes = is_string( self::get_settings()->wrapper ) ? self::get_settings()->wrapper : 'infinite-wrap';
[1507] Fix | Delete
$wrapper_classes .= ' infinite-view-' . $page;
[1508] Fix | Delete
$wrapper_classes = trim( $wrapper_classes );
[1509] Fix | Delete
$aria_label = sprintf(
[1510] Fix | Delete
/* translators: %1$s is the page count */
[1511] Fix | Delete
__( 'Page: %1$d.', 'jetpack' ),
[1512] Fix | Delete
$page
[1513] Fix | Delete
);
[1514] Fix | Delete
[1515] Fix | Delete
$results['html'] = '<div class="' . esc_attr( $wrapper_classes ) . '" id="infinite-view-' . $page . '" data-page-num="' . $page . '" role="region" aria-label="' . esc_attr( $aria_label ) . '">' . $results['html'] . '</div>';
[1516] Fix | Delete
}
[1517] Fix | Delete
[1518] Fix | Delete
// Fire wp_footer to ensure that all necessary scripts are enqueued. Output isn't used, but scripts are extracted in self::action_wp_footer.
[1519] Fix | Delete
ob_start();
[1520] Fix | Delete
wp_footer();
[1521] Fix | Delete
while ( ob_get_length() ) {
[1522] Fix | Delete
ob_end_clean();
[1523] Fix | Delete
}
[1524] Fix | Delete
[1525] Fix | Delete
if ( 'success' === $results['type'] ) {
[1526] Fix | Delete
global $currentday;
[1527] Fix | Delete
$results['lastbatch'] = self::is_last_batch();
[1528] Fix | Delete
$results['currentday'] = $currentday;
[1529] Fix | Delete
}
[1530] Fix | Delete
[1531] Fix | Delete
// Loop through posts to capture sharing data for new posts loaded via Infinite Scroll
[1532] Fix | Delete
if ( 'success' === $results['type'] && function_exists( 'sharing_register_post_for_share_counts' ) ) {
[1533] Fix | Delete
global $jetpack_sharing_counts;
[1534] Fix | Delete
[1535] Fix | Delete
while ( have_posts() ) {
[1536] Fix | Delete
the_post();
[1537] Fix | Delete
[1538] Fix | Delete
sharing_register_post_for_share_counts( get_the_ID() );
[1539] Fix | Delete
}
[1540] Fix | Delete
[1541] Fix | Delete
// If sharing counts are not initialized for any reason, we initialize them here.
[1542] Fix | Delete
if ( ! is_array( $jetpack_sharing_counts ) ) {
[1543] Fix | Delete
$jetpack_sharing_counts = array();
[1544] Fix | Delete
} else {
[1545] Fix | Delete
// Filter out non-string and non-integer values to avoid warnings with array_flip.
[1546] Fix | Delete
$flippable_jetpack_sharing_counts = array_filter(
[1547] Fix | Delete
$jetpack_sharing_counts,
[1548] Fix | Delete
function ( $value ) {
[1549] Fix | Delete
return is_string( $value ) || is_int( $value );
[1550] Fix | Delete
}
[1551] Fix | Delete
);
[1552] Fix | Delete
}
[1553] Fix | Delete
[1554] Fix | Delete
$results['postflair'] = array_flip( $flippable_jetpack_sharing_counts ?? array() );
[1555] Fix | Delete
}
[1556] Fix | Delete
} else {
[1557] Fix | Delete
/** This action is already documented in modules/infinite-scroll/infinity.php */
[1558] Fix | Delete
do_action( 'infinite_scroll_empty' );
[1559] Fix | Delete
$results['type'] = 'empty';
[1560] Fix | Delete
}
[1561] Fix | Delete
[1562] Fix | Delete
wp_send_json(
[1563] Fix | Delete
/**
[1564] Fix | Delete
* Filter the Infinite Scroll results.
[1565] Fix | Delete
*
[1566] Fix | Delete
* @module infinite-scroll
[1567] Fix | Delete
*
[1568] Fix | Delete
* @since 2.0.0
[1569] Fix | Delete
*
[1570] Fix | Delete
* @param array $results Array of Infinite Scroll results.
[1571] Fix | Delete
* @param array $query_args Array of main query arguments.
[1572] Fix | Delete
* @param WP_Query $wp_query WP Query.
[1573] Fix | Delete
*/
[1574] Fix | Delete
apply_filters( 'infinite_scroll_results', $results, $query_args, self::wp_query() ),
[1575] Fix | Delete
null, // @phan-suppress-current-line PhanTypeMismatchArgumentProbablyReal -- It takes null, but its phpdoc only says int.
[1576] Fix | Delete
JSON_UNESCAPED_SLASHES
[1577] Fix | Delete
);
[1578] Fix | Delete
}
[1579] Fix | Delete
[1580] Fix | Delete
/**
[1581] Fix | Delete
* Update the $allowed_vars array with the standard WP public and private
[1582] Fix | Delete
* query vars, as well as taxonomy vars
[1583] Fix | Delete
*
[1584] Fix | Delete
* @global $wp
[1585] Fix | Delete
* @param array $allowed_vars - the allowed variables array.
[1586] Fix | Delete
* @filter infinite_scroll_allowed_vars
[1587] Fix | Delete
* @return array
[1588] Fix | Delete
*/
[1589] Fix | Delete
public function allowed_query_vars( $allowed_vars ) {
[1590] Fix | Delete
global $wp;
[1591] Fix | Delete
[1592] Fix | Delete
$allowed_vars += $wp->public_query_vars;
[1593] Fix | Delete
$allowed_vars += $wp->private_query_vars;
[1594] Fix | Delete
$allowed_vars += $this->get_taxonomy_vars();
[1595] Fix | Delete
[1596] Fix | Delete
foreach ( array_keys( $allowed_vars, 'paged', true ) as $key ) {
[1597] Fix | Delete
unset( $allowed_vars[ $key ] );
[1598] Fix | Delete
}
[1599] Fix | Delete
[1600] Fix | Delete
return array_unique( $allowed_vars );
[1601] Fix | Delete
}
[1602] Fix | Delete
[1603] Fix | Delete
/**
[1604] Fix | Delete
* Returns an array of stock and custom taxonomy query vars
[1605] Fix | Delete
*
[1606] Fix | Delete
* @global $wp_taxonomies
[1607] Fix | Delete
* @return array
[1608] Fix | Delete
*/
[1609] Fix | Delete
public function get_taxonomy_vars() {
[1610] Fix | Delete
global $wp_taxonomies;
[1611] Fix | Delete
[1612] Fix | Delete
$taxonomy_vars = array();
[1613] Fix | Delete
foreach ( $wp_taxonomies as $t ) {
[1614] Fix | Delete
if ( $t->query_var ) {
[1615] Fix | Delete
$taxonomy_vars[] = $t->query_var;
[1616] Fix | Delete
}
[1617] Fix | Delete
}
[1618] Fix | Delete
[1619] Fix | Delete
// still needed?
[1620] Fix | Delete
$taxonomy_vars[] = 'tag_id';
[1621] Fix | Delete
[1622] Fix | Delete
return $taxonomy_vars;
[1623] Fix | Delete
}
[1624] Fix | Delete
[1625] Fix | Delete
/**
[1626] Fix | Delete
* Update the $query_args array with the parameters provided via AJAX/GET.
[1627] Fix | Delete
*
[1628] Fix | Delete
* @param array $query_args - the query args.
[1629] Fix | Delete
* @filter infinite_scroll_query_args
[1630] Fix | Delete
* @return array
[1631] Fix | Delete
*/
[1632] Fix | Delete
public function inject_query_args( $query_args ) {
[1633] Fix | Delete
/**
[1634] Fix | Delete
* Filter the array of allowed Infinite Scroll query arguments.
[1635] Fix | Delete
*
[1636] Fix | Delete
* @module infinite-scroll
[1637] Fix | Delete
*
[1638] Fix | Delete
* @since 2.6.0
[1639] Fix | Delete
*
[1640] Fix | Delete
* @param array $args Array of allowed Infinite Scroll query arguments.
[1641] Fix | Delete
* @param array $query_args Array of query arguments.
[1642] Fix | Delete
*/
[1643] Fix | Delete
$allowed_vars = apply_filters( 'infinite_scroll_allowed_vars', array(), $query_args );
[1644] Fix | Delete
[1645] Fix | Delete
$query_args = array_merge(
[1646] Fix | Delete
$query_args,
[1647] Fix | Delete
array(
[1648] Fix | Delete
'suppress_filters' => false,
[1649] Fix | Delete
)
[1650] Fix | Delete
);
[1651] Fix | Delete
[1652] Fix | Delete
if ( isset( $_REQUEST['query_args'] ) && is_array( $_REQUEST['query_args'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no site changes.
[1653] Fix | Delete
foreach ( wp_unslash( $_REQUEST['query_args'] ) as $var => $value ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- no site changes, sanitized below.
[1654] Fix | Delete
if ( in_array( $var, $allowed_vars, true ) && ! empty( $value ) ) {
[1655] Fix | Delete
$query_args[ $var ] = filter_var( $value );
[1656] Fix | Delete
}
[1657] Fix | Delete
}
[1658] Fix | Delete
}
[1659] Fix | Delete
[1660] Fix | Delete
return $query_args;
[1661] Fix | Delete
}
[1662] Fix | Delete
[1663] Fix | Delete
/**
[1664] Fix | Delete
* Rendering fallback used when themes don't specify their own handler.
[1665] Fix | Delete
*
[1666] Fix | Delete
* @uses have_posts, the_post, get_template_part, get_post_format
[1667] Fix | Delete
* @action infinite_scroll_render
[1668] Fix | Delete
*/
[1669] Fix | Delete
public function render() {
[1670] Fix | Delete
while ( have_posts() ) {
[1671] Fix | Delete
the_post();
[1672] Fix | Delete
[1673] Fix | Delete
get_template_part( 'content', get_post_format() );
[1674] Fix | Delete
}
[1675] Fix | Delete
}
[1676] Fix | Delete
[1677] Fix | Delete
/**
[1678] Fix | Delete
* Allow plugins to filter what archives Infinite Scroll supports
[1679] Fix | Delete
*
[1680] Fix | Delete
* @uses current_theme_supports, is_home, is_archive, apply_filters, self::get_settings
[1681] Fix | Delete
* @return bool
[1682] Fix | Delete
*/
[1683] Fix | Delete
public static function archive_supports_infinity() {
[1684] Fix | Delete
$supported = current_theme_supports( 'infinite-scroll' ) && ( is_home() || is_archive() || is_search() );
[1685] Fix | Delete
[1686] Fix | Delete
// Disable when previewing a non-active theme in the customizer
[1687] Fix | Delete
if ( is_customize_preview() && ! $GLOBALS['wp_customize']->is_theme_active() ) {
[1688] Fix | Delete
return false;
[1689] Fix | Delete
}
[1690] Fix | Delete
[1691] Fix | Delete
/**
[1692] Fix | Delete
* Allow plugins to filter what archives Infinite Scroll supports.
[1693] Fix | Delete
*
[1694] Fix | Delete
* @module infinite-scroll
[1695] Fix | Delete
*
[1696] Fix | Delete
* @since 2.0.0
[1697] Fix | Delete
*
[1698] Fix | Delete
* @param bool $supported Does the Archive page support Infinite Scroll.
[1699] Fix | Delete
* @param object self::get_settings() IS settings provided by theme.
[1700] Fix | Delete
*/
[1701] Fix | Delete
return (bool) apply_filters( 'infinite_scroll_archive_supported', $supported, self::get_settings() );
[1702] Fix | Delete
}
[1703] Fix | Delete
[1704] Fix | Delete
/**
[1705] Fix | Delete
* The Infinite Blog Footer
[1706] Fix | Delete
*
[1707] Fix | Delete
* @uses self::get_settings, self::archive_supports_infinity, self::default_footer
[1708] Fix | Delete
* @return string or null
[1709] Fix | Delete
*/
[1710] Fix | Delete
public function footer() {
[1711] Fix | Delete
if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
[1712] Fix | Delete
return;
[1713] Fix | Delete
}
[1714] Fix | Delete
[1715] Fix | Delete
$settings = self::get_settings();
[1716] Fix | Delete
[1717] Fix | Delete
// Bail if theme requested footer not show
[1718] Fix | Delete
if ( false === $settings->footer ) {
[1719] Fix | Delete
return;
[1720] Fix | Delete
}
[1721] Fix | Delete
[1722] Fix | Delete
// We only need the new footer for the 'scroll' type
[1723] Fix | Delete
if ( 'scroll' !== $settings->type || ! self::archive_supports_infinity() ) {
[1724] Fix | Delete
return;
[1725] Fix | Delete
}
[1726] Fix | Delete
[1727] Fix | Delete
if ( self::is_last_batch() ) {
[1728] Fix | Delete
return;
[1729] Fix | Delete
}
[1730] Fix | Delete
[1731] Fix | Delete
// Display a footer, either user-specified or a default
[1732] Fix | Delete
if ( false !== $settings->footer_callback && is_callable( $settings->footer_callback ) ) {
[1733] Fix | Delete
call_user_func( $settings->footer_callback, $settings );
[1734] Fix | Delete
} else {
[1735] Fix | Delete
self::default_footer();
[1736] Fix | Delete
}
[1737] Fix | Delete
}
[1738] Fix | Delete
[1739] Fix | Delete
/**
[1740] Fix | Delete
* Render default IS footer
[1741] Fix | Delete
*
[1742] Fix | Delete
* @uses __, wp_get_theme, apply_filters, home_url, esc_attr, get_bloginfo, bloginfo
[1743] Fix | Delete
*/
[1744] Fix | Delete
private function default_footer() {
[1745] Fix | Delete
if ( '' !== get_privacy_policy_url() ) {
[1746] Fix | Delete
$credits = get_the_privacy_policy_link() . '<span role="separator" aria-hidden="true"> / </span>';
[1747] Fix | Delete
} else {
[1748] Fix | Delete
$credits = '';
[1749] Fix | Delete
}
[1750] Fix | Delete
$credits .= sprintf(
[1751] Fix | Delete
'<a href="https://wordpress.org/" rel="noopener noreferrer" target="_blank" rel="generator">%1$s</a> ',
[1752] Fix | Delete
__( 'Proudly powered by WordPress', 'jetpack' )
[1753] Fix | Delete
);
[1754] Fix | Delete
$credits .= sprintf(
[1755] Fix | Delete
/* translators: %1$s is the name of a theme */
[1756] Fix | Delete
__( 'Theme: %1$s.', 'jetpack' ),
[1757] Fix | Delete
wp_get_theme()->Name
[1758] Fix | Delete
);
[1759] Fix | Delete
/**
[1760] Fix | Delete
* Filter Infinite Scroll's credit text.
[1761] Fix | Delete
*
[1762] Fix | Delete
* @module infinite-scroll
[1763] Fix | Delete
*
[1764] Fix | Delete
* @since 2.0.0
[1765] Fix | Delete
*
[1766] Fix | Delete
* @param string $credits Infinite Scroll credits.
[1767] Fix | Delete
*/
[1768] Fix | Delete
$credits = apply_filters( 'infinite_scroll_credit', $credits );
[1769] Fix | Delete
[1770] Fix | Delete
?>
[1771] Fix | Delete
<div id="infinite-footer">
[1772] Fix | Delete
<div class="container">
[1773] Fix | Delete
<div class="blog-info">
[1774] Fix | Delete
<a id="infinity-blog-title" href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
[1775] Fix | Delete
<?php bloginfo( 'name' ); ?>
[1776] Fix | Delete
</a>
[1777] Fix | Delete
</div>
[1778] Fix | Delete
<div class="blog-credits">
[1779] Fix | Delete
<?php echo $credits; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
[1780] Fix | Delete
</div>
[1781] Fix | Delete
</div>
[1782] Fix | Delete
</div><!-- #infinite-footer -->
[1783] Fix | Delete
<?php
[1784] Fix | Delete
}
[1785] Fix | Delete
[1786] Fix | Delete
/**
[1787] Fix | Delete
* Ensure that IS doesn't interfere with Grunion by stripping IS query arguments from the Grunion redirect URL.
[1788] Fix | Delete
* When arguments are present, Grunion redirects to the IS AJAX endpoint.
[1789] Fix | Delete
*
[1790] Fix | Delete
* @param string $url - the Grunion redirect URL.
[1791] Fix | Delete
* @uses remove_query_arg
[1792] Fix | Delete
* @filter grunion_contact_form_redirect_url
[1793] Fix | Delete
* @return string
[1794] Fix | Delete
*/
[1795] Fix | Delete
public function filter_grunion_redirect_url( $url ) {
[1796] Fix | Delete
// Remove IS query args, if present
[1797] Fix | Delete
if ( str_contains( $url, 'infinity=scrolling' ) ) {
[1798] Fix | Delete
$url = remove_query_arg(
[1799] Fix | Delete
array(
[1800] Fix | Delete
'infinity',
[1801] Fix | Delete
'action',
[1802] Fix | Delete
'page',
[1803] Fix | Delete
'order',
[1804] Fix | Delete
'scripts',
[1805] Fix | Delete
'styles',
[1806] Fix | Delete
),
[1807] Fix | Delete
$url
[1808] Fix | Delete
);
[1809] Fix | Delete
}
[1810] Fix | Delete
[1811] Fix | Delete
return $url;
[1812] Fix | Delete
}
[1813] Fix | Delete
[1814] Fix | Delete
/**
[1815] Fix | Delete
* When the MediaElement is loaded in dynamically, we need to enforce that
[1816] Fix | Delete
* its settings are added to the page as well.
[1817] Fix | Delete
*
[1818] Fix | Delete
* @param array $scripts_data New scripts exposed to the infinite scroll.
[1819] Fix | Delete
*
[1820] Fix | Delete
* @since 8.4.0
[1821] Fix | Delete
*/
[1822] Fix | Delete
public function add_mejs_config( $scripts_data ) {
[1823] Fix | Delete
foreach ( $scripts_data as $key => $data ) {
[1824] Fix | Delete
if ( 'mediaelement-core' === $data['handle'] ) {
[1825] Fix | Delete
$mejs_settings = array(
[1826] Fix | Delete
'pluginPath' => includes_url( 'js/mediaelement/', 'relative' ),
[1827] Fix | Delete
'classPrefix' => 'mejs-',
[1828] Fix | Delete
'stretching' => 'responsive',
[1829] Fix | Delete
);
[1830] Fix | Delete
[1831] Fix | Delete
$scripts_data[ $key ]['extra_data'] = sprintf(
[1832] Fix | Delete
'window.%s = %s',
[1833] Fix | Delete
'_wpmejsSettings',
[1834] Fix | Delete
wp_json_encode( apply_filters( 'mejs_settings', $mejs_settings ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP )
[1835] Fix | Delete
);
[1836] Fix | Delete
}
[1837] Fix | Delete
}
[1838] Fix | Delete
return $scripts_data;
[1839] Fix | Delete
}
[1840] Fix | Delete
[1841] Fix | Delete
/**
[1842] Fix | Delete
* Determines whether the legacy AMP Reader post templates are being used.
[1843] Fix | Delete
*
[1844] Fix | Delete
* @return bool
[1845] Fix | Delete
*/
[1846] Fix | Delete
private function is_exempted_amp_page() {
[1847] Fix | Delete
if ( is_singular( 'web-story' ) ) {
[1848] Fix | Delete
// Ensure that <amp-next-page> is not injected after <amp-story> as generated by the Web Stories plugin.
[1849] Fix | Delete
return true;
[1850] Fix | Delete
}
[1851] Fix | Delete
if ( function_exists( 'amp_is_legacy' ) ) {
[1852] Fix | Delete
// Available since AMP v2.0, this will return false if a theme like Twenty Twenty is selected as the Reader theme.
[1853] Fix | Delete
return amp_is_legacy();
[1854] Fix | Delete
}
[1855] Fix | Delete
if ( method_exists( 'AMP_Options_Manager', 'get_option' ) ) {
[1856] Fix | Delete
// In versions prior to v2.0, checking the template mode as being 'reader' is sufficient.
[1857] Fix | Delete
return 'reader' === AMP_Options_Manager::get_option( 'theme_support' );
[1858] Fix | Delete
}
[1859] Fix | Delete
return false;
[1860] Fix | Delete
}
[1861] Fix | Delete
[1862] Fix | Delete
/**
[1863] Fix | Delete
* Load AMP specific hooks.
[1864] Fix | Delete
*
[1865] Fix | Delete
* @return void
[1866] Fix | Delete
*/
[1867] Fix | Delete
public function amp_load_hooks() {
[1868] Fix | Delete
if ( $this->is_exempted_amp_page() ) {
[1869] Fix | Delete
return;
[1870] Fix | Delete
}
[1871] Fix | Delete
[1872] Fix | Delete
if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
[1873] Fix | Delete
$template = self::get_settings()->render;
[1874] Fix | Delete
[1875] Fix | Delete
add_filter( 'jetpack_infinite_scroll_load_scripts_and_styles', '__return_false' );
[1876] Fix | Delete
[1877] Fix | Delete
add_action( 'template_redirect', array( $this, 'amp_start_output_buffering' ), 0 );
[1878] Fix | Delete
add_action( 'shutdown', array( $this, 'amp_output_buffer' ), 1 );
[1879] Fix | Delete
[1880] Fix | Delete
if ( is_string( $template ) && strpos( $template, '::' ) === false && is_callable( "amp_{$template}_hooks" ) ) {
[1881] Fix | Delete
call_user_func( "amp_{$template}_hooks" );
[1882] Fix | Delete
}
[1883] Fix | Delete
[1884] Fix | Delete
// Warms up the amp next page markup.
[1885] Fix | Delete
// This should be done outside the output buffering callback started in the template_redirect.
[1886] Fix | Delete
$this->amp_get_footer_template();
[1887] Fix | Delete
}
[1888] Fix | Delete
}
[1889] Fix | Delete
[1890] Fix | Delete
/**
[1891] Fix | Delete
* Start the AMP output buffering.
[1892] Fix | Delete
*
[1893] Fix | Delete
* @return void
[1894] Fix | Delete
*/
[1895] Fix | Delete
public function amp_start_output_buffering() {
[1896] Fix | Delete
ob_start( array( $this, 'amp_finish_output_buffering' ) );
[1897] Fix | Delete
}
[1898] Fix | Delete
[1899] Fix | Delete
/**
[1900] Fix | Delete
* Flush the AMP output buffer.
[1901] Fix | Delete
*
[1902] Fix | Delete
* @return void
[1903] Fix | Delete
*/
[1904] Fix | Delete
public function amp_output_buffer() {
[1905] Fix | Delete
if ( ob_get_contents() ) {
[1906] Fix | Delete
ob_end_flush();
[1907] Fix | Delete
}
[1908] Fix | Delete
}
[1909] Fix | Delete
[1910] Fix | Delete
/**
[1911] Fix | Delete
* Filter the AMP output buffer contents.
[1912] Fix | Delete
*
[1913] Fix | Delete
* @param string $buffer Contents of the output buffer.
[1914] Fix | Delete
*
[1915] Fix | Delete
* @return string|false
[1916] Fix | Delete
*/
[1917] Fix | Delete
public function amp_finish_output_buffering( $buffer ) {
[1918] Fix | Delete
// Hide WordPress admin bar on next page load.
[1919] Fix | Delete
$buffer = preg_replace(
[1920] Fix | Delete
'/id="wpadminbar"/',
[1921] Fix | Delete
'$0 next-page-hide',
[1922] Fix | Delete
$buffer
[1923] Fix | Delete
);
[1924] Fix | Delete
[1925] Fix | Delete
/**
[1926] Fix | Delete
* Get the theme footers.
[1927] Fix | Delete
*
[1928] Fix | Delete
* @module infinite-scroll
[1929] Fix | Delete
*
[1930] Fix | Delete
* @since 9.0.0
[1931] Fix | Delete
*
[1932] Fix | Delete
* @param array array() An array to store multiple markup entries to be added to the footer.
[1933] Fix | Delete
* @param string $buffer The contents of the output buffer.
[1934] Fix | Delete
*/
[1935] Fix | Delete
$footers = apply_filters( 'jetpack_amp_infinite_footers', array(), $buffer );
[1936] Fix | Delete
[1937] Fix | Delete
/**
[1938] Fix | Delete
* Filter the output buffer.
[1939] Fix | Delete
* Themes can leverage this hook to add custom markup on next page load.
[1940] Fix | Delete
*
[1941] Fix | Delete
* @module infinite-scroll
[1942] Fix | Delete
*
[1943] Fix | Delete
* @since 9.0.0
[1944] Fix | Delete
*
[1945] Fix | Delete
* @param string $buffer The contents of the output buffer.
[1946] Fix | Delete
*/
[1947] Fix | Delete
$buffer = apply_filters( 'jetpack_amp_infinite_output', $buffer );
[1948] Fix | Delete
[1949] Fix | Delete
// Add the amp next page markup.
[1950] Fix | Delete
$buffer = preg_replace(
[1951] Fix | Delete
'~</body>~',
[1952] Fix | Delete
$this->amp_get_footer_template( $footers ) . '$0',
[1953] Fix | Delete
$buffer
[1954] Fix | Delete
);
[1955] Fix | Delete
[1956] Fix | Delete
return $buffer;
[1957] Fix | Delete
}
[1958] Fix | Delete
[1959] Fix | Delete
/**
[1960] Fix | Delete
* Get AMP next page markup with the custom footers.
[1961] Fix | Delete
*
[1962] Fix | Delete
* @param string[] $footers The theme footers.
[1963] Fix | Delete
*
[1964] Fix | Delete
* @return string
[1965] Fix | Delete
*/
[1966] Fix | Delete
protected function amp_get_footer_template( $footers = array() ) {
[1967] Fix | Delete
static $template = null;
[1968] Fix | Delete
[1969] Fix | Delete
if ( null === $template ) {
[1970] Fix | Delete
$template = $this->amp_footer_template();
[1971] Fix | Delete
}
[1972] Fix | Delete
[1973] Fix | Delete
if ( empty( $footers ) ) {
[1974] Fix | Delete
return $template;
[1975] Fix | Delete
}
[1976] Fix | Delete
[1977] Fix | Delete
return preg_replace(
[1978] Fix | Delete
'/%%footer%%/',
[1979] Fix | Delete
implode( '', $footers ),
[1980] Fix | Delete
$template
[1981] Fix | Delete
);
[1982] Fix | Delete
}
[1983] Fix | Delete
[1984] Fix | Delete
/**
[1985] Fix | Delete
* AMP Next Page markup.
[1986] Fix | Delete
*
[1987] Fix | Delete
* @return string
[1988] Fix | Delete
*/
[1989] Fix | Delete
protected function amp_footer_template() {
[1990] Fix | Delete
ob_start();
[1991] Fix | Delete
?>
[1992] Fix | Delete
<amp-next-page max-pages="<?php echo esc_attr( static::amp_get_max_pages() ); ?>">
[1993] Fix | Delete
<script type="application/json">
[1994] Fix | Delete
[
[1995] Fix | Delete
<?php echo wp_json_encode( $this->amp_next_page(), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>
[1996] Fix | Delete
]
[1997] Fix | Delete
</script>
[1998] Fix | Delete
<div separator>
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function