wp_back/wp-content/plugins/wp-smushit/core/class-rest.php
2024-05-20 15:37:46 +03:00

118 lines
3.0 KiB
PHP

<?php
/**
* Smush integration with Rest API: Rest class
*
* @package Smush\Core
* @since 2.8.0
*
* @author Anton Vanyukov <anton@incsub.com>
*
* @copyright (c) 2018, Incsub (http://incsub.com)
*/
namespace Smush\Core;
use WP_Smush;
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* Singleton class Rest for extending the WordPress REST API interface.
*
* @since 2.8.0
*/
class Rest {
/**
* Rest constructor.
*/
public function __construct() {
// Register smush meta fields and callbacks for the image object in the
// wp-json/wp/v2/media REST API endpoint.
add_action( 'rest_api_init', array( $this, 'register_smush_meta' ) );
// Custom route for handling configs.
add_action( 'rest_api_init', array( $this, 'register_configs_route' ) );
}
/**
* Callback for rest_api_init action.
*
* @since 2.8.0
*/
public function register_smush_meta() {
register_rest_field(
'attachment',
'smush',
array(
'get_callback' => array( $this, 'register_image_stats' ),
'schema' => array(
'description' => __( 'Smush data.', 'wp-smushit' ),
'type' => 'string',
),
)
);
}
/**
* Add image stats to the wp-json/wp/v2/media REST API endpoint.
*
* Will add the stats from wp-smpro-smush-data image meta key to the media REST API endpoint.
* If image is Smushed, the stats from the meta can be queried, if the not - the status of Smushing
* will be displayed as a string in the API.
*
* @since 2.8.0
*
* @link https://developer.wordpress.org/rest-api/reference/media/
*
* @param array $image Image array.
*
* @return array|string
*/
public function register_image_stats( $image ) {
if ( get_transient( 'smush-in-progress-' . $image['id'] ) ) {
return __( 'Smushing in progress', 'wp-smushit' );
}
$wp_smush_data = get_post_meta( $image['id'], Modules\Smush::$smushed_meta_key, true );
if ( empty( $wp_smush_data ) ) {
return __( 'Not processed', 'wp-smushit' );
}
$wp_resize_savings = get_post_meta( $image['id'], 'wp-smush-resize_savings', true );
$conversion_savings = get_post_meta( $image['id'], 'wp-smush-pngjpg_savings', true );
$combined_stats = WP_Smush::get_instance()->core()->combined_stats( $wp_smush_data, $wp_resize_savings );
return WP_Smush::get_instance()->core()->combine_conversion_stats( $combined_stats, $conversion_savings );
}
/**
* Registers the custom route for handling configs.
*
* @since 3.8.6
*/
public function register_configs_route() {
$configs_handler = new Configs();
register_rest_route(
'wp-smush/v1',
'/preset_configs/',
array(
array(
'methods' => 'GET',
'callback' => array( $configs_handler, 'get_callback' ),
'permission_callback' => array( $configs_handler, 'permission_callback' ),
),
array(
'methods' => 'POST',
'callback' => array( $configs_handler, 'post_callback' ),
'permission_callback' => array( $configs_handler, 'permission_callback' ),
),
)
);
}
}