oont-contents/plugins/astra-addon/classes/compatibility/class-astra-addon-amp-compatibility.php
2025-02-08 15:10:23 +01:00

200 lines
6.9 KiB
PHP

<?php
/**
* AMP Compatibility.
*
* @package Astra Addon
* @since 1.7.0
*/
/**
* Customizer Initialization
*
* @since 1.7.0
*/
class Astra_Addon_AMP_Compatibility {
/**
* Constructor
*/
public function __construct() {
add_action( 'wp', array( $this, 'disable_addon_features' ) );
}
/**
* Disable features from Astra Pro when AMP endpoint is enabled.
*
* @return void
*/
public function disable_addon_features() {
// If AMP endpoint is not active, bail as we don't need to change anything here.
if ( true !== astra_addon_is_amp_endpoint() ) {
return;
}
// Bail if AMP support is disabled by the user.
if ( false === apply_filters( 'astra_amp_support', true ) ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
return;
}
add_filter( 'astra_addon_cache_asset_type', array( $this, 'cache_add_amp_prefix' ) );
if ( is_callable( 'Astra_Minify::get_instance' ) ) {
// Prioritize Astra Addon's CSS in AMP layouts.
remove_action( 'wp_enqueue_scripts', array( Astra_Minify::get_instance(), 'enqueue_scripts' ) );
add_action( 'wp_enqueue_scripts', array( Astra_Minify::get_instance(), 'enqueue_scripts' ), 7 );
}
// Sticky Header.
if ( true === Astra_Ext_Extension::is_active( 'sticky-header' ) && is_callable( 'Astra_Ext_Sticky_Header_Markup::get_instance' ) ) {
remove_action( 'astra_addon_get_css_files', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'add_styles' ) );
remove_action( 'astra_addon_get_js_files', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'add_scripts' ) );
remove_filter( 'astra_addon_js_localize', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'localize_variables' ) );
remove_action( 'body_class', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'add_body_class' ) );
remove_action( 'astra_header', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'none_header_markup' ), 5 );
remove_action( 'astra_header', array( Astra_Ext_Sticky_Header_Markup::get_instance(), 'fixed_header_markup' ), 11 );
remove_filter( 'astra_addon_dynamic_css', 'astra_ext_sticky_header_dynamic_css', 30 );
remove_filter( 'astra_addon_dynamic_css', 'astra_ext_above_header_sections_dynamic_css', 30 );
remove_filter( 'astra_addon_dynamic_css', 'astra_ext_below_header_sections_dynamic_css', 30 );
remove_filter( 'astra_addon_dynamic_css', 'astra_ext_sticky_header_with_site_layouts_dynamic_css' );
}
// Nav Menu Addon.
if ( true === Astra_Ext_Extension::is_active( 'nav-menu' ) && is_callable( 'Astra_Ext_Nav_Menu_Loader::get_instance' ) ) {
remove_action( 'astra_addon_get_css_files', array( Astra_Ext_Nav_Menu_Loader::get_instance(), 'add_styles' ) );
remove_filter( 'wp_nav_menu_args', array( Astra_Ext_Nav_Menu_Loader::get_instance(), 'modify_nav_menu_args' ) );
remove_filter( 'astra_addon_dynamic_css', 'astra_addon_mega_menu_dynamic_css' );
}
// Page Header Addon.
if ( true === Astra_Ext_Extension::is_active( 'advanced-headers' ) && is_callable( 'Astra_Ext_Advanced_Headers_Markup::get_instance' ) ) {
remove_action( 'wp_enqueue_scripts', array( Astra_Ext_Advanced_Headers_Markup::get_instance(), 'add_scripts' ), 9 );
add_action( 'wp_enqueue_scripts', array( Astra_Ext_Advanced_Headers_Markup::get_instance(), 'add_scripts' ), 6 );
}
// Blog Pro Addon.
if ( true === Astra_Ext_Extension::is_active( 'blog-pro' ) && is_callable( 'Astra_Ext_Blog_Pro_Markup::get_instance' ) ) {
// Remove Auto Load Previous Posts option.
remove_action( 'init', array( Astra_Ext_Blog_Pro_Markup::get_instance(), 'init_action' ) );
add_filter( 'astra_get_option_ast-auto-prev-post', '__return_false' );
// Remove Infinite Scroll option.
remove_filter( 'astra_theme_js_localize', array( Astra_Ext_Blog_Pro_Markup::get_instance(), 'blog_js_localize' ) );
remove_filter( 'astra_pagination_markup', array( Astra_Ext_Blog_Pro_Markup::get_instance(), 'astra_blog_pagination' ) );
add_filter( 'astra_get_option_blog-pagination', array( $this, 'return_number_pagination' ) );
}
if ( true === Astra_Ext_Extension::is_active( 'advanced-search' ) ) {
add_filter( 'astra_get_option_header-main-rt-section-search-box-type', array( $this, 'return_slide_search' ) );
}
if ( true === Astra_Ext_Extension::is_active( 'header-sections' ) ) {
add_filter( 'astra_get_option_above-header-layout', array( $this, 'return_disabled' ) );
add_filter( 'astra_get_option_below-header-layout', array( $this, 'return_disabled' ) );
}
if ( true === Astra_Ext_Extension::is_active( 'mobile-header' ) ) {
add_filter( 'astra_get_option_mobile-menu-style', array( $this, 'return_default' ) );
}
if ( true === Astra_Ext_Extension::is_active( 'colors-and-background' ) ) {
add_filter( 'astra_addon_colors_dynamic_css_desktop', array( $this, 'css_replace_breakpoint_to_amp' ) );
add_filter( 'astra_addon_colors_dynamic_css_tablet', array( $this, 'css_replace_breakpoint_to_amp' ) );
add_filter( 'astra_addon_colors_dynamic_css_mobile', array( $this, 'css_replace_breakpoint_to_amp' ) );
}
add_filter( 'astra_addon_render_custom_layout_content', array( $this, 'custom_layout_disable_on_amp' ), 10, 2 );
}
/**
* Add prefix to Assets cache key if on AMP endpoint.
*
* @param String $asset_type Asset type.
* @return String Asset type with AMP Prefix.
*/
public function cache_add_amp_prefix( $asset_type ) {
return 'amp-' . $asset_type;
}
/**
* Disable Custom Layout on frontend if it is disabled on AMP.
*
* @since 1.7.0
* @param boolean $status Status true if layout is tobe displayed on the frontend. False is it should not be rendered.
* @param int $post_id Post ID which is to be rendered from the Custom Layout.
* @return boolean.
*/
public function custom_layout_disable_on_amp( $status, $post_id ) {
$amp_status = get_post_meta( $post_id, 'amp_status', true );
if ( 'enabled' === $amp_status || '' === $amp_status ) {
$status = true;
} else {
$status = false;
}
return $status;
}
/**
* Change the breakpoint CSS class to ast-amp for AMP specific CSS.
*
* @since 1.7.0
*
* @param String $css compiled css.
* @return String
*/
public function css_replace_breakpoint_to_amp( $css ) {
return str_replace( 'ast-header-break-point', 'ast-amp', $css );
}
/**
* FReturn `slide-search` string.
*
* @since 1.7.0
*
* @return String
*/
public function return_slide_search() {
return 'slide-search';
}
/**
* Return `disabled` string.
*
* @since 1.7.0
*
* @return String
*/
public function return_disabled() {
return 'disabled';
}
/**
* Return `default` string.
*
* @since 1.7.0
*
* @return String
*/
public function return_default() {
return 'default';
}
/**
* Return number string.
*
* @since 1.7.0
*
* @return String
*/
public function return_number_pagination() {
return 'number';
}
}
/**
* Kicking this off by calling 'get_instance()' method
*/
new Astra_Addon_AMP_Compatibility();