118 lines
3.0 KiB
PHP
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' ),
|
||
|
),
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|