File: //home/vitanhod/www/wp-content/plugins/system-control/api/endpoints/class-sc-pages-endpoint.php
<?php
class SC_Pages_Endpoint {
public function register() {
register_rest_route(SC_REST_NAMESPACE, '/pages', [
[
'methods' => 'GET',
'callback' => [$this, 'list_pages'],
'permission_callback' => ['SC_Api_Auth', 'verify'],
],
[
'methods' => 'POST',
'callback' => [$this, 'create_page'],
'permission_callback' => ['SC_Api_Auth', 'verify'],
],
]);
register_rest_route(SC_REST_NAMESPACE, '/pages/(?P<id>\d+)', [
[
'methods' => 'PUT',
'callback' => [$this, 'update_page'],
'permission_callback' => ['SC_Api_Auth', 'verify'],
],
[
'methods' => 'DELETE',
'callback' => [$this, 'delete_page'],
'permission_callback' => ['SC_Api_Auth', 'verify'],
],
]);
}
public function list_pages($request) {
$per_page = (int)($request->get_param('per_page') ?: 20);
$page = (int)($request->get_param('page') ?: 1);
$query = new WP_Query([
'post_type' => 'page',
'post_status' => 'any',
'posts_per_page' => $per_page,
'paged' => $page,
'orderby' => 'date',
'order' => 'DESC',
]);
$pages = [];
foreach ($query->posts as $p) {
$pages[] = [
'id' => $p->ID,
'title' => $p->post_title,
'slug' => $p->post_name,
'status' => $p->post_status,
'date' => $p->post_date,
'content' => $p->post_content,
];
}
return rest_ensure_response([
'pages' => $pages,
'total' => $query->found_posts,
'pages_count' => $query->max_num_pages,
]);
}
public function create_page($request) {
$params = $request->get_json_params();
$id = wp_insert_post([
'post_title' => sanitize_text_field($params['title'] ?? ''),
'post_content' => $params['content'] ?? '',
'post_status' => sanitize_text_field($params['status'] ?? 'draft'),
'post_type' => 'page',
], true);
if (is_wp_error($id)) return $id;
return rest_ensure_response(['success' => true, 'id' => $id]);
}
public function update_page($request) {
$id = (int)$request['id'];
$params = $request->get_json_params();
$data = ['ID' => $id];
if (isset($params['title'])) $data['post_title'] = sanitize_text_field($params['title']);
if (isset($params['content'])) $data['post_content'] = $params['content'];
if (isset($params['status'])) $data['post_status'] = sanitize_text_field($params['status']);
$result = wp_update_post($data, true);
if (is_wp_error($result)) return $result;
return rest_ensure_response(['success' => true, 'id' => $id]);
}
public function delete_page($request) {
$id = (int)$request['id'];
$force = (bool)($request->get_param('force') ?? false);
return rest_ensure_response(['success' => (bool)wp_delete_post($id, $force)]);
}
}