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.
157 lines
3.6 KiB
157 lines
3.6 KiB
5 years ago
|
<?php
|
||
|
/**
|
||
|
* AMP Post type support.
|
||
|
*
|
||
|
* @package AMP
|
||
|
* @since 0.6
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Class AMP_Post_Type_Support.
|
||
|
*/
|
||
|
class AMP_Post_Type_Support {
|
||
|
|
||
|
/**
|
||
|
* Post type support slug.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
const SLUG = 'amp';
|
||
|
|
||
|
/**
|
||
|
* Get post types that plugin supports out of the box (which cannot be disabled).
|
||
|
*
|
||
|
* @deprecated
|
||
|
* @return string[] Post types.
|
||
|
*/
|
||
|
public static function get_builtin_supported_post_types() {
|
||
|
_deprecated_function( __METHOD__, '1.0' );
|
||
|
return array_filter( [ 'post' ], 'post_type_exists' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get post types that are eligible for AMP support.
|
||
|
*
|
||
|
* @since 0.6
|
||
|
* @return string[] Post types eligible for AMP.
|
||
|
*/
|
||
|
public static function get_eligible_post_types() {
|
||
|
return array_diff(
|
||
|
array_values(
|
||
|
get_post_types(
|
||
|
[
|
||
|
'public' => true,
|
||
|
],
|
||
|
'names'
|
||
|
)
|
||
|
),
|
||
|
[
|
||
|
AMP_Story_Post_Type::POST_TYPE_SLUG,
|
||
|
]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Declare support for post types.
|
||
|
*
|
||
|
* This function should only be invoked through the 'after_setup_theme' action to
|
||
|
* allow plugins/theme to overwrite the post types support.
|
||
|
*
|
||
|
* @since 0.6
|
||
|
*/
|
||
|
public static function add_post_type_support() {
|
||
|
if ( current_theme_supports( AMP_Theme_Support::SLUG ) && AMP_Options_Manager::get_option( 'all_templates_supported' ) ) {
|
||
|
$post_types = self::get_eligible_post_types();
|
||
|
} else {
|
||
|
$post_types = AMP_Options_Manager::get_option( 'supported_post_types', [] );
|
||
|
}
|
||
|
foreach ( $post_types as $post_type ) {
|
||
|
add_post_type_support( $post_type, self::SLUG );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return error codes for why a given post does not have AMP support.
|
||
|
*
|
||
|
* @since 0.6
|
||
|
*
|
||
|
* @param WP_Post|int $post Post.
|
||
|
* @return array Error codes for why a given post does not have AMP support.
|
||
|
*/
|
||
|
public static function get_support_errors( $post ) {
|
||
|
if ( ! ( $post instanceof WP_Post ) ) {
|
||
|
$post = get_post( $post );
|
||
|
}
|
||
|
$errors = [];
|
||
|
|
||
|
if ( ! post_type_supports( $post->post_type, self::SLUG ) ) {
|
||
|
$errors[] = 'post-type-support';
|
||
|
}
|
||
|
|
||
|
if ( post_password_required( $post ) ) {
|
||
|
$errors[] = 'password-protected';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Filters whether to skip the post from AMP.
|
||
|
*
|
||
|
* @since 0.3
|
||
|
*
|
||
|
* @param bool $skipped Skipped.
|
||
|
* @param int $post_id Post ID.
|
||
|
* @param WP_Post $post Post.
|
||
|
*/
|
||
|
if ( isset( $post->ID ) && true === apply_filters( 'amp_skip_post', false, $post->ID, $post ) ) {
|
||
|
$errors[] = 'skip-post';
|
||
|
}
|
||
|
|
||
|
$status = get_post_meta( $post->ID, AMP_Post_Meta_Box::STATUS_POST_META_KEY, true );
|
||
|
if ( $status ) {
|
||
|
if ( AMP_Post_Meta_Box::DISABLED_STATUS === $status ) {
|
||
|
$errors[] = 'post-status-disabled';
|
||
|
}
|
||
|
} else {
|
||
|
/*
|
||
|
* Disabled by default for custom page templates, page on front and page for posts, unless 'amp' theme
|
||
|
* support is present (in which case AMP_Theme_Support::get_template_availability() determines availability).
|
||
|
*/
|
||
|
$enabled = (
|
||
|
current_theme_supports( AMP_Theme_Support::SLUG )
|
||
|
||
|
||
|
(
|
||
|
! (bool) get_page_template_slug( $post )
|
||
|
&&
|
||
|
! (
|
||
|
'page' === $post->post_type
|
||
|
&&
|
||
|
'page' === get_option( 'show_on_front' )
|
||
|
&&
|
||
|
in_array(
|
||
|
(int) $post->ID,
|
||
|
[
|
||
|
(int) get_option( 'page_on_front' ),
|
||
|
(int) get_option( 'page_for_posts' ),
|
||
|
],
|
||
|
true
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Filters whether default AMP status should be enabled or not.
|
||
|
*
|
||
|
* @since 0.6
|
||
|
*
|
||
|
* @param string $status Status.
|
||
|
* @param WP_Post $post Post.
|
||
|
*/
|
||
|
$enabled = apply_filters( 'amp_post_status_default_enabled', $enabled, $post );
|
||
|
if ( ! $enabled ) {
|
||
|
$errors[] = 'post-status-disabled';
|
||
|
}
|
||
|
}
|
||
|
return $errors;
|
||
|
}
|
||
|
}
|