Current Path : /storage/v11800/newruvamithai/public_html/wp-content/plugins/jetpack/json-endpoints/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/newruvamithai/public_html/wp-content/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php |
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
/**
* List post types endpoint.
*/
new WPCOM_JSON_API_List_Post_Types_Endpoint(
array(
'description' => 'Get a list of post types available for a site.',
'group' => 'sites',
'stat' => 'sites:X:post-types',
'method' => 'GET',
'path' => '/sites/%s/post-types',
'path_labels' => array(
'$site' => '(int|string) Site ID or domain',
),
'allow_fallback_to_jetpack_blog_token' => true,
'query_parameters' => array(
'api_queryable' => '(bool) If true, only queryable post types are returned',
),
'response_format' => array(
'found' => '(int) The number of post types found',
'post_types' => '(array) A list of available post types',
),
'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/33534099/post-types',
)
);
/**
* List Post types endpoint class.
*
* /sites/%s/post-types -> $blog_id
*/
class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
/**
* Post type keys to include.
*
* @var array
*/
public static $post_type_keys_to_include = array(
'name' => 'name',
'label' => 'label',
'labels' => 'labels',
'description' => 'description',
'map_meta_cap' => 'map_meta_cap',
'cap' => 'capabilities',
'hierarchical' => 'hierarchical',
'public' => 'public',
'show_ui' => 'show_ui',
'publicly_queryable' => 'publicly_queryable',
);
/**
* API callback.
*
* @param string $path - the path.
* @param string $blog_id - the blog ID.
*/
public function callback( $path = '', $blog_id = 0 ) {
$blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
if ( is_wp_error( $blog_id ) ) {
return $blog_id;
}
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
$this->load_theme_functions();
/**
* Whether API responses should be returned in a custom locale. False
* for Jetpack; may be true for WP.com requests.
*
* @since 3.9.2
*/
if ( apply_filters( 'rest_api_localize_response', false ) ) {
// API localization occurs after the initial post types have been
// registered, so let's get the post type labels translated.
if ( 'en' !== get_locale() ) {
global $wp_post_types;
foreach ( $wp_post_types as $post_type_object ) {
foreach ( array_keys( (array) $post_type_object->labels ) as $label_key ) {
// Direct use of translate call because this doesn't need to be extracted.
// phpcs:ignore WordPress.WP.I18n
$post_type_object->labels->$label_key = translate( $post_type_object->labels->$label_key, 'default' );
}
}
}
}
}
// Get a list of available post types.
$post_types = get_post_types();
$formatted_post_type_objects = array();
// Retrieve post type object for each post type.
foreach ( $post_types as $post_type ) {
// Skip non-queryable if filtering on queryable only.
$is_queryable = $this->is_post_type_allowed( $post_type );
if ( ! $is_queryable ) {
continue;
}
$post_type_object = get_post_type_object( $post_type );
$formatted_post_type_object = array();
// Include only the desired keys in the response.
foreach ( self::$post_type_keys_to_include as $key => $value ) {
$formatted_post_type_object[ $value ] = $post_type_object->{ $key };
}
$formatted_post_type_object['api_queryable'] = $is_queryable;
$formatted_post_type_object['supports'] = get_all_post_type_supports( $post_type );
if ( $this->post_type_supports_tags( $post_type ) ) {
$formatted_post_type_object['supports']['tags'] = true;
}
$formatted_post_type_objects[] = $formatted_post_type_object;
}
return array(
'found' => count( $formatted_post_type_objects ),
'post_types' => $formatted_post_type_objects,
);
}
/**
* See if post type supports tags.
*
* @param string $post_type - the post type.
*/
public function post_type_supports_tags( $post_type ) {
if ( in_array( 'post_tag', get_object_taxonomies( $post_type ), true ) ) {
return true;
}
// the featured content module adds post_tag support
// to the post types that are registered for it
// however it does so in a way that isn't available
// to get_object_taxonomies.
$featured_content = get_theme_support( 'featured-content' );
if ( ! $featured_content || empty( $featured_content[0] ) || empty( $featured_content[0]['post_types'] ) ) {
return false;
}
if ( is_array( $featured_content[0]['post_types'] ) ) {
return in_array( $post_type, $featured_content[0]['post_types'], true );
}
return $post_type === $featured_content[0]['post_types'];
}
}