Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* The Analytics Module
|
||||
*
|
||||
* @since 1.0.49
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\modules
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Analytics;
|
||||
|
||||
use stdClass;
|
||||
use WP_Error;
|
||||
use WP_REST_Request;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Analytics\DB;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Posts class.
|
||||
*/
|
||||
class Posts extends Objects {
|
||||
|
||||
/**
|
||||
* Get post data.
|
||||
*
|
||||
* @param WP_REST_Request $request post object.
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public function get_post( $request ) {
|
||||
$id = $request->get_param( 'id' );
|
||||
$post = DB::objects()
|
||||
->where( 'object_id', $id )
|
||||
->one();
|
||||
|
||||
if ( is_null( $post ) ) {
|
||||
return [ 'errorMessage' => esc_html__( 'Sorry, no post found for given id.', 'rank-math' ) ];
|
||||
}
|
||||
|
||||
$post->admin_url = admin_url();
|
||||
$post->home_url = home_url();
|
||||
|
||||
return apply_filters( 'rank_math/analytics/post_data', (array) $post, $request );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts by objects.
|
||||
*
|
||||
* @param WP_REST_Request $request Full details about the request.
|
||||
*
|
||||
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
|
||||
*/
|
||||
public function get_posts_rows_by_objects( WP_REST_Request $request ) {
|
||||
$pre = apply_filters( 'rank_math/analytics/get_posts_rows_by_objects', false, $request );
|
||||
if ( false !== $pre ) {
|
||||
return $pre;
|
||||
}
|
||||
|
||||
$cache_group = 'rank_math_posts_rows_by_objects';
|
||||
$cache_key = $this->generate_hash( $request );
|
||||
$data = $this->get_cache( $cache_key, $cache_group );
|
||||
if ( false !== $data ) {
|
||||
return rest_ensure_response( $data );
|
||||
}
|
||||
|
||||
// Pagination.
|
||||
$per_page = 25;
|
||||
$offset = ( $request->get_param( 'page' ) - 1 ) * $per_page;
|
||||
|
||||
// Get objects filtered by seo score range and it's analytics data.
|
||||
$objects = $this->get_objects_by_score( $request );
|
||||
$pages = \array_keys( $objects['rows'] );
|
||||
$console = $this->get_analytics_data(
|
||||
[
|
||||
'offset' => 0, // Here offset should always zero.
|
||||
'perpage' => $objects['rowsFound'],
|
||||
'sub_where' => " AND page IN ('" . join( "', '", $pages ) . "')",
|
||||
]
|
||||
);
|
||||
|
||||
// Construct return data.
|
||||
$new_rows = [];
|
||||
foreach ( $objects['rows'] as $object ) {
|
||||
$page = $object['page'];
|
||||
|
||||
if ( isset( $console[ $page ] ) ) {
|
||||
$object = \array_merge( $console[ $page ], $object );
|
||||
}
|
||||
|
||||
if ( ! isset( $object['links'] ) ) {
|
||||
$object['links'] = new stdClass();
|
||||
}
|
||||
|
||||
$new_rows[ $page ] = $object;
|
||||
}
|
||||
|
||||
$count = count( $new_rows );
|
||||
|
||||
if ( $offset + 25 <= $count ) {
|
||||
$new_rows = array_slice( $new_rows, $offset, 25 );
|
||||
|
||||
} else {
|
||||
$rest = $count - $offset;
|
||||
$new_rows = array_slice( $new_rows, $offset, $rest );
|
||||
}
|
||||
if ( empty( $new_rows ) ) {
|
||||
$new_rows['response'] = 'No Data';
|
||||
}
|
||||
|
||||
$output = [
|
||||
'rows' => $new_rows,
|
||||
'rowsFound' => $objects['rowsFound'],
|
||||
];
|
||||
|
||||
$this->set_cache( $cache_key, $output, $cache_group, DAY_IN_SECONDS );
|
||||
|
||||
return rest_ensure_response( $output );
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user