endpoints as $index => $endpoint ) { if ( AMP_QUERY_VAR === $endpoint[1] ) { unset( $wp_rewrite->endpoints[ $index ] ); break; } } flush_rewrite_rules(); } add_action( 'init', 'amp_init' ); function amp_init() { if ( false === apply_filters( 'amp_is_enabled', true ) ) { return; } define( 'AMP_QUERY_VAR', apply_filters( 'amp_query_var', 'amp' ) ); do_action( 'amp_init' ); load_plugin_textdomain( 'amp', false, plugin_basename( AMP__DIR__ ) . '/languages' ); add_rewrite_endpoint( AMP_QUERY_VAR, EP_PERMALINK ); add_post_type_support( 'post', AMP_QUERY_VAR ); add_filter( 'request', 'amp_force_query_var_value' ); add_action( 'wp', 'amp_maybe_add_actions' ); // Redirect the old url of amp page to the updated url. add_filter( 'old_slug_redirect_url', 'amp_redirect_old_slug_to_new_url' ); if ( class_exists( 'Jetpack' ) && ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) { require_once( AMP__DIR__ . '/jetpack-helper.php' ); } } // Make sure the `amp` query var has an explicit value. // Avoids issues when filtering the deprecated `query_string` hook. function amp_force_query_var_value( $query_vars ) { if ( isset( $query_vars[ AMP_QUERY_VAR ] ) && '' === $query_vars[ AMP_QUERY_VAR ] ) { $query_vars[ AMP_QUERY_VAR ] = 1; } return $query_vars; } function amp_maybe_add_actions() { if ( ! is_singular() || is_feed() ) { return; } $is_amp_endpoint = is_amp_endpoint(); // Cannot use `get_queried_object` before canonical redirect; see https://core.trac.wordpress.org/ticket/35344 global $wp_query; $post = $wp_query->post; $supports = post_supports_amp( $post ); if ( ! $supports ) { if ( $is_amp_endpoint ) { wp_safe_redirect( get_permalink( $post->ID ) ); exit; } return; } if ( $is_amp_endpoint ) { amp_prepare_render(); } else { amp_add_frontend_actions(); } } function amp_load_classes() { require_once( AMP__DIR__ . '/includes/class-amp-post-template.php' ); // this loads everything else } function amp_add_frontend_actions() { require_once( AMP__DIR__ . '/includes/amp-frontend-actions.php' ); } function amp_add_post_template_actions() { require_once( AMP__DIR__ . '/includes/amp-post-template-actions.php' ); require_once( AMP__DIR__ . '/includes/amp-post-template-functions.php' ); amp_post_template_init_hooks(); } function amp_prepare_render() { add_action( 'template_redirect', 'amp_render' ); } function amp_render() { $post_id = get_queried_object_id(); amp_render_post( $post_id ); exit; } function amp_render_post( $post_id ) { $post = get_post( $post_id ); if ( ! $post ) { return; } amp_load_classes(); do_action( 'pre_amp_render_post', $post_id ); amp_add_post_template_actions(); $template = new AMP_Post_Template( $post_id ); $template->load(); } /** * Bootstraps the AMP customizer. * * If the AMP customizer is enabled, initially drop the core widgets and menus panels. If the current * preview page isn't flagged as an AMP template, the core panels will be re-added and the AMP panel * hidden. * * @internal This callback must be hooked before priority 10 on 'plugins_loaded' to properly unhook * the core panels. * * @since 0.4 */ function _amp_bootstrap_customizer() { /** * Filter whether to enable the AMP template customizer functionality. * * @param bool $enable Whether to enable the AMP customizer. Default true. */ $amp_customizer_enabled = apply_filters( 'amp_customizer_is_enabled', true ); if ( true === $amp_customizer_enabled ) { amp_init_customizer(); } } add_action( 'plugins_loaded', '_amp_bootstrap_customizer', 9 ); /** * Redirects the old AMP URL to the new AMP URL. * If post slug is updated the amp page with old post slug will be redirected to the updated url. * * @param string $link New URL of the post. * * @return string $link URL to be redirected. */ function amp_redirect_old_slug_to_new_url( $link ) { if ( is_amp_endpoint() ) { $link = trailingslashit( trailingslashit( $link ) . AMP_QUERY_VAR ); } return $link; }