You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
5.4 KiB
210 lines
5.4 KiB
<?php |
|
/** |
|
* Callbacks for adding AMP-related things to the admin. |
|
* |
|
* @package AMP |
|
*/ |
|
|
|
/** |
|
* Obsolete constant for flagging when Customizer is opened for AMP. |
|
* |
|
* @deprecated |
|
* @var string |
|
*/ |
|
define( 'AMP_CUSTOMIZER_QUERY_VAR', 'customize_amp' ); |
|
|
|
/** |
|
* Sets up the AMP template editor for the Customizer. |
|
* |
|
* If this is in AMP canonical mode, exit. |
|
* There's no need for the 'AMP' Customizer panel, |
|
* And this does not need to toggle between the AMP and normal display. |
|
*/ |
|
function amp_init_customizer() { |
|
if ( ! AMP_Options_Manager::is_website_experience_enabled() || AMP_Theme_Support::READER_MODE_SLUG !== AMP_Options_Manager::get_option( 'theme_support' ) ) { |
|
return; |
|
} |
|
|
|
// Fire up the AMP Customizer. |
|
add_action( 'customize_register', [ 'AMP_Template_Customizer', 'init' ], 500 ); |
|
|
|
// Add some basic design settings + controls to the Customizer. |
|
add_action( 'amp_init', [ 'AMP_Customizer_Design_Settings', 'init' ] ); |
|
|
|
// Add a link to the Customizer. |
|
add_action( 'admin_menu', 'amp_add_customizer_link' ); |
|
} |
|
|
|
/** |
|
* Get permalink for the first AMP-eligible post. |
|
* |
|
* @return string|null URL on success, null if none found. |
|
*/ |
|
function amp_admin_get_preview_permalink() { |
|
/** |
|
* Filter the post type to retrieve the latest for use in the AMP template customizer. |
|
* |
|
* @param string $post_type Post type slug. Default 'post'. |
|
*/ |
|
$post_type = (string) apply_filters( 'amp_customizer_post_type', 'post' ); |
|
|
|
// Make sure the desired post type is actually supported, and if so, prefer it. |
|
$supported_post_types = get_post_types_by_support( AMP_Post_Type_Support::SLUG ); |
|
if ( in_array( $post_type, $supported_post_types, true ) ) { |
|
$supported_post_types = array_unique( array_merge( [ $post_type ], $supported_post_types ) ); |
|
} |
|
|
|
// Bail if there are no supported post types. |
|
if ( empty( $supported_post_types ) ) { |
|
return null; |
|
} |
|
|
|
// If theme support is present, then bail if the singular template is not supported. |
|
if ( current_theme_supports( AMP_Theme_Support::SLUG ) ) { |
|
$supported_templates = AMP_Theme_Support::get_supportable_templates(); |
|
if ( empty( $supported_templates['is_singular']['supported'] ) ) { |
|
return null; |
|
} |
|
} |
|
|
|
$post_ids = get_posts( |
|
[ |
|
'no_found_rows' => true, |
|
'suppress_filters' => false, |
|
'post_status' => 'publish', |
|
'post_password' => '', |
|
'post_type' => $supported_post_types, |
|
'posts_per_page' => 1, |
|
'fields' => 'ids', |
|
// @todo This should eventually do a meta_query to make sure there are none that have AMP_Post_Meta_Box::STATUS_POST_META_KEY = DISABLED_STATUS. |
|
] |
|
); |
|
|
|
if ( empty( $post_ids ) ) { |
|
return false; |
|
} |
|
|
|
$post_id = $post_ids[0]; |
|
|
|
return amp_get_permalink( $post_id ); |
|
} |
|
|
|
/** |
|
* Registers a submenu page to access the AMP template editor panel in the Customizer. |
|
*/ |
|
function amp_add_customizer_link() { |
|
/** This filter is documented in includes/settings/class-amp-customizer-design-settings.php */ |
|
if ( ! apply_filters( 'amp_customizer_is_enabled', true ) || current_theme_supports( AMP_Theme_Support::SLUG ) ) { |
|
return; |
|
} |
|
|
|
$menu_slug = add_query_arg( |
|
[ |
|
'autofocus[panel]' => AMP_Template_Customizer::PANEL_ID, |
|
'return' => rawurlencode( admin_url() ), |
|
], |
|
'customize.php' |
|
); |
|
|
|
// Add the theme page. |
|
add_theme_page( |
|
__( 'AMP', 'amp' ), |
|
__( 'AMP', 'amp' ), |
|
'edit_theme_options', |
|
$menu_slug |
|
); |
|
} |
|
|
|
/** |
|
* Registers AMP settings. |
|
*/ |
|
function amp_add_options_menu() { |
|
if ( ! is_admin() ) { |
|
return; |
|
} |
|
|
|
/** |
|
* Filter whether to enable the AMP settings. |
|
* |
|
* @since 0.5 |
|
* @param bool $enable Whether to enable the AMP settings. Default true. |
|
*/ |
|
$short_circuit = apply_filters( 'amp_options_menu_is_enabled', true ); |
|
|
|
if ( true !== $short_circuit ) { |
|
return; |
|
} |
|
|
|
$amp_options = new AMP_Options_Menu(); |
|
$amp_options->init(); |
|
} |
|
|
|
/** |
|
* Add custom analytics. |
|
* |
|
* This is currently only used for legacy AMP post templates. |
|
* |
|
* @since 0.5 |
|
* @see amp_get_analytics() |
|
* |
|
* @param array $analytics Analytics. |
|
* @return array Analytics. |
|
*/ |
|
function amp_add_custom_analytics( $analytics = [] ) { |
|
$analytics = amp_get_analytics( $analytics ); |
|
|
|
/** |
|
* Add amp-analytics tags. |
|
* |
|
* This filter allows you to easily insert any amp-analytics tags without needing much heavy lifting. |
|
* This filter should be used to alter entries for legacy AMP templates. |
|
* |
|
* @since 0.4 |
|
* |
|
* @param array $analytics An associative array of the analytics entries we want to output. Each array entry must have a unique key, and the value should be an array with the following keys: `type`, `attributes`, `script_data`. See readme for more details. |
|
* @param WP_Post $post The current post. |
|
*/ |
|
$analytics = apply_filters( 'amp_post_template_analytics', $analytics, get_queried_object() ); |
|
|
|
return $analytics; |
|
} |
|
|
|
/** |
|
* Bootstrap AMP post meta box. |
|
* |
|
* This function must be invoked only once through the 'wp_loaded' action. |
|
* |
|
* @since 0.6 |
|
*/ |
|
function amp_post_meta_box() { |
|
$post_meta_box = new AMP_Post_Meta_Box(); |
|
$post_meta_box->init(); |
|
} |
|
|
|
/** |
|
* Bootstrap AMP Editor core blocks. |
|
*/ |
|
function amp_editor_core_blocks() { |
|
$editor_blocks = new AMP_Editor_Blocks(); |
|
$editor_blocks->init(); |
|
} |
|
|
|
/** |
|
* Bootstrap the AMP admin pointer class. |
|
* |
|
* @since 1.0 |
|
*/ |
|
function amp_admin_pointer() { |
|
$admin_pointers = new AMP_Admin_Pointers(); |
|
$admin_pointers->init(); |
|
} |
|
|
|
/** |
|
* Bootstrap the Story Templates needed in editor. |
|
* |
|
* @since 1.? |
|
*/ |
|
function amp_story_templates() { |
|
$story_templates = new AMP_Story_Templates(); |
|
$story_templates->init(); |
|
}
|
|
|