nskldgskgsdgf hlsqmdklsqd speskdjqsjdss PKSU![class-wp-rest-server.phpnu[PKWU![ova/load.php.tarnu[PKYU![5ova/class-wp-rest-edit-site-export-controller.php.tarnu[PKYU![ova/block-patterns.tar.gznu[PKZU![.ova/class-wp-block-parser-frame.php.php.tar.gznu[PK[U![ova/ms-load.php.tarnu[PK\U![ova/version.php.php.tar.gznu[PK]U![ova/File.php.php.tar.gznu[PK`U![ova/meta.php.tarnu[PK`U![,ova/class.wp-styles.php.wp-styles.php.tar.gznu[PKaU![ova/load.php.php.tar.gznu[PKbU![ova/block-bindings.tarnu[PKcU![ova/meta.php.php.tar.gznu[PKdU![ova/http.php.tarnu[PKeU![ova/ms-default-filters.php.tarnu[PKeU![ova/images.zipnu[PKfU!['ova/class-wp-block-parser-frame.php.tarnu[PKgU!["ova/template-canvas.php.php.tar.gznu[PKhU![ova/template-canvas.php.tarnu[PKiU![ova/error_log.tarnu[PKiU![?ova/class-wp-rest-navigation-fallback-controller.php.php.tar.gznu[PKjU!["ova/class-avif-info.php.php.tar.gznu[PKkU![ova/date.php.php.tar.gznu[PKlU![ova/date.php.tarnu[PKmU![.ova/class-wp-block-parser-block.php.php.tar.gznu[PKnU![8ova/class-wp-rest-navigation-fallback-controller.php.tarnu[PKnU![ova/Curl.php.php.tar.gznu[PKoU![ova/http.php.php.tar.gznu[PKpU![ova/Curl.php.tarnu[PKqU![ova/block-editor.php.tarnu[PKrU![ ova/index.phpnu[PKrU!["ova/template-loader.php.php.tar.gznu[PKsU![%ova/class-wp-exception.php.php.tar.gznu[PKtU![ova/HookManager.php.php.tar.gznu[PKuU![ova/Misc.php.php.tar.gznu[PKuU![ova/block-editor.php.php.tar.gznu[PKvU![ova/ova.tar.gznu[PKwU![ova/index.php.php.tar.gznu[PKxU![ova/images.tar.gznu[PKyU![ova/PHPMailer.tarnu[PKzU![!ova/class.wp-dependencies.php.tarnu[PK{U![ova/kses.php.tarnu[PK|U![ova/index.php.tarnu[PK}U![ova/images.tarnu[PK}U![ova/HookManager.php.tarnu[PKU!["ova/default-widgets.php.php.tar.gznu[PKU![ova/class-avif-info.php.tarnu[PKU![ova/Misc.php.tarnu[PKU![-ova/class-wp-rest-comments-controller.php.tarnu[PKU![<ova/class-wp-rest-edit-site-export-controller.php.php.tar.gznu[PKU![ova/kses.php.php.tar.gznu[PKU![ ova/ova.tarnu[PKU![ova/Cookie.zipnu[PKU![ova/File.php.tarnu[PKU![ova/block-patterns.zipnu[PKU!['ova/class-wp-block-parser-block.php.tarnu[PKU![ova/PHPMailer.tar.gznu[PKU![ova/https-migration.php.tarnu[PKU![ova/ms-load.php.php.tar.gznu[PKU![ova/error_log.tar.gznu[PKU![ova/Cookie.tarnu[PKU![ova/block-patterns.tarnu[PKU![8ova/class.wp-dependencies.php.wp-dependencies.php.tar.gznu[PKU![ova/PHPMailer.zipnu[PKU![ova/block-bindings.tar.gznu[PKU![$ova/class-wp-rest-controller.php.tarnu[PKU![(ova/class-wp-dependencies.php.php.tar.gznu[PKU![ova/class.wp-styles.php.tarnu[PKU![ova/Exception.tarnu[PKU![ova/version.php.tarnu[PKU![2ova/class-wp-rest-font-families-controller.php.tarnu[PKU![!ova/class-wp-dependencies.php.tarnu[PKU!["ova/https-migration.php.php.tar.gznu[PKU![ ova/css.zipnu[PKU!["ova/class-simplepie.php.php.tar.gznu[PKU![ova/block-bindings.zipnu[PKU![+ova/class-wp-rest-controller.php.php.tar.gznu[PKU![ova/Cookie.tar.gznu[PKU![ova/template-loader.php.tarnu[PKU![ova/cron.php.php.tar.gznu[PKU![ova/class-simplepie.php.tarnu[PKU![ova/default-widgets.php.tarnu[PKU![ ova/error_lognu[PKU![ova/class-wp-exception.php.tarnu[PKU![9ova/class-wp-rest-font-families-controller.php.php.tar.gznu[PKU![ova/cron.php.tarnu[PKU![class-wp-rest-request.phpnu[PKU![class-wp-rest-response.phpnu[PKU!['search/class-wp-rest-search-handler.phpnu[PKU![,search/class-wp-rest-post-search-handler.phpnu[PKU![3search/class-wp-rest-post-format-search-handler.phpnu[PKU![,search/class-wp-rest-term-search-handler.phpnu[PKU![search/error_lognu[PKU![)fields/class-wp-rest-post-meta-fields.phpnu[PKU![)fields/class-wp-rest-term-meta-fields.phpnu[PKU![,fields/class-wp-rest-comment-meta-fields.phpnu[PKU![)fields/class-wp-rest-user-meta-fields.phpnu[PKU![$fields/class-wp-rest-meta-fields.phpnu[PKU![fields/error_lognu[PKU![2endpoints/class-wp-rest-url-details-controller.phpnu[PKU![,endpoints/class-wp-rest-posts-controller.phpnu[PKU![-endpoints/class-wp-rest-search-controller.phpnu[PKU![5endpoints/class-wp-rest-menu-locations-controller.phpnu[PKU![-endpoints/class-wp-rest-blocks-controller.phpnu[PKU![.endpoints/class-wp-rest-plugins-controller.phpnu[PKU![/endpoints/class-wp-rest-settings-controller.phpnu[PKU![>endpoints/class-wp-rest-global-styles-revisions-controller.phpnu[PKU![9endpoints/class-wp-rest-template-autosaves-controller.phpnu[PKU![<endpoints/class-wp-rest-application-passwords-controller.phpnu[PKU![7endpoints/class-wp-rest-edit-site-export-controller.phpnu[PKU![.endpoints/class-wp-rest-widgets-controller.phpnu[PKU![9endpoints/class-wp-rest-template-revisions-controller.phpnu[PKU![1endpoints/class-wp-rest-post-types-controller.phpnu[PKU![,endpoints/class-wp-rest-menus-controller.phpnu[PKU![0endpoints/class-wp-rest-revisions-controller.phpnu[PKU![2endpoints/class-wp-rest-attachments-controller.phpnu[PKU![:endpoints/class-wp-rest-navigation-fallback-controller.phpnu[PKU![/endpoints/class-wp-rest-comments-controller.phpnu[PKU![4endpoints/class-wp-rest-global-styles-controller.phpnu[PKU![,endpoints/class-wp-rest-terms-controller.phpnu[PKU![?endpoints/class-wp-rest-block-pattern-categories-controller.phpnu[PKU![5endpoints/class-wp-rest-block-renderer-controller.phpnu[PKU![-endpoints/class-wp-rest-themes-controller.phpnu[PKU![0endpoints/class-wp-rest-autosaves-controller.phpnu[PKU![5endpoints/class-wp-rest-block-patterns-controller.phpnu[PKU![,endpoints/class-wp-rest-users-controller.phpnu[PKU![1endpoints/class-wp-rest-taxonomies-controller.phpnu[PKU![1endpoints/class-wp-rest-font-faces-controller.phpnu[PKU![hE(E(4endpoints/class-wp-rest-post-statuses-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'statuses'; } /** * Registers the routes for post statuses. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'status' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read post statuses. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage post statuses.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all post statuses, depending on user context. * * @since 4.7.0 * * @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_items( $request ) { $data = array(); $statuses = get_post_stati( array( 'internal' => false ), 'object' ); $statuses['trash'] = get_post_status_object( 'trash' ); foreach ( $statuses as $obj ) { $ret = $this->check_read_permission( $obj ); if ( ! $ret ) { continue; } $status = $this->prepare_item_for_response( $obj, $request ); $data[ $obj->name ] = $this->prepare_response_for_collection( $status ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $status = get_post_status_object( $request['status'] ); if ( empty( $status ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $check = $this->check_read_permission( $status ); if ( ! $check ) { return new WP_Error( 'rest_cannot_read_status', __( 'Cannot view status.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Checks whether a given post status should be visible. * * @since 4.7.0 * * @param object $status Post status. * @return bool True if the post status is visible, otherwise false. */ protected function check_read_permission( $status ) { if ( true === $status->public ) { return true; } if ( false === $status->internal || 'trash' === $status->name ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } } return false; } /** * Retrieves a specific post status. * * @since 4.7.0 * * @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_item( $request ) { $obj = get_post_status_object( $request['status'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post status object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$status` to `$item` to match parent class for PHP 8 named parameter support. * * @param stdClass $item Post status data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Post status data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $status = $item; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $status->label; } if ( in_array( 'private', $fields, true ) ) { $data['private'] = (bool) $status->private; } if ( in_array( 'protected', $fields, true ) ) { $data['protected'] = (bool) $status->protected; } if ( in_array( 'public', $fields, true ) ) { $data['public'] = (bool) $status->public; } if ( in_array( 'queryable', $fields, true ) ) { $data['queryable'] = (bool) $status->publicly_queryable; } if ( in_array( 'show_in_list', $fields, true ) ) { $data['show_in_list'] = (bool) $status->show_in_admin_all_list; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $status->name; } if ( in_array( 'date_floating', $fields, true ) ) { $data['date_floating'] = $status->date_floating; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); $rest_url = rest_url( rest_get_route_for_post_type_items( 'post' ) ); if ( 'publish' === $status->name ) { $response->add_link( 'archives', $rest_url ); } else { $response->add_link( 'archives', add_query_arg( 'status', $status->name, $rest_url ) ); } /** * Filters a post status returned from the REST API. * * Allows modification of the status data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param object $status The original post status object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_status', $response, $status, $request ); } /** * Retrieves the post status' schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'status', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The title for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'private' => array( 'description' => __( 'Whether posts with this status should be private.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'protected' => array( 'description' => __( 'Whether posts with this status should be protected.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'public' => array( 'description' => __( 'Whether posts of this status should be shown in the front end of the site.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'queryable' => array( 'description' => __( 'Whether posts with this status should be publicly-queryable.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'show_in_list' => array( 'description' => __( 'Whether to include posts in the edit listing for their post type.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'date_floating' => array( 'description' => __( 'Whether posts of this status may have floating published dates.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for collections. * * @since 4.7.0 * * @return array Collection parameters. */ public function get_collection_params() { return array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ); } } PKU![l&&6endpoints/class-wp-rest-block-directory-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'block-directory'; } /** * Registers the necessary REST API routes. */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base . '/search', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to install and activate plugins. * * @since 5.5.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has permission, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( ! current_user_can( 'install_plugins' ) || ! current_user_can( 'activate_plugins' ) ) { return new WP_Error( 'rest_block_directory_cannot_view', __( 'Sorry, you are not allowed to browse the block directory.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Search and retrieve blocks metadata * * @since 5.5.0 * * @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_items( $request ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once ABSPATH . 'wp-admin/includes/plugin.php'; $response = plugins_api( 'query_plugins', array( 'block' => $request['term'], 'per_page' => $request['per_page'], 'page' => $request['page'], ) ); if ( is_wp_error( $response ) ) { $response->add_data( array( 'status' => 500 ) ); return $response; } $result = array(); foreach ( $response->plugins as $plugin ) { // If the API returned a plugin with empty data for 'blocks', skip it. if ( empty( $plugin['blocks'] ) ) { continue; } $data = $this->prepare_item_for_response( $plugin, $request ); $result[] = $this->prepare_response_for_collection( $data ); } return rest_ensure_response( $result ); } /** * Parse block metadata for a block, and prepare it for an API response. * * @since 5.5.0 * @since 5.9.0 Renamed `$plugin` to `$item` to match parent class for PHP 8 named parameter support. * * @param array $item The plugin metadata. * @param WP_REST_Request $request Request object. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $plugin = $item; $fields = $this->get_fields_for_response( $request ); // There might be multiple blocks in a plugin. Only the first block is mapped. $block_data = reset( $plugin['blocks'] ); // A data array containing the properties we'll return. $block = array( 'name' => $block_data['name'], 'title' => ( $block_data['title'] ? $block_data['title'] : $plugin['name'] ), 'description' => wp_trim_words( $plugin['short_description'], 30, '...' ), 'id' => $plugin['slug'], 'rating' => $plugin['rating'] / 20, 'rating_count' => (int) $plugin['num_ratings'], 'active_installs' => (int) $plugin['active_installs'], 'author_block_rating' => $plugin['author_block_rating'] / 20, 'author_block_count' => (int) $plugin['author_block_count'], 'author' => wp_strip_all_tags( $plugin['author'] ), 'icon' => ( isset( $plugin['icons']['1x'] ) ? $plugin['icons']['1x'] : 'block-default' ), 'last_updated' => gmdate( 'Y-m-d\TH:i:s', strtotime( $plugin['last_updated'] ) ), 'humanized_updated' => sprintf( /* translators: %s: Human-readable time difference. */ __( '%s ago' ), human_time_diff( strtotime( $plugin['last_updated'] ) ) ), ); $this->add_additional_fields_to_object( $block, $request ); $response = new WP_REST_Response( $block ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $plugin ) ); } return $response; } /** * Generates a list of links to include in the response for the plugin. * * @since 5.5.0 * * @param array $plugin The plugin data from WordPress.org. * @return array */ protected function prepare_links( $plugin ) { $links = array( 'https://api.w.org/install-plugin' => array( 'href' => add_query_arg( 'slug', urlencode( $plugin['slug'] ), rest_url( 'wp/v2/plugins' ) ), ), ); $plugin_file = $this->find_plugin_for_slug( $plugin['slug'] ); if ( $plugin_file ) { $links['https://api.w.org/plugin'] = array( 'href' => rest_url( 'wp/v2/plugins/' . substr( $plugin_file, 0, - 4 ) ), 'embeddable' => true, ); } return $links; } /** * Finds an installed plugin for the given slug. * * @since 5.5.0 * * @param string $slug The WordPress.org directory slug for a plugin. * @return string The plugin file found matching it. */ protected function find_plugin_for_slug( $slug ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $plugin_files = get_plugins( '/' . $slug ); if ( ! $plugin_files ) { return ''; } $plugin_files = array_keys( $plugin_files ); return $slug . '/' . reset( $plugin_files ); } /** * Retrieves the theme's schema, conforming to JSON Schema. * * @since 5.5.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'block-directory-item', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The block name, in namespace/block-name format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'title' => array( 'description' => __( 'The block title, in human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'description' => array( 'description' => __( 'A short description of the block, in human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'id' => array( 'description' => __( 'The block slug.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'rating' => array( 'description' => __( 'The star rating of the block.' ), 'type' => 'number', 'context' => array( 'view' ), ), 'rating_count' => array( 'description' => __( 'The number of ratings.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'active_installs' => array( 'description' => __( 'The number sites that have activated this block.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'author_block_rating' => array( 'description' => __( 'The average rating of blocks published by the same author.' ), 'type' => 'number', 'context' => array( 'view' ), ), 'author_block_count' => array( 'description' => __( 'The number of blocks published by the same author.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'author' => array( 'description' => __( 'The WordPress.org username of the block author.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'icon' => array( 'description' => __( 'The block icon.' ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'view' ), ), 'last_updated' => array( 'description' => __( 'The date when the block was last updated.' ), 'type' => 'string', 'format' => 'date-time', 'context' => array( 'view' ), ), 'humanized_updated' => array( 'description' => __( 'The date when the block was last updated, in human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), ), ); return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the search params for the blocks collection. * * @since 5.5.0 * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['context']['default'] = 'view'; $query_params['term'] = array( 'description' => __( 'Limit result set to blocks matching the search term.' ), 'type' => 'string', 'required' => true, 'minLength' => 1, ); unset( $query_params['search'] ); /** * Filters REST API collection parameters for the block directory controller. * * @since 5.5.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_block_directory_collection_params', $query_params ); } } PKU![Tl&l&2endpoints/class-wp-rest-site-health-controller.phpnu[namespace = 'wp-site-health/v1'; $this->rest_base = 'tests'; $this->site_health = $site_health; } /** * Registers API routes. * * @since 5.6.0 * @since 6.1.0 Adds page-cache async test. * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'background-updates' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_background_updates' ), 'permission_callback' => function () { return $this->validate_request_permission( 'background_updates' ); }, ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'loopback-requests' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_loopback_requests' ), 'permission_callback' => function () { return $this->validate_request_permission( 'loopback_requests' ); }, ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'https-status' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_https_status' ), 'permission_callback' => function () { return $this->validate_request_permission( 'https_status' ); }, ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'dotorg-communication' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_dotorg_communication' ), 'permission_callback' => function () { return $this->validate_request_permission( 'dotorg_communication' ); }, ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'authorization-header' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_authorization_header' ), 'permission_callback' => function () { return $this->validate_request_permission( 'authorization_header' ); }, ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, sprintf( '/%s', 'directory-sizes' ), array( 'methods' => 'GET', 'callback' => array( $this, 'get_directory_sizes' ), 'permission_callback' => function () { return $this->validate_request_permission( 'directory_sizes' ) && ! is_multisite(); }, ) ); register_rest_route( $this->namespace, sprintf( '/%s/%s', $this->rest_base, 'page-cache' ), array( array( 'methods' => 'GET', 'callback' => array( $this, 'test_page_cache' ), 'permission_callback' => function () { return $this->validate_request_permission( 'page_cache' ); }, ), ) ); } /** * Validates if the current user can request this REST endpoint. * * @since 5.6.0 * * @param string $check The endpoint check being ran. * @return bool */ protected function validate_request_permission( $check ) { $default_capability = 'view_site_health_checks'; /** * Filters the capability needed to run a given Site Health check. * * @since 5.6.0 * * @param string $default_capability The default capability required for this check. * @param string $check The Site Health check being performed. */ $capability = apply_filters( "site_health_test_rest_capability_{$check}", $default_capability, $check ); return current_user_can( $capability ); } /** * Checks if background updates work as expected. * * @since 5.6.0 * * @return array */ public function test_background_updates() { $this->load_admin_textdomain(); return $this->site_health->get_test_background_updates(); } /** * Checks that the site can reach the WordPress.org API. * * @since 5.6.0 * * @return array */ public function test_dotorg_communication() { $this->load_admin_textdomain(); return $this->site_health->get_test_dotorg_communication(); } /** * Checks that loopbacks can be performed. * * @since 5.6.0 * * @return array */ public function test_loopback_requests() { $this->load_admin_textdomain(); return $this->site_health->get_test_loopback_requests(); } /** * Checks that the site's frontend can be accessed over HTTPS. * * @since 5.7.0 * * @return array */ public function test_https_status() { $this->load_admin_textdomain(); return $this->site_health->get_test_https_status(); } /** * Checks that the authorization header is valid. * * @since 5.6.0 * * @return array */ public function test_authorization_header() { $this->load_admin_textdomain(); return $this->site_health->get_test_authorization_header(); } /** * Checks that full page cache is active. * * @since 6.1.0 * * @return array The test result. */ public function test_page_cache() { $this->load_admin_textdomain(); return $this->site_health->get_test_page_cache(); } /** * Gets the current directory sizes for this install. * * @since 5.6.0 * * @return array|WP_Error */ public function get_directory_sizes() { if ( ! class_exists( 'WP_Debug_Data' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-debug-data.php'; } $this->load_admin_textdomain(); $sizes_data = WP_Debug_Data::get_sizes(); $all_sizes = array( 'raw' => 0 ); foreach ( $sizes_data as $name => $value ) { $name = sanitize_text_field( $name ); $data = array(); if ( isset( $value['size'] ) ) { if ( is_string( $value['size'] ) ) { $data['size'] = sanitize_text_field( $value['size'] ); } else { $data['size'] = (int) $value['size']; } } if ( isset( $value['debug'] ) ) { if ( is_string( $value['debug'] ) ) { $data['debug'] = sanitize_text_field( $value['debug'] ); } else { $data['debug'] = (int) $value['debug']; } } if ( ! empty( $value['raw'] ) ) { $data['raw'] = (int) $value['raw']; } $all_sizes[ $name ] = $data; } if ( isset( $all_sizes['total_size']['debug'] ) && 'not available' === $all_sizes['total_size']['debug'] ) { return new WP_Error( 'not_available', __( 'Directory sizes could not be returned.' ), array( 'status' => 500 ) ); } return $all_sizes; } /** * Loads the admin textdomain for Site Health tests. * * The {@see WP_Site_Health} class is defined in WP-Admin, while the REST API operates in a front-end context. * This means that the translations for Site Health won't be loaded by default in {@see load_default_textdomain()}. * * @since 5.6.0 */ protected function load_admin_textdomain() { // Accounts for inner REST API requests in the admin. if ( ! is_admin() ) { $locale = determine_locale(); load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo", $locale ); } } /** * Gets the schema for each site health test. * * @since 5.6.0 * * @return array The test schema. */ public function get_item_schema() { if ( $this->schema ) { return $this->schema; } $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'wp-site-health-test', 'type' => 'object', 'properties' => array( 'test' => array( 'type' => 'string', 'description' => __( 'The name of the test being run.' ), 'readonly' => true, ), 'label' => array( 'type' => 'string', 'description' => __( 'A label describing the test.' ), 'readonly' => true, ), 'status' => array( 'type' => 'string', 'description' => __( 'The status of the test.' ), 'enum' => array( 'good', 'recommended', 'critical' ), 'readonly' => true, ), 'badge' => array( 'type' => 'object', 'description' => __( 'The category this test is grouped in.' ), 'properties' => array( 'label' => array( 'type' => 'string', 'readonly' => true, ), 'color' => array( 'type' => 'string', 'enum' => array( 'blue', 'orange', 'red', 'green', 'purple', 'gray' ), 'readonly' => true, ), ), 'readonly' => true, ), 'description' => array( 'type' => 'string', 'description' => __( 'A more descriptive explanation of what the test looks for, and why it is important for the user.' ), 'readonly' => true, ), 'actions' => array( 'type' => 'string', 'description' => __( 'HTML containing an action to direct the user to where they can resolve the issue.' ), 'readonly' => true, ), ), ); return $this->schema; } } PKU![/F|J|J&endpoints/class-wp-rest-controller.phpnu[ 405 ) ); } /** * Retrieves a collection of items. * * @since 4.7.0 * * @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_items( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Checks if a given request has access to get a specific item. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Retrieves one item from the collection. * * @since 4.7.0 * * @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_item( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Checks if a given request has access to create items. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise. */ public function create_item_permissions_check( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Creates one item from the collection. * * @since 4.7.0 * * @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 create_item( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Checks if a given request has access to update a specific item. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise. */ public function update_item_permissions_check( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Updates one item from the collection. * * @since 4.7.0 * * @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 update_item( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Checks if a given request has access to delete a specific item. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise. */ public function delete_item_permissions_check( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Deletes one item from the collection. * * @since 4.7.0 * * @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 delete_item( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Prepares one item for create or update operation. * * @since 4.7.0 * * @param WP_REST_Request $request Request object. * @return object|WP_Error The prepared item, or WP_Error object on failure. */ protected function prepare_item_for_database( $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Prepares the item for the REST response. * * @since 4.7.0 * * @param mixed $item WordPress representation of the item. * @param WP_REST_Request $request Request object. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function prepare_item_for_response( $item, $request ) { return new WP_Error( 'invalid-method', /* translators: %s: Method name. */ sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array( 'status' => 405 ) ); } /** * Prepares a response for insertion into a collection. * * @since 4.7.0 * * @param WP_REST_Response $response Response object. * @return array|mixed Response data, ready for insertion into collection data. */ public function prepare_response_for_collection( $response ) { if ( ! ( $response instanceof WP_REST_Response ) ) { return $response; } $data = (array) $response->get_data(); $server = rest_get_server(); $links = $server::get_compact_response_links( $response ); if ( ! empty( $links ) ) { $data['_links'] = $links; } return $data; } /** * Filters a response based on the context defined in the schema. * * @since 4.7.0 * * @param array $response_data Response data to filter. * @param string $context Context defined in the schema. * @return array Filtered response. */ public function filter_response_by_context( $response_data, $context ) { $schema = $this->get_item_schema(); return rest_filter_response_by_context( $response_data, $schema, $context ); } /** * Retrieves the item's schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema data. */ public function get_item_schema() { return $this->add_additional_fields_schema( array() ); } /** * Retrieves the item's schema for display / public consumption purposes. * * @since 4.7.0 * * @return array Public item schema data. */ public function get_public_item_schema() { $schema = $this->get_item_schema(); if ( ! empty( $schema['properties'] ) ) { foreach ( $schema['properties'] as &$property ) { unset( $property['arg_options'] ); } } return $schema; } /** * Retrieves the query params for the collections. * * @since 4.7.0 * * @return array Query parameters for the collection. */ public function get_collection_params() { return array( 'context' => $this->get_context_param(), 'page' => array( 'description' => __( 'Current page of the collection.' ), 'type' => 'integer', 'default' => 1, 'sanitize_callback' => 'absint', 'validate_callback' => 'rest_validate_request_arg', 'minimum' => 1, ), 'per_page' => array( 'description' => __( 'Maximum number of items to be returned in result set.' ), 'type' => 'integer', 'default' => 10, 'minimum' => 1, 'maximum' => 100, 'sanitize_callback' => 'absint', 'validate_callback' => 'rest_validate_request_arg', ), 'search' => array( 'description' => __( 'Limit results to those matching a string.' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field', 'validate_callback' => 'rest_validate_request_arg', ), ); } /** * Retrieves the magical context param. * * Ensures consistent descriptions between endpoints, and populates enum from schema. * * @since 4.7.0 * * @param array $args Optional. Additional arguments for context parameter. Default empty array. * @return array Context parameter details. */ public function get_context_param( $args = array() ) { $param_details = array( 'description' => __( 'Scope under which the request is made; determines fields present in response.' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', 'validate_callback' => 'rest_validate_request_arg', ); $schema = $this->get_item_schema(); if ( empty( $schema['properties'] ) ) { return array_merge( $param_details, $args ); } $contexts = array(); foreach ( $schema['properties'] as $attributes ) { if ( ! empty( $attributes['context'] ) ) { $contexts = array_merge( $contexts, $attributes['context'] ); } } if ( ! empty( $contexts ) ) { $param_details['enum'] = array_unique( $contexts ); rsort( $param_details['enum'] ); } return array_merge( $param_details, $args ); } /** * Adds the values from additional fields to a data object. * * @since 4.7.0 * * @param array $response_data Prepared response array. * @param WP_REST_Request $request Full details about the request. * @return array Modified data object with additional fields. */ protected function add_additional_fields_to_object( $response_data, $request ) { $additional_fields = $this->get_additional_fields(); $requested_fields = $this->get_fields_for_response( $request ); foreach ( $additional_fields as $field_name => $field_options ) { if ( ! $field_options['get_callback'] ) { continue; } if ( ! rest_is_field_included( $field_name, $requested_fields ) ) { continue; } $response_data[ $field_name ] = call_user_func( $field_options['get_callback'], $response_data, $field_name, $request, $this->get_object_type() ); } return $response_data; } /** * Updates the values of additional fields added to a data object. * * @since 4.7.0 * * @param object $data_object Data model like WP_Term or WP_Post. * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True on success, WP_Error object if a field cannot be updated. */ protected function update_additional_fields_for_object( $data_object, $request ) { $additional_fields = $this->get_additional_fields(); foreach ( $additional_fields as $field_name => $field_options ) { if ( ! $field_options['update_callback'] ) { continue; } // Don't run the update callbacks if the data wasn't passed in the request. if ( ! isset( $request[ $field_name ] ) ) { continue; } $result = call_user_func( $field_options['update_callback'], $request[ $field_name ], $data_object, $field_name, $request, $this->get_object_type() ); if ( is_wp_error( $result ) ) { return $result; } } return true; } /** * Adds the schema from additional fields to a schema array. * * The type of object is inferred from the passed schema. * * @since 4.7.0 * * @param array $schema Schema array. * @return array Modified Schema array. */ protected function add_additional_fields_schema( $schema ) { if ( empty( $schema['title'] ) ) { return $schema; } // Can't use $this->get_object_type otherwise we cause an inf loop. $object_type = $schema['title']; $additional_fields = $this->get_additional_fields( $object_type ); foreach ( $additional_fields as $field_name => $field_options ) { if ( ! $field_options['schema'] ) { continue; } $schema['properties'][ $field_name ] = $field_options['schema']; } return $schema; } /** * Retrieves all of the registered additional fields for a given object-type. * * @since 4.7.0 * * @global array $wp_rest_additional_fields Holds registered fields, organized by object type. * * @param string $object_type Optional. The object type. * @return array Registered additional fields (if any), empty array if none or if the object type * could not be inferred. */ protected function get_additional_fields( $object_type = null ) { global $wp_rest_additional_fields; if ( ! $object_type ) { $object_type = $this->get_object_type(); } if ( ! $object_type ) { return array(); } if ( ! $wp_rest_additional_fields || ! isset( $wp_rest_additional_fields[ $object_type ] ) ) { return array(); } return $wp_rest_additional_fields[ $object_type ]; } /** * Retrieves the object type this controller is responsible for managing. * * @since 4.7.0 * * @return string Object type for the controller. */ protected function get_object_type() { $schema = $this->get_item_schema(); if ( ! $schema || ! isset( $schema['title'] ) ) { return null; } return $schema['title']; } /** * Gets an array of fields to be included on the response. * * Included fields are based on item schema and `_fields=` request argument. * * @since 4.9.6 * * @param WP_REST_Request $request Full details about the request. * @return string[] Fields to be included in the response. */ public function get_fields_for_response( $request ) { $schema = $this->get_item_schema(); $properties = isset( $schema['properties'] ) ? $schema['properties'] : array(); $additional_fields = $this->get_additional_fields(); foreach ( $additional_fields as $field_name => $field_options ) { /* * For back-compat, include any field with an empty schema * because it won't be present in $this->get_item_schema(). */ if ( is_null( $field_options['schema'] ) ) { $properties[ $field_name ] = $field_options; } } // Exclude fields that specify a different context than the request context. $context = $request['context']; if ( $context ) { foreach ( $properties as $name => $options ) { if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) { unset( $properties[ $name ] ); } } } $fields = array_keys( $properties ); /* * '_links' and '_embedded' are not typically part of the item schema, * but they can be specified in '_fields', so they are added here as a * convenience for checking with rest_is_field_included(). */ $fields[] = '_links'; if ( $request->has_param( '_embed' ) ) { $fields[] = '_embedded'; } $fields = array_unique( $fields ); if ( ! isset( $request['_fields'] ) ) { return $fields; } $requested_fields = wp_parse_list( $request['_fields'] ); if ( 0 === count( $requested_fields ) ) { return $fields; } // Trim off outside whitespace from the comma delimited list. $requested_fields = array_map( 'trim', $requested_fields ); // Always persist 'id', because it can be needed for add_additional_fields_to_object(). if ( in_array( 'id', $fields, true ) ) { $requested_fields[] = 'id'; } // Return the list of all requested fields which appear in the schema. return array_reduce( $requested_fields, static function ( $response_fields, $field ) use ( $fields ) { if ( in_array( $field, $fields, true ) ) { $response_fields[] = $field; return $response_fields; } // Check for nested fields if $field is not a direct match. $nested_fields = explode( '.', $field ); /* * A nested field is included so long as its top-level property * is present in the schema. */ if ( in_array( $nested_fields[0], $fields, true ) ) { $response_fields[] = $field; } return $response_fields; }, array() ); } /** * Retrieves an array of endpoint arguments from the item schema for the controller. * * @since 4.7.0 * * @param string $method Optional. HTTP method of the request. The arguments for `CREATABLE` requests are * checked for required values and may fall-back to a given default, this is not done * on `EDITABLE` requests. Default WP_REST_Server::CREATABLE. * @return array Endpoint arguments. */ public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) { return rest_get_endpoint_args_for_schema( $this->get_item_schema(), $method ); } /** * Sanitizes the slug value. * * @since 4.7.0 * * @internal We can't use sanitize_title() directly, as the second * parameter is the fallback title, which would end up being set to the * request object. * * @see https://github.com/WP-API/WP-API/issues/1585 * * @todo Remove this in favour of https://core.trac.wordpress.org/ticket/34659 * * @param string $slug Slug value passed in request. * @return string Sanitized value for the slug. */ public function sanitize_slug( $slug ) { return sanitize_title( $slug ); } } PKU![Q͍228endpoints/class-wp-rest-pattern-directory-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'pattern-directory'; } /** * Registers the necessary REST API routes. * * @since 5.8.0 */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base . '/patterns', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to view the local block pattern directory. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has permission, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( current_user_can( 'edit_posts' ) ) { return true; } foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_pattern_directory_cannot_view', __( 'Sorry, you are not allowed to browse the local block pattern directory.' ), array( 'status' => rest_authorization_required_code() ) ); } /** * Search and retrieve block patterns metadata * * @since 5.8.0 * @since 6.0.0 Added 'slug' to request. * @since 6.2.0 Added 'per_page', 'page', 'offset', 'order', and 'orderby' to request. * * @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_items( $request ) { $valid_query_args = array( 'offset' => true, 'order' => true, 'orderby' => true, 'page' => true, 'per_page' => true, 'search' => true, 'slug' => true, ); $query_args = array_intersect_key( $request->get_params(), $valid_query_args ); $query_args['locale'] = get_user_locale(); $query_args['wp-version'] = wp_get_wp_version(); $query_args['pattern-categories'] = isset( $request['category'] ) ? $request['category'] : false; $query_args['pattern-keywords'] = isset( $request['keyword'] ) ? $request['keyword'] : false; $query_args = array_filter( $query_args ); $transient_key = $this->get_transient_key( $query_args ); /* * Use network-wide transient to improve performance. The locale is the only site * configuration that affects the response, and it's included in the transient key. */ $raw_patterns = get_site_transient( $transient_key ); if ( ! $raw_patterns ) { $api_url = 'http://api.wordpress.org/patterns/1.0/?' . build_query( $query_args ); if ( wp_http_supports( array( 'ssl' ) ) ) { $api_url = set_url_scheme( $api_url, 'https' ); } /* * Default to a short TTL, to mitigate cache stampedes on high-traffic sites. * This assumes that most errors will be short-lived, e.g., packet loss that causes the * first request to fail, but a follow-up one will succeed. The value should be high * enough to avoid stampedes, but low enough to not interfere with users manually * re-trying a failed request. */ $cache_ttl = 5; $wporg_response = wp_remote_get( $api_url ); $raw_patterns = json_decode( wp_remote_retrieve_body( $wporg_response ) ); if ( is_wp_error( $wporg_response ) ) { $raw_patterns = $wporg_response; } elseif ( ! is_array( $raw_patterns ) ) { // HTTP request succeeded, but response data is invalid. $raw_patterns = new WP_Error( 'pattern_api_failed', sprintf( /* translators: %s: Support forums URL. */ __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ), __( 'https://wordpress.org/support/forums/' ) ), array( 'response' => wp_remote_retrieve_body( $wporg_response ), ) ); } else { // Response has valid data. $cache_ttl = HOUR_IN_SECONDS; } set_site_transient( $transient_key, $raw_patterns, $cache_ttl ); } if ( is_wp_error( $raw_patterns ) ) { $raw_patterns->add_data( array( 'status' => 500 ) ); return $raw_patterns; } if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $response = array(); if ( $raw_patterns ) { foreach ( $raw_patterns as $pattern ) { $response[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $pattern, $request ) ); } } return new WP_REST_Response( $response ); } /** * Prepare a raw block pattern before it gets output in a REST API response. * * @since 5.8.0 * @since 5.9.0 Renamed `$raw_pattern` to `$item` to match parent class for PHP 8 named parameter support. * * @param object $item Raw pattern from api.wordpress.org, before any changes. * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $raw_pattern = $item; $prepared_pattern = array( 'id' => absint( $raw_pattern->id ), 'title' => sanitize_text_field( $raw_pattern->title->rendered ), 'content' => wp_kses_post( $raw_pattern->pattern_content ), 'categories' => array_map( 'sanitize_title', $raw_pattern->category_slugs ), 'keywords' => array_map( 'sanitize_text_field', explode( ',', $raw_pattern->meta->wpop_keywords ) ), 'description' => sanitize_text_field( $raw_pattern->meta->wpop_description ), 'viewport_width' => absint( $raw_pattern->meta->wpop_viewport_width ), 'block_types' => array_map( 'sanitize_text_field', $raw_pattern->meta->wpop_block_types ), ); $prepared_pattern = $this->add_additional_fields_to_object( $prepared_pattern, $request ); $response = new WP_REST_Response( $prepared_pattern ); /** * Filters the REST API response for a block pattern. * * @since 5.8.0 * * @param WP_REST_Response $response The response object. * @param object $raw_pattern The unprepared block pattern. * @param WP_REST_Request $request The request object. */ return apply_filters( 'rest_prepare_block_pattern', $response, $raw_pattern, $request ); } /** * Retrieves the block pattern's schema, conforming to JSON Schema. * * @since 5.8.0 * @since 6.2.0 Added `'block_types'` to schema. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'pattern-directory-item', 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'The pattern ID.' ), 'type' => 'integer', 'minimum' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'title' => array( 'description' => __( 'The pattern title, in human readable format.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'content' => array( 'description' => __( 'The pattern content.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'categories' => array( 'description' => __( "The pattern's category slugs." ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'edit', 'embed' ), ), 'keywords' => array( 'description' => __( "The pattern's keywords." ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'edit', 'embed' ), ), 'description' => array( 'description' => __( 'A description of the pattern.' ), 'type' => 'string', 'minLength' => 1, 'context' => array( 'view', 'edit', 'embed' ), ), 'viewport_width' => array( 'description' => __( 'The preferred width of the viewport when previewing a pattern, in pixels.' ), 'type' => 'integer', 'context' => array( 'view', 'edit', 'embed' ), ), 'block_types' => array( 'description' => __( 'The block types which can use this pattern.' ), 'type' => 'array', 'uniqueItems' => true, 'items' => array( 'type' => 'string' ), 'context' => array( 'view', 'embed' ), ), ), ); return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the search parameters for the block pattern's collection. * * @since 5.8.0 * @since 6.2.0 Added 'per_page', 'page', 'offset', 'order', and 'orderby' to request. * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['per_page']['default'] = 100; $query_params['search']['minLength'] = 1; $query_params['context']['default'] = 'view'; $query_params['category'] = array( 'description' => __( 'Limit results to those matching a category ID.' ), 'type' => 'integer', 'minimum' => 1, ); $query_params['keyword'] = array( 'description' => __( 'Limit results to those matching a keyword ID.' ), 'type' => 'integer', 'minimum' => 1, ); $query_params['slug'] = array( 'description' => __( 'Limit results to those matching a pattern (slug).' ), 'type' => 'array', ); $query_params['offset'] = array( 'description' => __( 'Offset the result set by a specific number of items.' ), 'type' => 'integer', ); $query_params['order'] = array( 'description' => __( 'Order sort attribute ascending or descending.' ), 'type' => 'string', 'default' => 'desc', 'enum' => array( 'asc', 'desc' ), ); $query_params['orderby'] = array( 'description' => __( 'Sort collection by post attribute.' ), 'type' => 'string', 'default' => 'date', 'enum' => array( 'author', 'date', 'id', 'include', 'modified', 'parent', 'relevance', 'slug', 'include_slugs', 'title', 'favorite_count', ), ); /** * Filter collection parameters for the block pattern directory controller. * * @since 5.8.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_pattern_directory_collection_params', $query_params ); } /** * Include a hash of the query args, so that different requests are stored in * separate caches. * * MD5 is chosen for its speed, low-collision rate, universal availability, and to stay * under the character limit for `_site_transient_timeout_{...}` keys. * * @link https://stackoverflow.com/questions/3665247/fastest-hash-for-non-cryptographic-uses * * @since 6.0.0 * * @param array $query_args Query arguments to generate a transient key from. * @return string Transient key. */ protected function get_transient_key( $query_args ) { if ( isset( $query_args['slug'] ) ) { // This is an additional precaution because the "sort" function expects an array. $query_args['slug'] = wp_parse_list( $query_args['slug'] ); // Empty arrays should not affect the transient key. if ( empty( $query_args['slug'] ) ) { unset( $query_args['slug'] ); } else { // Sort the array so that the transient key doesn't depend on the order of slugs. sort( $query_args['slug'] ); } } return 'wp_remote_block_patterns_' . md5( serialize( $query_args ) ); } } PKU![ [I0endpoints/class-wp-rest-templates-controller.phpnu[post_type = $post_type; $obj = get_post_type_object( $post_type ); $this->rest_base = ! empty( $obj->rest_base ) ? $obj->rest_base : $obj->name; $this->namespace = ! empty( $obj->rest_namespace ) ? $obj->rest_namespace : 'wp/v2'; } /** * Registers the controllers routes. * * @since 5.8.0 * @since 6.1.0 Endpoint for fallback template content. */ public function register_routes() { // Lists all templates. register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'create_item' ), 'permission_callback' => array( $this, 'create_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); // Get fallback template content. register_rest_route( $this->namespace, '/' . $this->rest_base . '/lookup', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_template_fallback' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'slug' => array( 'description' => __( 'The slug of the template to get the fallback for' ), 'type' => 'string', 'required' => true, ), 'is_custom' => array( 'description' => __( 'Indicates if a template is custom or part of the template hierarchy' ), 'type' => 'boolean', ), 'template_prefix' => array( 'description' => __( 'The template prefix for the created template. This is used to extract the main template type, e.g. in `taxonomy-books` extracts the `taxonomy`' ), 'type' => 'string', ), ), ), ) ); // Lists/updates a single template based on the given id. register_rest_route( $this->namespace, // The route. sprintf( '/%s/(?P%s%s)', $this->rest_base, /* * Matches theme's directory: `/themes///` or `/themes//`. * Excludes invalid directory name characters: `/:<>*?"|`. */ '([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)', // Matches the template name. '[\/\w%-]+' ), array( 'args' => array( 'id' => array( 'description' => __( 'The id of a template' ), 'type' => 'string', 'sanitize_callback' => array( $this, '_sanitize_template_id' ), ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_item' ), 'permission_callback' => array( $this, 'update_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), ), array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array( $this, 'delete_item' ), 'permission_callback' => array( $this, 'delete_item_permissions_check' ), 'args' => array( 'force' => array( 'type' => 'boolean', 'default' => false, 'description' => __( 'Whether to bypass Trash and force deletion.' ), ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Returns the fallback template for the given slug. * * @since 6.1.0 * @since 6.3.0 Ignore empty templates. * * @param WP_REST_Request $request The request instance. * @return WP_REST_Response|WP_Error */ public function get_template_fallback( $request ) { $hierarchy = get_template_hierarchy( $request['slug'], $request['is_custom'], $request['template_prefix'] ); do { $fallback_template = resolve_block_template( $request['slug'], $hierarchy, '' ); array_shift( $hierarchy ); } while ( ! empty( $hierarchy ) && empty( $fallback_template->content ) ); // To maintain original behavior, return an empty object rather than a 404 error when no template is found. $response = $fallback_template ? $this->prepare_item_for_response( $fallback_template, $request ) : new stdClass(); return rest_ensure_response( $response ); } /** * Checks if the user has permissions to make the request. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ protected function permissions_check( $request ) { /* * Verify if the current user has edit_theme_options capability. * This capability is required to edit/view/delete templates. */ if ( ! current_user_can( 'edit_theme_options' ) ) { return new WP_Error( 'rest_cannot_manage_templates', __( 'Sorry, you are not allowed to access the templates on this site.' ), array( 'status' => rest_authorization_required_code(), ) ); } return true; } /** * Requesting this endpoint for a template like 'twentytwentytwo//home' * requires using a path like /wp/v2/templates/twentytwentytwo//home. There * are special cases when WordPress routing corrects the name to contain * only a single slash like 'twentytwentytwo/home'. * * This method doubles the last slash if it's not already doubled. It relies * on the template ID format {theme_name}//{template_slug} and the fact that * slugs cannot contain slashes. * * @since 5.9.0 * @see https://core.trac.wordpress.org/ticket/54507 * * @param string $id Template ID. * @return string Sanitized template ID. */ public function _sanitize_template_id( $id ) { $id = urldecode( $id ); $last_slash_pos = strrpos( $id, '/' ); if ( false === $last_slash_pos ) { return $id; } $is_double_slashed = substr( $id, $last_slash_pos - 1, 1 ) === '/'; if ( $is_double_slashed ) { return $id; } return ( substr( $id, 0, $last_slash_pos ) . '/' . substr( $id, $last_slash_pos ) ); } /** * Checks if a given request has access to read templates. * * @since 5.8.0 * @since 6.6.0 Allow users with edit_posts capability to read templates. * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( current_user_can( 'edit_posts' ) ) { return true; } foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_manage_templates', __( 'Sorry, you are not allowed to access the templates on this site.' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Returns a list of templates. * * @since 5.8.0 * * @param WP_REST_Request $request The request instance. * @return WP_REST_Response */ public function get_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $query = array(); if ( isset( $request['wp_id'] ) ) { $query['wp_id'] = $request['wp_id']; } if ( isset( $request['area'] ) ) { $query['area'] = $request['area']; } if ( isset( $request['post_type'] ) ) { $query['post_type'] = $request['post_type']; } $templates = array(); foreach ( get_block_templates( $query, $this->post_type ) as $template ) { $data = $this->prepare_item_for_response( $template, $request ); $templates[] = $this->prepare_response_for_collection( $data ); } return rest_ensure_response( $templates ); } /** * Checks if a given request has access to read a single template. * * @since 5.8.0 * @since 6.6.0 Allow users with edit_posts capability to read individual templates. * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { if ( current_user_can( 'edit_posts' ) ) { return true; } foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_manage_templates', __( 'Sorry, you are not allowed to access the templates on this site.' ), array( 'status' => rest_authorization_required_code(), ) ); } /** * Returns the given template * * @since 5.8.0 * * @param WP_REST_Request $request The request instance. * @return WP_REST_Response|WP_Error */ public function get_item( $request ) { if ( isset( $request['source'] ) && ( 'theme' === $request['source'] || 'plugin' === $request['source'] ) ) { $template = get_block_file_template( $request['id'], $this->post_type ); } else { $template = get_block_template( $request['id'], $this->post_type ); } if ( ! $template ) { return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) ); } return $this->prepare_item_for_response( $template, $request ); } /** * Checks if a given request has access to write a single template. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise. */ public function update_item_permissions_check( $request ) { return $this->permissions_check( $request ); } /** * Updates a single template. * * @since 5.8.0 * * @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 update_item( $request ) { $template = get_block_template( $request['id'], $this->post_type ); if ( ! $template ) { return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) ); } $post_before = get_post( $template->wp_id ); if ( isset( $request['source'] ) && 'theme' === $request['source'] ) { wp_delete_post( $template->wp_id, true ); $request->set_param( 'context', 'edit' ); $template = get_block_template( $request['id'], $this->post_type ); $response = $this->prepare_item_for_response( $template, $request ); return rest_ensure_response( $response ); } $changes = $this->prepare_item_for_database( $request ); if ( is_wp_error( $changes ) ) { return $changes; } if ( 'custom' === $template->source ) { $update = true; $result = wp_update_post( wp_slash( (array) $changes ), false ); } else { $update = false; $post_before = null; $result = wp_insert_post( wp_slash( (array) $changes ), false ); } if ( is_wp_error( $result ) ) { if ( 'db_update_error' === $result->get_error_code() ) { $result->add_data( array( 'status' => 500 ) ); } else { $result->add_data( array( 'status' => 400 ) ); } return $result; } $template = get_block_template( $request['id'], $this->post_type ); $fields_update = $this->update_additional_fields_for_object( $template, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'edit' ); $post = get_post( $template->wp_id ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */ do_action( "rest_after_insert_{$this->post_type}", $post, $request, false ); wp_after_insert_post( $post, $update, $post_before ); $response = $this->prepare_item_for_response( $template, $request ); return rest_ensure_response( $response ); } /** * Checks if a given request has access to create a template. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise. */ public function create_item_permissions_check( $request ) { return $this->permissions_check( $request ); } /** * Creates a single template. * * @since 5.8.0 * * @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 create_item( $request ) { $prepared_post = $this->prepare_item_for_database( $request ); if ( is_wp_error( $prepared_post ) ) { return $prepared_post; } $prepared_post->post_name = $request['slug']; $post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true ); if ( is_wp_error( $post_id ) ) { if ( 'db_insert_error' === $post_id->get_error_code() ) { $post_id->add_data( array( 'status' => 500 ) ); } else { $post_id->add_data( array( 'status' => 400 ) ); } return $post_id; } $posts = get_block_templates( array( 'wp_id' => $post_id ), $this->post_type ); if ( ! count( $posts ) ) { return new WP_Error( 'rest_template_insert_error', __( 'No templates exist with that id.' ), array( 'status' => 400 ) ); } $id = $posts[0]->id; $post = get_post( $post_id ); $template = get_block_template( $id, $this->post_type ); $fields_update = $this->update_additional_fields_for_object( $template, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */ do_action( "rest_after_insert_{$this->post_type}", $post, $request, true ); wp_after_insert_post( $post, false, null ); $response = $this->prepare_item_for_response( $template, $request ); $response = rest_ensure_response( $response ); $response->set_status( 201 ); $response->header( 'Location', rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $template->id ) ) ); return $response; } /** * Checks if a given request has access to delete a single template. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has delete access for the item, WP_Error object otherwise. */ public function delete_item_permissions_check( $request ) { return $this->permissions_check( $request ); } /** * Deletes a single template. * * @since 5.8.0 * * @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 delete_item( $request ) { $template = get_block_template( $request['id'], $this->post_type ); if ( ! $template ) { return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) ); } if ( 'custom' !== $template->source ) { return new WP_Error( 'rest_invalid_template', __( 'Templates based on theme files can\'t be removed.' ), array( 'status' => 400 ) ); } $id = $template->wp_id; $force = (bool) $request['force']; $request->set_param( 'context', 'edit' ); // If we're forcing, then delete permanently. if ( $force ) { $previous = $this->prepare_item_for_response( $template, $request ); $result = wp_delete_post( $id, true ); $response = new WP_REST_Response(); $response->set_data( array( 'deleted' => true, 'previous' => $previous->get_data(), ) ); } else { // Otherwise, only trash if we haven't already. if ( 'trash' === $template->status ) { return new WP_Error( 'rest_template_already_trashed', __( 'The template has already been deleted.' ), array( 'status' => 410 ) ); } /* * (Note that internally this falls through to `wp_delete_post()` * if the Trash is disabled.) */ $result = wp_trash_post( $id ); $template->status = 'trash'; $response = $this->prepare_item_for_response( $template, $request ); } if ( ! $result ) { return new WP_Error( 'rest_cannot_delete', __( 'The template cannot be deleted.' ), array( 'status' => 500 ) ); } return $response; } /** * Prepares a single template for create or update. * * @since 5.8.0 * * @param WP_REST_Request $request Request object. * @return stdClass|WP_Error Changes to pass to wp_update_post. */ protected function prepare_item_for_database( $request ) { $template = $request['id'] ? get_block_template( $request['id'], $this->post_type ) : null; $changes = new stdClass(); if ( null === $template ) { $changes->post_type = $this->post_type; $changes->post_status = 'publish'; $changes->tax_input = array( 'wp_theme' => isset( $request['theme'] ) ? $request['theme'] : get_stylesheet(), ); } elseif ( 'custom' !== $template->source ) { $changes->post_name = $template->slug; $changes->post_type = $this->post_type; $changes->post_status = 'publish'; $changes->tax_input = array( 'wp_theme' => $template->theme, ); $changes->meta_input = array( 'origin' => $template->source, ); } else { $changes->post_name = $template->slug; $changes->ID = $template->wp_id; $changes->post_status = 'publish'; } if ( isset( $request['content'] ) ) { if ( is_string( $request['content'] ) ) { $changes->post_content = $request['content']; } elseif ( isset( $request['content']['raw'] ) ) { $changes->post_content = $request['content']['raw']; } } elseif ( null !== $template && 'custom' !== $template->source ) { $changes->post_content = $template->content; } if ( isset( $request['title'] ) ) { if ( is_string( $request['title'] ) ) { $changes->post_title = $request['title']; } elseif ( ! empty( $request['title']['raw'] ) ) { $changes->post_title = $request['title']['raw']; } } elseif ( null !== $template && 'custom' !== $template->source ) { $changes->post_title = $template->title; } if ( isset( $request['description'] ) ) { $changes->post_excerpt = $request['description']; } elseif ( null !== $template && 'custom' !== $template->source ) { $changes->post_excerpt = $template->description; } if ( 'wp_template' === $this->post_type && isset( $request['is_wp_suggestion'] ) ) { $changes->meta_input = wp_parse_args( array( 'is_wp_suggestion' => $request['is_wp_suggestion'], ), $changes->meta_input = array() ); } if ( 'wp_template_part' === $this->post_type ) { if ( isset( $request['area'] ) ) { $changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $request['area'] ); } elseif ( null !== $template && 'custom' !== $template->source && $template->area ) { $changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $template->area ); } elseif ( empty( $template->area ) ) { $changes->tax_input['wp_template_part_area'] = WP_TEMPLATE_PART_AREA_UNCATEGORIZED; } } if ( ! empty( $request['author'] ) ) { $post_author = (int) $request['author']; if ( get_current_user_id() !== $post_author ) { $user_obj = get_userdata( $post_author ); if ( ! $user_obj ) { return new WP_Error( 'rest_invalid_author', __( 'Invalid author ID.' ), array( 'status' => 400 ) ); } } $changes->post_author = $post_author; } /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */ return apply_filters( "rest_pre_insert_{$this->post_type}", $changes, $request ); } /** * Prepare a single template output for response * * @since 5.8.0 * @since 5.9.0 Renamed `$template` to `$item` to match parent class for PHP 8 named parameter support. * @since 6.3.0 Added `modified` property to the response. * * @param WP_Block_Template $item Template instance. * @param WP_REST_Request $request Request object. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { return new WP_REST_Response( array() ); } /* * Resolve pattern blocks so they don't need to be resolved client-side * in the editor, improving performance. */ $blocks = parse_blocks( $item->content ); $blocks = resolve_pattern_blocks( $blocks ); $item->content = serialize_blocks( $blocks ); // Restores the more descriptive, specific name for use within this method. $template = $item; $fields = $this->get_fields_for_response( $request ); // Base fields for every template. $data = array(); if ( rest_is_field_included( 'id', $fields ) ) { $data['id'] = $template->id; } if ( rest_is_field_included( 'theme', $fields ) ) { $data['theme'] = $template->theme; } if ( rest_is_field_included( 'content', $fields ) ) { $data['content'] = array(); } if ( rest_is_field_included( 'content.raw', $fields ) ) { $data['content']['raw'] = $template->content; } if ( rest_is_field_included( 'content.block_version', $fields ) ) { $data['content']['block_version'] = block_version( $template->content ); } if ( rest_is_field_included( 'slug', $fields ) ) { $data['slug'] = $template->slug; } if ( rest_is_field_included( 'source', $fields ) ) { $data['source'] = $template->source; } if ( rest_is_field_included( 'origin', $fields ) ) { $data['origin'] = $template->origin; } if ( rest_is_field_included( 'type', $fields ) ) { $data['type'] = $template->type; } if ( rest_is_field_included( 'description', $fields ) ) { $data['description'] = $template->description; } if ( rest_is_field_included( 'title', $fields ) ) { $data['title'] = array(); } if ( rest_is_field_included( 'title.raw', $fields ) ) { $data['title']['raw'] = $template->title; } if ( rest_is_field_included( 'title.rendered', $fields ) ) { if ( $template->wp_id ) { /** This filter is documented in wp-includes/post-template.php */ $data['title']['rendered'] = apply_filters( 'the_title', $template->title, $template->wp_id ); } else { $data['title']['rendered'] = $template->title; } } if ( rest_is_field_included( 'status', $fields ) ) { $data['status'] = $template->status; } if ( rest_is_field_included( 'wp_id', $fields ) ) { $data['wp_id'] = (int) $template->wp_id; } if ( rest_is_field_included( 'has_theme_file', $fields ) ) { $data['has_theme_file'] = (bool) $template->has_theme_file; } if ( rest_is_field_included( 'is_custom', $fields ) && 'wp_template' === $template->type ) { $data['is_custom'] = $template->is_custom; } if ( rest_is_field_included( 'author', $fields ) ) { $data['author'] = (int) $template->author; } if ( rest_is_field_included( 'area', $fields ) && 'wp_template_part' === $template->type ) { $data['area'] = $template->area; } if ( rest_is_field_included( 'modified', $fields ) ) { $data['modified'] = mysql_to_rfc3339( $template->modified ); } if ( rest_is_field_included( 'author_text', $fields ) ) { $data['author_text'] = self::get_wp_templates_author_text_field( $template ); } if ( rest_is_field_included( 'original_source', $fields ) ) { $data['original_source'] = self::get_wp_templates_original_source_field( $template ); } if ( rest_is_field_included( 'plugin', $fields ) ) { $registered_template = WP_Block_Templates_Registry::get_instance()->get_by_slug( $template->slug ); if ( $registered_template ) { $data['plugin'] = $registered_template->plugin; } } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $links = $this->prepare_links( $template->id ); $response->add_links( $links ); if ( ! empty( $links['self']['href'] ) ) { $actions = $this->get_available_actions(); $self = $links['self']['href']; foreach ( $actions as $rel ) { $response->add_link( $rel, $self ); } } } return $response; } /** * Returns the source from where the template originally comes from. * * @since 6.5.0 * * @param WP_Block_Template $template_object Template instance. * @return string Original source of the template one of theme, plugin, site, or user. */ private static function get_wp_templates_original_source_field( $template_object ) { if ( 'wp_template' === $template_object->type || 'wp_template_part' === $template_object->type ) { /* * Added by theme. * Template originally provided by a theme, but customized by a user. * Templates originally didn't have the 'origin' field so identify * older customized templates by checking for no origin and a 'theme' * or 'custom' source. */ if ( $template_object->has_theme_file && ( 'theme' === $template_object->origin || ( empty( $template_object->origin ) && in_array( $template_object->source, array( 'theme', 'custom', ), true ) ) ) ) { return 'theme'; } // Added by plugin. if ( 'plugin' === $template_object->origin ) { return 'plugin'; } /* * Added by site. * Template was created from scratch, but has no author. Author support * was only added to templates in WordPress 5.9. Fallback to showing the * site logo and title. */ if ( empty( $template_object->has_theme_file ) && 'custom' === $template_object->source && empty( $template_object->author ) ) { return 'site'; } } // Added by user. return 'user'; } /** * Returns a human readable text for the author of the template. * * @since 6.5.0 * * @param WP_Block_Template $template_object Template instance. * @return string Human readable text for the author. */ private static function get_wp_templates_author_text_field( $template_object ) { $original_source = self::get_wp_templates_original_source_field( $template_object ); switch ( $original_source ) { case 'theme': $theme_name = wp_get_theme( $template_object->theme )->get( 'Name' ); return empty( $theme_name ) ? $template_object->theme : $theme_name; case 'plugin': if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if ( isset( $template_object->plugin ) ) { $plugins = wp_get_active_and_valid_plugins(); foreach ( $plugins as $plugin_file ) { $plugin_basename = plugin_basename( $plugin_file ); // Split basename by '/' to get the plugin slug. list( $plugin_slug, ) = explode( '/', $plugin_basename ); if ( $plugin_slug === $template_object->plugin ) { $plugin_data = get_plugin_data( $plugin_file ); if ( ! empty( $plugin_data['Name'] ) ) { return $plugin_data['Name']; } break; } } } /* * Fall back to the theme name if the plugin is not defined. That's needed to keep backwards * compatibility with templates that were registered before the plugin attribute was added. */ $plugins = get_plugins(); $plugin_basename = plugin_basename( sanitize_text_field( $template_object->theme . '.php' ) ); if ( isset( $plugins[ $plugin_basename ] ) && isset( $plugins[ $plugin_basename ]['Name'] ) ) { return $plugins[ $plugin_basename ]['Name']; } return isset( $template_object->plugin ) ? $template_object->plugin : $template_object->theme; case 'site': return get_bloginfo( 'name' ); case 'user': $author = get_user_by( 'id', $template_object->author ); if ( ! $author ) { return __( 'Unknown author' ); } return $author->get( 'display_name' ); } // Fail-safe to return a string should the original source ever fall through. return ''; } /** * Prepares links for the request. * * @since 5.8.0 * * @param integer $id ID. * @return array Links for the given post. */ protected function prepare_links( $id ) { $links = array( 'self' => array( 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ), ), 'collection' => array( 'href' => rest_url( rest_get_route_for_post_type_items( $this->post_type ) ), ), 'about' => array( 'href' => rest_url( 'wp/v2/types/' . $this->post_type ), ), ); if ( post_type_supports( $this->post_type, 'revisions' ) ) { $template = get_block_template( $id, $this->post_type ); if ( $template instanceof WP_Block_Template && ! empty( $template->wp_id ) ) { $revisions = wp_get_latest_revision_id_and_total_count( $template->wp_id ); $revisions_count = ! is_wp_error( $revisions ) ? $revisions['count'] : 0; $revisions_base = sprintf( '/%s/%s/%s/revisions', $this->namespace, $this->rest_base, $id ); $links['version-history'] = array( 'href' => rest_url( $revisions_base ), 'count' => $revisions_count, ); if ( $revisions_count > 0 ) { $links['predecessor-version'] = array( 'href' => rest_url( $revisions_base . '/' . $revisions['latest_id'] ), 'id' => $revisions['latest_id'], ); } } } return $links; } /** * Get the link relations available for the post and current user. * * @since 5.8.0 * * @return string[] List of link relations. */ protected function get_available_actions() { $rels = array(); $post_type = get_post_type_object( $this->post_type ); if ( current_user_can( $post_type->cap->publish_posts ) ) { $rels[] = 'https://api.w.org/action-publish'; } if ( current_user_can( 'unfiltered_html' ) ) { $rels[] = 'https://api.w.org/action-unfiltered-html'; } return $rels; } /** * Retrieves the query params for the posts collection. * * @since 5.8.0 * @since 5.9.0 Added `'area'` and `'post_type'`. * * @return array Collection parameters. */ public function get_collection_params() { return array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), 'wp_id' => array( 'description' => __( 'Limit to the specified post id.' ), 'type' => 'integer', ), 'area' => array( 'description' => __( 'Limit to the specified template part area.' ), 'type' => 'string', ), 'post_type' => array( 'description' => __( 'Post type to get the templates for.' ), 'type' => 'string', ), ); } /** * Retrieves the block type' schema, conforming to JSON Schema. * * @since 5.8.0 * @since 5.9.0 Added `'area'`. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => $this->post_type, 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'ID of template.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'Unique slug identifying the template.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'required' => true, 'minLength' => 1, 'pattern' => '[a-zA-Z0-9_\%-]+', ), 'theme' => array( 'description' => __( 'Theme identifier for the template.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), ), 'type' => array( 'description' => __( 'Type of template.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), ), 'source' => array( 'description' => __( 'Source of template' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'origin' => array( 'description' => __( 'Source of a customized template' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'content' => array( 'description' => __( 'Content of template.' ), 'type' => array( 'object', 'string' ), 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'properties' => array( 'raw' => array( 'description' => __( 'Content for the template, as it exists in the database.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), ), 'block_version' => array( 'description' => __( 'Version of the content block format used by the template.' ), 'type' => 'integer', 'context' => array( 'edit' ), 'readonly' => true, ), ), ), 'title' => array( 'description' => __( 'Title of template.' ), 'type' => array( 'object', 'string' ), 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'properties' => array( 'raw' => array( 'description' => __( 'Title for the template, as it exists in the database.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), ), 'rendered' => array( 'description' => __( 'HTML title for the template, transformed for display.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), ), ), 'description' => array( 'description' => __( 'Description of template.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), ), 'status' => array( 'description' => __( 'Status of template.' ), 'type' => 'string', 'enum' => array_keys( get_post_stati( array( 'internal' => false ) ) ), 'default' => 'publish', 'context' => array( 'embed', 'view', 'edit' ), ), 'wp_id' => array( 'description' => __( 'Post ID.' ), 'type' => 'integer', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'has_theme_file' => array( 'description' => __( 'Theme file exists.' ), 'type' => 'bool', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'author' => array( 'description' => __( 'The ID for the author of the template.' ), 'type' => 'integer', 'context' => array( 'view', 'edit', 'embed' ), ), 'modified' => array( 'description' => __( "The date the template was last modified, in the site's timezone." ), 'type' => 'string', 'format' => 'date-time', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'author_text' => array( 'type' => 'string', 'description' => __( 'Human readable text for the author.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ), 'original_source' => array( 'description' => __( 'Where the template originally comes from e.g. \'theme\'' ), 'type' => 'string', 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), 'enum' => array( 'theme', 'plugin', 'site', 'user', ), ), ), ); if ( 'wp_template' === $this->post_type ) { $schema['properties']['is_custom'] = array( 'description' => __( 'Whether a template is a custom template.' ), 'type' => 'bool', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); $schema['properties']['plugin'] = array( 'type' => 'string', 'description' => __( 'Plugin that registered the template.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ); } if ( 'wp_template_part' === $this->post_type ) { $schema['properties']['area'] = array( 'description' => __( 'Where the template part is intended for use (header, footer, etc.)' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), ); } $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } } PKU![!Ͱ1endpoints/class-wp-rest-menu-items-controller.phpnu[get_post( $id ); if ( is_wp_error( $post ) ) { return $post; } return wp_setup_nav_menu_item( $post ); } /** * Checks if a given request has access to read menu items. * * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { $has_permission = parent::get_items_permissions_check( $request ); if ( true !== $has_permission ) { return $has_permission; } return $this->check_has_read_only_access( $request ); } /** * Checks if a given request has access to read a menu item if they have access to edit them. * * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. * @return bool|WP_Error True if the request has read access for the item, WP_Error object or false otherwise. */ public function get_item_permissions_check( $request ) { $permission_check = parent::get_item_permissions_check( $request ); if ( true !== $permission_check ) { return $permission_check; } return $this->check_has_read_only_access( $request ); } /** * Checks whether the current user has read permission for the endpoint. * * This allows for any user that can `edit_theme_options` or edit any REST API available post type. * * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ protected function check_has_read_only_access( $request ) { /** * Filters whether the current user has read access to menu items via the REST API. * * @since 6.8.0 * * @param bool $read_only_access Whether the current user has read access to menu items * via the REST API. * @param WP_REST_Request $request Full details about the request. * @param WP_REST_Controller $this The current instance of the controller. */ $read_only_access = apply_filters( 'rest_menu_read_access', false, $request, $this ); if ( $read_only_access ) { return true; } if ( current_user_can( 'edit_theme_options' ) ) { return true; } if ( current_user_can( 'edit_posts' ) ) { return true; } foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to view menu items.' ), array( 'status' => rest_authorization_required_code() ) ); } /** * Creates a single nav menu item. * * @since 5.9.0 * * @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 create_item( $request ) { if ( ! empty( $request['id'] ) ) { return new WP_Error( 'rest_post_exists', __( 'Cannot create existing post.' ), array( 'status' => 400 ) ); } $prepared_nav_item = $this->prepare_item_for_database( $request ); if ( is_wp_error( $prepared_nav_item ) ) { return $prepared_nav_item; } $prepared_nav_item = (array) $prepared_nav_item; $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false ); if ( is_wp_error( $nav_menu_item_id ) ) { if ( 'db_insert_error' === $nav_menu_item_id->get_error_code() ) { $nav_menu_item_id->add_data( array( 'status' => 500 ) ); } else { $nav_menu_item_id->add_data( array( 'status' => 400 ) ); } return $nav_menu_item_id; } $nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id ); if ( is_wp_error( $nav_menu_item ) ) { $nav_menu_item->add_data( array( 'status' => 404 ) ); return $nav_menu_item; } /** * Fires after a single menu item is created or updated via the REST API. * * @since 5.9.0 * * @param object $nav_menu_item Inserted or updated menu item object. * @param WP_REST_Request $request Request object. * @param bool $creating True when creating a menu item, false when updating. */ do_action( 'rest_insert_nav_menu_item', $nav_menu_item, $request, true ); $schema = $this->get_item_schema(); if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) { $meta_update = $this->meta->update_value( $request['meta'], $nav_menu_item_id ); if ( is_wp_error( $meta_update ) ) { return $meta_update; } } $nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id ); $fields_update = $this->update_additional_fields_for_object( $nav_menu_item, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'edit' ); /** * Fires after a single menu item is completely created or updated via the REST API. * * @since 5.9.0 * * @param object $nav_menu_item Inserted or updated menu item object. * @param WP_REST_Request $request Request object. * @param bool $creating True when creating a menu item, false when updating. */ do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, true ); $post = get_post( $nav_menu_item_id ); wp_after_insert_post( $post, false, null ); $response = $this->prepare_item_for_response( $post, $request ); $response = rest_ensure_response( $response ); $response->set_status( 201 ); $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $nav_menu_item_id ) ) ); return $response; } /** * Updates a single nav menu item. * * @since 5.9.0 * * @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 update_item( $request ) { $valid_check = $this->get_nav_menu_item( $request['id'] ); if ( is_wp_error( $valid_check ) ) { return $valid_check; } $post_before = get_post( $request['id'] ); $prepared_nav_item = $this->prepare_item_for_database( $request ); if ( is_wp_error( $prepared_nav_item ) ) { return $prepared_nav_item; } $prepared_nav_item = (array) $prepared_nav_item; $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false ); if ( is_wp_error( $nav_menu_item_id ) ) { if ( 'db_update_error' === $nav_menu_item_id->get_error_code() ) { $nav_menu_item_id->add_data( array( 'status' => 500 ) ); } else { $nav_menu_item_id->add_data( array( 'status' => 400 ) ); } return $nav_menu_item_id; } $nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id ); if ( is_wp_error( $nav_menu_item ) ) { $nav_menu_item->add_data( array( 'status' => 404 ) ); return $nav_menu_item; } /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */ do_action( 'rest_insert_nav_menu_item', $nav_menu_item, $request, false ); $schema = $this->get_item_schema(); if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) { $meta_update = $this->meta->update_value( $request['meta'], $nav_menu_item->ID ); if ( is_wp_error( $meta_update ) ) { return $meta_update; } } $post = get_post( $nav_menu_item_id ); $nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id ); $fields_update = $this->update_additional_fields_for_object( $nav_menu_item, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'edit' ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */ do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, false ); wp_after_insert_post( $post, true, $post_before ); $response = $this->prepare_item_for_response( get_post( $nav_menu_item_id ), $request ); return rest_ensure_response( $response ); } /** * Deletes a single nav menu item. * * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error True on success, or WP_Error object on failure. */ public function delete_item( $request ) { $menu_item = $this->get_nav_menu_item( $request['id'] ); if ( is_wp_error( $menu_item ) ) { return $menu_item; } // We don't support trashing for menu items. if ( ! $request['force'] ) { /* translators: %s: force=true */ return new WP_Error( 'rest_trash_not_supported', sprintf( __( "Menu items do not support trashing. Set '%s' to delete." ), 'force=true' ), array( 'status' => 501 ) ); } $previous = $this->prepare_item_for_response( get_post( $request['id'] ), $request ); $result = wp_delete_post( $request['id'], true ); if ( ! $result ) { return new WP_Error( 'rest_cannot_delete', __( 'The post cannot be deleted.' ), array( 'status' => 500 ) ); } $response = new WP_REST_Response(); $response->set_data( array( 'deleted' => true, 'previous' => $previous->get_data(), ) ); /** * Fires immediately after a single menu item is deleted via the REST API. * * @since 5.9.0 * * @param object $nav_menu_item Inserted or updated menu item object. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request Request object. */ do_action( 'rest_delete_nav_menu_item', $menu_item, $response, $request ); return $response; } /** * Prepares a single nav menu item for create or update. * * @since 5.9.0 * * @param WP_REST_Request $request Request object. * * @return object|WP_Error */ protected function prepare_item_for_database( $request ) { $menu_item_db_id = $request['id']; $menu_item_obj = $this->get_nav_menu_item( $menu_item_db_id ); // Need to persist the menu item data. See https://core.trac.wordpress.org/ticket/28138 if ( ! is_wp_error( $menu_item_obj ) ) { // Correct the menu position if this was the first item. See https://core.trac.wordpress.org/ticket/28140 $position = ( 0 === $menu_item_obj->menu_order ) ? 1 : $menu_item_obj->menu_order; $prepared_nav_item = array( 'menu-item-db-id' => $menu_item_db_id, 'menu-item-object-id' => $menu_item_obj->object_id, 'menu-item-object' => $menu_item_obj->object, 'menu-item-parent-id' => $menu_item_obj->menu_item_parent, 'menu-item-position' => $position, 'menu-item-type' => $menu_item_obj->type, 'menu-item-title' => $menu_item_obj->title, 'menu-item-url' => $menu_item_obj->url, 'menu-item-description' => $menu_item_obj->description, 'menu-item-attr-title' => $menu_item_obj->attr_title, 'menu-item-target' => $menu_item_obj->target, 'menu-item-classes' => $menu_item_obj->classes, // Stored in the database as a string. 'menu-item-xfn' => explode( ' ', $menu_item_obj->xfn ), 'menu-item-status' => $menu_item_obj->post_status, 'menu-id' => $this->get_menu_id( $menu_item_db_id ), ); } else { $prepared_nav_item = array( 'menu-id' => 0, 'menu-item-db-id' => 0, 'menu-item-object-id' => 0, 'menu-item-object' => '', 'menu-item-parent-id' => 0, 'menu-item-position' => 1, 'menu-item-type' => 'custom', 'menu-item-title' => '', 'menu-item-url' => '', 'menu-item-description' => '', 'menu-item-attr-title' => '', 'menu-item-target' => '', 'menu-item-classes' => array(), 'menu-item-xfn' => array(), 'menu-item-status' => 'publish', ); } $mapping = array( 'menu-item-db-id' => 'id', 'menu-item-object-id' => 'object_id', 'menu-item-object' => 'object', 'menu-item-parent-id' => 'parent', 'menu-item-position' => 'menu_order', 'menu-item-type' => 'type', 'menu-item-url' => 'url', 'menu-item-description' => 'description', 'menu-item-attr-title' => 'attr_title', 'menu-item-target' => 'target', 'menu-item-classes' => 'classes', 'menu-item-xfn' => 'xfn', 'menu-item-status' => 'status', ); $schema = $this->get_item_schema(); foreach ( $mapping as $original => $api_request ) { if ( isset( $request[ $api_request ] ) ) { $prepared_nav_item[ $original ] = $request[ $api_request ]; } } $taxonomy = get_taxonomy( 'nav_menu' ); $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; // If menus submitted, cast to int. if ( ! empty( $request[ $base ] ) ) { $prepared_nav_item['menu-id'] = absint( $request[ $base ] ); } // Nav menu title. if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) { if ( is_string( $request['title'] ) ) { $prepared_nav_item['menu-item-title'] = $request['title']; } elseif ( ! empty( $request['title']['raw'] ) ) { $prepared_nav_item['menu-item-title'] = $request['title']['raw']; } } $error = new WP_Error(); // Check if object id exists before saving. if ( ! $prepared_nav_item['menu-item-object'] ) { // If taxonomy, check if term exists. if ( 'taxonomy' === $prepared_nav_item['menu-item-type'] ) { $original = get_term( absint( $prepared_nav_item['menu-item-object-id'] ) ); if ( empty( $original ) || is_wp_error( $original ) ) { $error->add( 'rest_term_invalid_id', __( 'Invalid term ID.' ), array( 'status' => 400 ) ); } else { $prepared_nav_item['menu-item-object'] = get_term_field( 'taxonomy', $original ); } // If post, check if post object exists. } elseif ( 'post_type' === $prepared_nav_item['menu-item-type'] ) { $original = get_post( absint( $prepared_nav_item['menu-item-object-id'] ) ); if ( empty( $original ) ) { $error->add( 'rest_post_invalid_id', __( 'Invalid post ID.' ), array( 'status' => 400 ) ); } else { $prepared_nav_item['menu-item-object'] = get_post_type( $original ); } } } // If post type archive, check if post type exists. if ( 'post_type_archive' === $prepared_nav_item['menu-item-type'] ) { $post_type = $prepared_nav_item['menu-item-object'] ? $prepared_nav_item['menu-item-object'] : false; $original = get_post_type_object( $post_type ); if ( ! $original ) { $error->add( 'rest_post_invalid_type', __( 'Invalid post type.' ), array( 'status' => 400 ) ); } } // Check if menu item is type custom, then title and url are required. if ( 'custom' === $prepared_nav_item['menu-item-type'] ) { if ( '' === $prepared_nav_item['menu-item-title'] ) { $error->add( 'rest_title_required', __( 'The title is required when using a custom menu item type.' ), array( 'status' => 400 ) ); } if ( empty( $prepared_nav_item['menu-item-url'] ) ) { $error->add( 'rest_url_required', __( 'The url is required when using a custom menu item type.' ), array( 'status' => 400 ) ); } } if ( $error->has_errors() ) { return $error; } // The xfn and classes properties are arrays, but passed to wp_update_nav_menu_item as a string. foreach ( array( 'menu-item-xfn', 'menu-item-classes' ) as $key ) { $prepared_nav_item[ $key ] = implode( ' ', $prepared_nav_item[ $key ] ); } // Only draft / publish are valid post status for menu items. if ( 'publish' !== $prepared_nav_item['menu-item-status'] ) { $prepared_nav_item['menu-item-status'] = 'draft'; } $prepared_nav_item = (object) $prepared_nav_item; /** * Filters a menu item before it is inserted via the REST API. * * @since 5.9.0 * * @param object $prepared_nav_item An object representing a single menu item prepared * for inserting or updating the database. * @param WP_REST_Request $request Request object. */ return apply_filters( 'rest_pre_insert_nav_menu_item', $prepared_nav_item, $request ); } /** * Prepares a single nav menu item output for response. * * @since 5.9.0 * * @param WP_Post $item Post object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Base fields for every post. $fields = $this->get_fields_for_response( $request ); $menu_item = $this->get_nav_menu_item( $item->ID ); $data = array(); if ( rest_is_field_included( 'id', $fields ) ) { $data['id'] = $menu_item->ID; } if ( rest_is_field_included( 'title', $fields ) ) { $data['title'] = array(); } if ( rest_is_field_included( 'title.raw', $fields ) ) { $data['title']['raw'] = $menu_item->title; } if ( rest_is_field_included( 'title.rendered', $fields ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); /** This filter is documented in wp-includes/post-template.php */ $title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID ); $data['title']['rendered'] = $title; remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); } if ( rest_is_field_included( 'status', $fields ) ) { $data['status'] = $menu_item->post_status; } if ( rest_is_field_included( 'url', $fields ) ) { $data['url'] = $menu_item->url; } if ( rest_is_field_included( 'attr_title', $fields ) ) { // Same as post_excerpt. $data['attr_title'] = $menu_item->attr_title; } if ( rest_is_field_included( 'description', $fields ) ) { // Same as post_content. $data['description'] = $menu_item->description; } if ( rest_is_field_included( 'type', $fields ) ) { $data['type'] = $menu_item->type; } if ( rest_is_field_included( 'type_label', $fields ) ) { $data['type_label'] = $menu_item->type_label; } if ( rest_is_field_included( 'object', $fields ) ) { $data['object'] = $menu_item->object; } if ( rest_is_field_included( 'object_id', $fields ) ) { // It is stored as a string, but should be exposed as an integer. $data['object_id'] = absint( $menu_item->object_id ); } if ( rest_is_field_included( 'parent', $fields ) ) { // Same as post_parent, exposed as an integer. $data['parent'] = (int) $menu_item->menu_item_parent; } if ( rest_is_field_included( 'menu_order', $fields ) ) { // Same as post_parent, exposed as an integer. $data['menu_order'] = (int) $menu_item->menu_order; } if ( rest_is_field_included( 'target', $fields ) ) { $data['target'] = $menu_item->target; } if ( rest_is_field_included( 'classes', $fields ) ) { $data['classes'] = (array) $menu_item->classes; } if ( rest_is_field_included( 'xfn', $fields ) ) { $data['xfn'] = array_map( 'sanitize_html_class', explode( ' ', $menu_item->xfn ) ); } if ( rest_is_field_included( 'invalid', $fields ) ) { $data['invalid'] = (bool) $menu_item->_invalid; } if ( rest_is_field_included( 'meta', $fields ) ) { $data['meta'] = $this->meta->get_value( $menu_item->ID, $request ); } $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) ); foreach ( $taxonomies as $taxonomy ) { $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; if ( rest_is_field_included( $base, $fields ) ) { $terms = get_the_terms( $item, $taxonomy->name ); if ( ! is_array( $terms ) ) { continue; } $term_ids = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array(); if ( 'nav_menu' === $taxonomy->name ) { $data[ $base ] = $term_ids ? array_shift( $term_ids ) : 0; } else { $data[ $base ] = $term_ids; } } } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $links = $this->prepare_links( $item ); $response->add_links( $links ); if ( ! empty( $links['self']['href'] ) ) { $actions = $this->get_available_actions( $item, $request ); $self = $links['self']['href']; foreach ( $actions as $rel ) { $response->add_link( $rel, $self ); } } } /** * Filters the menu item data for a REST API response. * * @since 5.9.0 * * @param WP_REST_Response $response The response object. * @param object $menu_item Menu item setup by {@see wp_setup_nav_menu_item()}. * @param WP_REST_Request $request Request object. */ return apply_filters( 'rest_prepare_nav_menu_item', $response, $menu_item, $request ); } /** * Prepares links for the request. * * @since 5.9.0 * * @param WP_Post $post Post object. * @return array Links for the given post. */ protected function prepare_links( $post ) { $links = parent::prepare_links( $post ); $menu_item = $this->get_nav_menu_item( $post->ID ); if ( empty( $menu_item->object_id ) ) { return $links; } $path = ''; $type = ''; $key = $menu_item->type; if ( 'post_type' === $menu_item->type ) { $path = rest_get_route_for_post( $menu_item->object_id ); $type = get_post_type( $menu_item->object_id ); } elseif ( 'taxonomy' === $menu_item->type ) { $path = rest_get_route_for_term( $menu_item->object_id ); $type = get_term_field( 'taxonomy', $menu_item->object_id ); } if ( $path && $type ) { $links['https://api.w.org/menu-item-object'][] = array( 'href' => rest_url( $path ), $key => $type, 'embeddable' => true, ); } return $links; } /** * Retrieves Link Description Objects that should be added to the Schema for the nav menu items collection. * * @since 5.9.0 * * @return array */ protected function get_schema_links() { $links = parent::get_schema_links(); $href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" ); $links[] = array( 'rel' => 'https://api.w.org/menu-item-object', 'title' => __( 'Get linked object.' ), 'href' => $href, 'targetSchema' => array( 'type' => 'object', 'properties' => array( 'object' => array( 'type' => 'integer', ), ), ), ); return $links; } /** * Retrieves the nav menu item's schema, conforming to JSON Schema. * * @since 5.9.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => $this->post_type, 'type' => 'object', ); $schema['properties']['title'] = array( 'description' => __( 'The title for the object.' ), 'type' => array( 'string', 'object' ), 'context' => array( 'view', 'edit', 'embed' ), 'properties' => array( 'raw' => array( 'description' => __( 'Title for the object, as it exists in the database.' ), 'type' => 'string', 'context' => array( 'edit' ), ), 'rendered' => array( 'description' => __( 'HTML title for the object, transformed for display.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), ), ); $schema['properties']['id'] = array( 'description' => __( 'Unique identifier for the object.' ), 'type' => 'integer', 'default' => 0, 'minimum' => 0, 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['type_label'] = array( 'description' => __( 'The singular label used to describe this type of menu item.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ); $schema['properties']['type'] = array( 'description' => __( 'The family of objects originally represented, such as "post_type" or "taxonomy".' ), 'type' => 'string', 'enum' => array( 'taxonomy', 'post_type', 'post_type_archive', 'custom' ), 'context' => array( 'view', 'edit', 'embed' ), 'default' => 'custom', ); $schema['properties']['status'] = array( 'description' => __( 'A named status for the object.' ), 'type' => 'string', 'enum' => array_keys( get_post_stati( array( 'internal' => false ) ) ), 'default' => 'publish', 'context' => array( 'view', 'edit', 'embed' ), ); $schema['properties']['parent'] = array( 'description' => __( 'The ID for the parent of the object.' ), 'type' => 'integer', 'minimum' => 0, 'default' => 0, 'context' => array( 'view', 'edit', 'embed' ), ); $schema['properties']['attr_title'] = array( 'description' => __( 'Text for the title attribute of the link element for this menu item.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => 'sanitize_text_field', ), ); $schema['properties']['classes'] = array( 'description' => __( 'Class names for the link element of this menu item.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => static function ( $value ) { return array_map( 'sanitize_html_class', wp_parse_list( $value ) ); }, ), ); $schema['properties']['description'] = array( 'description' => __( 'The description of this menu item.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => 'sanitize_text_field', ), ); $schema['properties']['menu_order'] = array( 'description' => __( 'The DB ID of the nav_menu_item that is this item\'s menu parent, if any, otherwise 0.' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'integer', 'minimum' => 1, 'default' => 1, ); $schema['properties']['object'] = array( 'description' => __( 'The type of object originally represented, such as "category", "post", or "attachment".' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'string', 'arg_options' => array( 'sanitize_callback' => 'sanitize_key', ), ); $schema['properties']['object_id'] = array( 'description' => __( 'The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'integer', 'minimum' => 0, 'default' => 0, ); $schema['properties']['target'] = array( 'description' => __( 'The target attribute of the link element for this menu item.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'enum' => array( '_blank', '', ), ); $schema['properties']['url'] = array( 'description' => __( 'The URL to which this menu item points.' ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'validate_callback' => static function ( $url ) { if ( '' === $url ) { return true; } if ( sanitize_url( $url ) ) { return true; } return new WP_Error( 'rest_invalid_url', __( 'Invalid URL.' ) ); }, ), ); $schema['properties']['xfn'] = array( 'description' => __( 'The XFN relationship expressed in the link of this menu item.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit', 'embed' ), 'arg_options' => array( 'sanitize_callback' => static function ( $value ) { return array_map( 'sanitize_html_class', wp_parse_list( $value ) ); }, ), ); $schema['properties']['invalid'] = array( 'description' => __( 'Whether the menu item represents an object that no longer exists.' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'boolean', 'readonly' => true, ); $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) ); foreach ( $taxonomies as $taxonomy ) { $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; $schema['properties'][ $base ] = array( /* translators: %s: taxonomy name */ 'description' => sprintf( __( 'The terms assigned to the object in the %s taxonomy.' ), $taxonomy->name ), 'type' => 'array', 'items' => array( 'type' => 'integer', ), 'context' => array( 'view', 'edit' ), ); if ( 'nav_menu' === $taxonomy->name ) { $schema['properties'][ $base ]['type'] = 'integer'; unset( $schema['properties'][ $base ]['items'] ); } } $schema['properties']['meta'] = $this->meta->get_field_schema(); $schema_links = $this->get_schema_links(); if ( $schema_links ) { $schema['links'] = $schema_links; } $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for the nav menu items collection. * * @since 5.9.0 * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['menu_order'] = array( 'description' => __( 'Limit result set to posts with a specific menu_order value.' ), 'type' => 'integer', ); $query_params['order'] = array( 'description' => __( 'Order sort attribute ascending or descending.' ), 'type' => 'string', 'default' => 'asc', 'enum' => array( 'asc', 'desc' ), ); $query_params['orderby'] = array( 'description' => __( 'Sort collection by object attribute.' ), 'type' => 'string', 'default' => 'menu_order', 'enum' => array( 'author', 'date', 'id', 'include', 'modified', 'parent', 'relevance', 'slug', 'include_slugs', 'title', 'menu_order', ), ); // Change default to 100 items. $query_params['per_page']['default'] = 100; return $query_params; } /** * Determines the allowed query_vars for a get_items() response and prepares * them for WP_Query. * * @since 5.9.0 * * @param array $prepared_args Optional. Prepared WP_Query arguments. Default empty array. * @param WP_REST_Request $request Optional. Full details about the request. * @return array Items query arguments. */ protected function prepare_items_query( $prepared_args = array(), $request = null ) { $query_args = parent::prepare_items_query( $prepared_args, $request ); // Map to proper WP_Query orderby param. if ( isset( $query_args['orderby'], $request['orderby'] ) ) { $orderby_mappings = array( 'id' => 'ID', 'include' => 'post__in', 'slug' => 'post_name', 'include_slugs' => 'post_name__in', 'menu_order' => 'menu_order', ); if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) { $query_args['orderby'] = $orderby_mappings[ $request['orderby'] ]; } } $query_args['update_menu_item_cache'] = true; return $query_args; } /** * Gets the id of the menu that the given menu item belongs to. * * @since 5.9.0 * * @param int $menu_item_id Menu item id. * @return int */ protected function get_menu_id( $menu_item_id ) { $menu_ids = wp_get_post_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) ); $menu_id = 0; if ( $menu_ids && ! is_wp_error( $menu_ids ) ) { $menu_id = array_shift( $menu_ids ); } return $menu_id; } } PKU![>VjDjD4endpoints/class-wp-rest-font-families-controller.phpnu[post_type ); if ( ! current_user_can( $post_type->cap->read ) ) { return new WP_Error( 'rest_cannot_read', __( 'Sorry, you are not allowed to access font families.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Checks if a given request has access to a font family. * * @since 6.5.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $post = $this->get_post( $request['id'] ); if ( is_wp_error( $post ) ) { return $post; } if ( ! current_user_can( 'read_post', $post->ID ) ) { return new WP_Error( 'rest_cannot_read', __( 'Sorry, you are not allowed to access this font family.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Validates settings when creating or updating a font family. * * @since 6.5.0 * * @param string $value Encoded JSON string of font family settings. * @param WP_REST_Request $request Request object. * @return true|WP_Error True if the settings are valid, otherwise a WP_Error object. */ public function validate_font_family_settings( $value, $request ) { $settings = json_decode( $value, true ); // Check settings string is valid JSON. if ( null === $settings ) { return new WP_Error( 'rest_invalid_param', /* translators: %s: Parameter name: "font_family_settings". */ sprintf( __( '%s parameter must be a valid JSON string.' ), 'font_family_settings' ), array( 'status' => 400 ) ); } $schema = $this->get_item_schema()['properties']['font_family_settings']; $required = $schema['required']; if ( isset( $request['id'] ) ) { // Allow sending individual properties if we are updating an existing font family. unset( $schema['required'] ); // But don't allow updating the slug, since it is used as a unique identifier. if ( isset( $settings['slug'] ) ) { return new WP_Error( 'rest_invalid_param', /* translators: %s: Name of parameter being updated: font_family_settings[slug]". */ sprintf( __( '%s cannot be updated.' ), 'font_family_settings[slug]' ), array( 'status' => 400 ) ); } } // Check that the font face settings match the theme.json schema. $has_valid_settings = rest_validate_value_from_schema( $settings, $schema, 'font_family_settings' ); if ( is_wp_error( $has_valid_settings ) ) { $has_valid_settings->add_data( array( 'status' => 400 ) ); return $has_valid_settings; } // Check that none of the required settings are empty values. foreach ( $required as $key ) { if ( isset( $settings[ $key ] ) && ! $settings[ $key ] ) { return new WP_Error( 'rest_invalid_param', /* translators: %s: Name of the empty font family setting parameter, e.g. "font_family_settings[slug]". */ sprintf( __( '%s cannot be empty.' ), "font_family_settings[ $key ]" ), array( 'status' => 400 ) ); } } return true; } /** * Sanitizes the font family settings when creating or updating a font family. * * @since 6.5.0 * * @param string $value Encoded JSON string of font family settings. * @return array Decoded array of font family settings. */ public function sanitize_font_family_settings( $value ) { // Settings arrive as stringified JSON, since this is a multipart/form-data request. $settings = json_decode( $value, true ); $schema = $this->get_item_schema()['properties']['font_family_settings']['properties']; // Sanitize settings based on callbacks in the schema. foreach ( $settings as $key => $value ) { $sanitize_callback = $schema[ $key ]['arg_options']['sanitize_callback']; $settings[ $key ] = call_user_func( $sanitize_callback, $value ); } return $settings; } /** * Creates a single font family. * * @since 6.5.0 * * @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 create_item( $request ) { $settings = $request->get_param( 'font_family_settings' ); // Check that the font family slug is unique. $query = new WP_Query( array( 'post_type' => $this->post_type, 'posts_per_page' => 1, 'name' => $settings['slug'], 'update_post_meta_cache' => false, 'update_post_term_cache' => false, ) ); if ( ! empty( $query->posts ) ) { return new WP_Error( 'rest_duplicate_font_family', /* translators: %s: Font family slug. */ sprintf( __( 'A font family with slug "%s" already exists.' ), $settings['slug'] ), array( 'status' => 400 ) ); } return parent::create_item( $request ); } /** * Deletes a single font family. * * @since 6.5.0 * * @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 delete_item( $request ) { $force = isset( $request['force'] ) ? (bool) $request['force'] : false; // We don't support trashing for font families. if ( ! $force ) { return new WP_Error( 'rest_trash_not_supported', /* translators: %s: force=true */ sprintf( __( 'Font faces do not support trashing. Set "%s" to delete.' ), 'force=true' ), array( 'status' => 501 ) ); } return parent::delete_item( $request ); } /** * Prepares a single font family output for response. * * @since 6.5.0 * * @param WP_Post $item Post object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { $fields = $this->get_fields_for_response( $request ); $data = array(); if ( rest_is_field_included( 'id', $fields ) ) { $data['id'] = $item->ID; } if ( rest_is_field_included( 'theme_json_version', $fields ) ) { $data['theme_json_version'] = static::LATEST_THEME_JSON_VERSION_SUPPORTED; } if ( rest_is_field_included( 'font_faces', $fields ) ) { $data['font_faces'] = $this->get_font_face_ids( $item->ID ); } if ( rest_is_field_included( 'font_family_settings', $fields ) ) { $data['font_family_settings'] = $this->get_settings_from_post( $item ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) ) { $links = $this->prepare_links( $item ); $response->add_links( $links ); } /** * Filters the font family data for a REST API response. * * @since 6.5.0 * * @param WP_REST_Response $response The response object. * @param WP_Post $post Font family post object. * @param WP_REST_Request $request Request object. */ return apply_filters( 'rest_prepare_wp_font_family', $response, $item, $request ); } /** * Retrieves the post's schema, conforming to JSON Schema. * * @since 6.5.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => $this->post_type, 'type' => 'object', // Base properties for every Post. 'properties' => array( 'id' => array( 'description' => __( 'Unique identifier for the post.', 'default' ), 'type' => 'integer', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'theme_json_version' => array( 'description' => __( 'Version of the theme.json schema used for the typography settings.' ), 'type' => 'integer', 'default' => static::LATEST_THEME_JSON_VERSION_SUPPORTED, 'minimum' => 2, 'maximum' => static::LATEST_THEME_JSON_VERSION_SUPPORTED, 'context' => array( 'view', 'edit', 'embed' ), ), 'font_faces' => array( 'description' => __( 'The IDs of the child font faces in the font family.' ), 'type' => 'array', 'context' => array( 'view', 'edit', 'embed' ), 'items' => array( 'type' => 'integer', ), ), // Font family settings come directly from theme.json schema // See https://schemas.wp.org/trunk/theme.json 'font_family_settings' => array( 'description' => __( 'font-face definition in theme.json format.' ), 'type' => 'object', 'context' => array( 'view', 'edit', 'embed' ), 'properties' => array( 'name' => array( 'description' => __( 'Name of the font family preset, translatable.' ), 'type' => 'string', 'arg_options' => array( 'sanitize_callback' => 'sanitize_text_field', ), ), 'slug' => array( 'description' => __( 'Kebab-case unique identifier for the font family preset.' ), 'type' => 'string', 'arg_options' => array( 'sanitize_callback' => 'sanitize_title', ), ), 'fontFamily' => array( 'description' => __( 'CSS font-family value.' ), 'type' => 'string', 'arg_options' => array( 'sanitize_callback' => array( 'WP_Font_Utils', 'sanitize_font_family' ), ), ), 'preview' => array( 'description' => __( 'URL to a preview image of the font family.' ), 'type' => 'string', 'format' => 'uri', 'default' => '', 'arg_options' => array( 'sanitize_callback' => 'sanitize_url', ), ), ), 'required' => array( 'name', 'slug', 'fontFamily' ), 'additionalProperties' => false, ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the item's schema for display / public consumption purposes. * * @since 6.5.0 * * @return array Public item schema data. */ public function get_public_item_schema() { $schema = parent::get_public_item_schema(); // Also remove `arg_options' from child font_family_settings properties, since the parent // controller only handles the top level properties. foreach ( $schema['properties']['font_family_settings']['properties'] as &$property ) { unset( $property['arg_options'] ); } return $schema; } /** * Retrieves the query params for the font family collection. * * @since 6.5.0 * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); // Remove unneeded params. unset( $query_params['after'], $query_params['modified_after'], $query_params['before'], $query_params['modified_before'], $query_params['search'], $query_params['search_columns'], $query_params['status'] ); $query_params['orderby']['default'] = 'id'; $query_params['orderby']['enum'] = array( 'id', 'include' ); /** * Filters collection parameters for the font family controller. * * @since 6.5.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_wp_font_family_collection_params', $query_params ); } /** * Get the arguments used when creating or updating a font family. * * @since 6.5.0 * * @return array Font family create/edit arguments. */ public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) { if ( WP_REST_Server::CREATABLE === $method || WP_REST_Server::EDITABLE === $method ) { $properties = $this->get_item_schema()['properties']; return array( 'theme_json_version' => $properties['theme_json_version'], // When creating or updating, font_family_settings is stringified JSON, to work with multipart/form-data. // Font families don't currently support file uploads, but may accept preview files in the future. 'font_family_settings' => array( 'description' => __( 'font-family declaration in theme.json format, encoded as a string.' ), 'type' => 'string', 'required' => true, 'validate_callback' => array( $this, 'validate_font_family_settings' ), 'sanitize_callback' => array( $this, 'sanitize_font_family_settings' ), ), ); } return parent::get_endpoint_args_for_item_schema( $method ); } /** * Get the child font face post IDs. * * @since 6.5.0 * * @param int $font_family_id Font family post ID. * @return int[] Array of child font face post IDs. */ protected function get_font_face_ids( $font_family_id ) { $query = new WP_Query( array( 'fields' => 'ids', 'post_parent' => $font_family_id, 'post_type' => 'wp_font_face', 'posts_per_page' => 99, 'order' => 'ASC', 'orderby' => 'id', 'update_post_meta_cache' => false, 'update_post_term_cache' => false, ) ); return $query->posts; } /** * Prepares font family links for the request. * * @since 6.5.0 * * @param WP_Post $post Post object. * @return array Links for the given post. */ protected function prepare_links( $post ) { // Entity meta. $links = parent::prepare_links( $post ); return array( 'self' => $links['self'], 'collection' => $links['collection'], 'font_faces' => $this->prepare_font_face_links( $post->ID ), ); } /** * Prepares child font face links for the request. * * @param int $font_family_id Font family post ID. * @return array Links for the child font face posts. */ protected function prepare_font_face_links( $font_family_id ) { $font_face_ids = $this->get_font_face_ids( $font_family_id ); $links = array(); foreach ( $font_face_ids as $font_face_id ) { $links[] = array( 'embeddable' => true, 'href' => rest_url( sprintf( '%s/%s/%s/font-faces/%s', $this->namespace, $this->rest_base, $font_family_id, $font_face_id ) ), ); } return $links; } /** * Prepares a single font family post for create or update. * * @since 6.5.0 * * @param WP_REST_Request $request Request object. * @return stdClass|WP_Error Post object or WP_Error. */ protected function prepare_item_for_database( $request ) { $prepared_post = new stdClass(); // Settings have already been decoded by ::sanitize_font_family_settings(). $settings = $request->get_param( 'font_family_settings' ); // This is an update and we merge with the existing font family. if ( isset( $request['id'] ) ) { $existing_post = $this->get_post( $request['id'] ); if ( is_wp_error( $existing_post ) ) { return $existing_post; } $prepared_post->ID = $existing_post->ID; $existing_settings = $this->get_settings_from_post( $existing_post ); $settings = array_merge( $existing_settings, $settings ); } $prepared_post->post_type = $this->post_type; $prepared_post->post_status = 'publish'; $prepared_post->post_title = $settings['name']; $prepared_post->post_name = sanitize_title( $settings['slug'] ); // Remove duplicate information from settings. unset( $settings['name'] ); unset( $settings['slug'] ); $prepared_post->post_content = wp_json_encode( $settings ); return $prepared_post; } /** * Gets the font family's settings from the post. * * @since 6.5.0 * * @param WP_Post $post Font family post object. * @return array Font family settings array. */ protected function get_settings_from_post( $post ) { $settings_json = json_decode( $post->post_content, true ); // Default to empty strings if the settings are missing. return array( 'name' => isset( $post->post_title ) && $post->post_title ? $post->post_title : '', 'slug' => isset( $post->post_name ) && $post->post_name ? $post->post_name : '', 'fontFamily' => isset( $settings_json['fontFamily'] ) && $settings_json['fontFamily'] ? $settings_json['fontFamily'] : '', 'preview' => isset( $settings_json['preview'] ) && $settings_json['preview'] ? $settings_json['preview'] : '', ); } } PKU![hh2endpoints/class-wp-rest-block-types-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'block-types'; $this->block_registry = WP_Block_Type_Registry::get_instance(); $this->style_registry = WP_Block_Styles_Registry::get_instance(); } /** * Registers the routes for block types. * * @since 5.5.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[a-zA-Z0-9_-]+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[a-zA-Z0-9_-]+)/(?P[a-zA-Z0-9_-]+)', array( 'args' => array( 'name' => array( 'description' => __( 'Block name.' ), 'type' => 'string', ), 'namespace' => array( 'description' => __( 'Block namespace.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read post block types. * * @since 5.5.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { return $this->check_read_permission(); } /** * Retrieves all post block types, depending on user context. * * @since 5.5.0 * * @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_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $data = array(); $block_types = $this->block_registry->get_all_registered(); // Retrieve the list of registered collection query parameters. $registered = $this->get_collection_params(); $namespace = ''; if ( isset( $registered['namespace'] ) && ! empty( $request['namespace'] ) ) { $namespace = $request['namespace']; } foreach ( $block_types as $obj ) { if ( $namespace ) { list ( $block_namespace ) = explode( '/', $obj->name ); if ( $namespace !== $block_namespace ) { continue; } } $block_type = $this->prepare_item_for_response( $obj, $request ); $data[] = $this->prepare_response_for_collection( $block_type ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a block type. * * @since 5.5.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $check = $this->check_read_permission(); if ( is_wp_error( $check ) ) { return $check; } $block_name = sprintf( '%s/%s', $request['namespace'], $request['name'] ); $block_type = $this->get_block( $block_name ); if ( is_wp_error( $block_type ) ) { return $block_type; } return true; } /** * Checks whether a given block type should be visible. * * @since 5.5.0 * * @return true|WP_Error True if the block type is visible, WP_Error otherwise. */ protected function check_read_permission() { if ( current_user_can( 'edit_posts' ) ) { return true; } foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { if ( current_user_can( $post_type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_block_type_cannot_view', __( 'Sorry, you are not allowed to manage block types.' ), array( 'status' => rest_authorization_required_code() ) ); } /** * Get the block, if the name is valid. * * @since 5.5.0 * * @param string $name Block name. * @return WP_Block_Type|WP_Error Block type object if name is valid, WP_Error otherwise. */ protected function get_block( $name ) { $block_type = $this->block_registry->get_registered( $name ); if ( empty( $block_type ) ) { return new WP_Error( 'rest_block_type_invalid', __( 'Invalid block type.' ), array( 'status' => 404 ) ); } return $block_type; } /** * Retrieves a specific block type. * * @since 5.5.0 * * @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_item( $request ) { $block_name = sprintf( '%s/%s', $request['namespace'], $request['name'] ); $block_type = $this->get_block( $block_name ); if ( is_wp_error( $block_type ) ) { return $block_type; } $data = $this->prepare_item_for_response( $block_type, $request ); return rest_ensure_response( $data ); } /** * Prepares a block type object for serialization. * * @since 5.5.0 * @since 5.9.0 Renamed `$block_type` to `$item` to match parent class for PHP 8 named parameter support. * @since 6.3.0 Added `selectors` field. * @since 6.5.0 Added `view_script_module_ids` field. * * @param WP_Block_Type $item Block type data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Block type data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $block_type = $item; // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php */ return apply_filters( 'rest_prepare_block_type', new WP_REST_Response( array() ), $block_type, $request ); } $fields = $this->get_fields_for_response( $request ); $data = array(); if ( rest_is_field_included( 'attributes', $fields ) ) { $data['attributes'] = $block_type->get_attributes(); } if ( rest_is_field_included( 'is_dynamic', $fields ) ) { $data['is_dynamic'] = $block_type->is_dynamic(); } $schema = $this->get_item_schema(); // Fields deprecated in WordPress 6.1, but left in the schema for backwards compatibility. $deprecated_fields = array( 'editor_script', 'script', 'view_script', 'editor_style', 'style', ); $extra_fields = array_merge( array( 'api_version', 'name', 'title', 'description', 'icon', 'category', 'keywords', 'parent', 'ancestor', 'allowed_blocks', 'provides_context', 'uses_context', 'selectors', 'supports', 'styles', 'textdomain', 'example', 'editor_script_handles', 'script_handles', 'view_script_handles', 'view_script_module_ids', 'editor_style_handles', 'style_handles', 'view_style_handles', 'variations', 'block_hooks', ), $deprecated_fields ); foreach ( $extra_fields as $extra_field ) { if ( rest_is_field_included( $extra_field, $fields ) ) { if ( isset( $block_type->$extra_field ) ) { $field = $block_type->$extra_field; if ( in_array( $extra_field, $deprecated_fields, true ) && is_array( $field ) ) { // Since the schema only allows strings or null (but no arrays), we return the first array item. $field = ! empty( $field ) ? array_shift( $field ) : ''; } } elseif ( array_key_exists( 'default', $schema['properties'][ $extra_field ] ) ) { $field = $schema['properties'][ $extra_field ]['default']; } else { $field = ''; } $data[ $extra_field ] = rest_sanitize_value_from_schema( $field, $schema['properties'][ $extra_field ] ); } } if ( rest_is_field_included( 'styles', $fields ) ) { $styles = $this->style_registry->get_registered_styles_for_block( $block_type->name ); $styles = array_values( $styles ); $data['styles'] = wp_parse_args( $styles, $data['styles'] ); $data['styles'] = array_filter( $data['styles'] ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $block_type ) ); } /** * Filters a block type returned from the REST API. * * Allows modification of the block type data right before it is returned. * * @since 5.5.0 * * @param WP_REST_Response $response The response object. * @param WP_Block_Type $block_type The original block type object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_block_type', $response, $block_type, $request ); } /** * Prepares links for the request. * * @since 5.5.0 * * @param WP_Block_Type $block_type Block type data. * @return array Links for the given block type. */ protected function prepare_links( $block_type ) { list( $namespace ) = explode( '/', $block_type->name ); $links = array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'self' => array( 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $block_type->name ) ), ), 'up' => array( 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $namespace ) ), ), ); if ( $block_type->is_dynamic() ) { $links['https://api.w.org/render-block'] = array( 'href' => add_query_arg( 'context', 'edit', rest_url( sprintf( '%s/%s/%s', 'wp/v2', 'block-renderer', $block_type->name ) ) ), ); } return $links; } /** * Retrieves the block type' schema, conforming to JSON Schema. * * @since 5.5.0 * @since 6.3.0 Added `selectors` field. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } // rest_validate_value_from_schema doesn't understand $refs, pull out reused definitions for readability. $inner_blocks_definition = array( 'description' => __( 'The list of inner blocks used in the example.' ), 'type' => 'array', 'items' => array( 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The name of the inner block.' ), 'type' => 'string', 'pattern' => self::NAME_PATTERN, 'required' => true, ), 'attributes' => array( 'description' => __( 'The attributes of the inner block.' ), 'type' => 'object', ), 'innerBlocks' => array( 'description' => __( "A list of the inner block's own inner blocks. This is a recursive definition following the parent innerBlocks schema." ), 'type' => 'array', ), ), ), ); $example_definition = array( 'description' => __( 'Block example.' ), 'type' => array( 'object', 'null' ), 'default' => null, 'properties' => array( 'attributes' => array( 'description' => __( 'The attributes used in the example.' ), 'type' => 'object', ), 'innerBlocks' => $inner_blocks_definition, ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); $keywords_definition = array( 'description' => __( 'Block keywords.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'default' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); $icon_definition = array( 'description' => __( 'Icon of block type.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); $category_definition = array( 'description' => __( 'Block category.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ); $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'block-type', 'type' => 'object', 'properties' => array( 'api_version' => array( 'description' => __( 'Version of block API.' ), 'type' => 'integer', 'default' => 1, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'title' => array( 'description' => __( 'Title of block type.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'Unique name identifying the block type.' ), 'type' => 'string', 'pattern' => self::NAME_PATTERN, 'required' => true, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'Description of block type.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'icon' => $icon_definition, 'attributes' => array( 'description' => __( 'Block attributes.' ), 'type' => array( 'object', 'null' ), 'properties' => array(), 'default' => null, 'additionalProperties' => array( 'type' => 'object', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'provides_context' => array( 'description' => __( 'Context provided by blocks of this type.' ), 'type' => 'object', 'properties' => array(), 'additionalProperties' => array( 'type' => 'string', ), 'default' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'uses_context' => array( 'description' => __( 'Context values inherited by blocks of this type.' ), 'type' => 'array', 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'selectors' => array( 'description' => __( 'Custom CSS selectors.' ), 'type' => 'object', 'default' => array(), 'properties' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'supports' => array( 'description' => __( 'Block supports.' ), 'type' => 'object', 'default' => array(), 'properties' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'category' => $category_definition, 'is_dynamic' => array( 'description' => __( 'Is the block dynamically rendered.' ), 'type' => 'boolean', 'default' => false, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'editor_script_handles' => array( 'description' => __( 'Editor script handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'script_handles' => array( 'description' => __( 'Public facing and editor script handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'view_script_handles' => array( 'description' => __( 'Public facing script handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'view_script_module_ids' => array( 'description' => __( 'Public facing script module IDs.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'editor_style_handles' => array( 'description' => __( 'Editor style handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'style_handles' => array( 'description' => __( 'Public facing and editor style handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'view_style_handles' => array( 'description' => __( 'Public facing style handles.' ), 'type' => array( 'array' ), 'default' => array(), 'items' => array( 'type' => 'string', ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'styles' => array( 'description' => __( 'Block style variations.' ), 'type' => 'array', 'items' => array( 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'Unique name identifying the style.' ), 'type' => 'string', 'required' => true, ), 'label' => array( 'description' => __( 'The human-readable label for the style.' ), 'type' => 'string', ), 'inline_style' => array( 'description' => __( 'Inline CSS code that registers the CSS class required for the style.' ), 'type' => 'string', ), 'style_handle' => array( 'description' => __( 'Contains the handle that defines the block style.' ), 'type' => 'string', ), ), ), 'default' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'variations' => array( 'description' => __( 'Block variations.' ), 'type' => 'array', 'items' => array( 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The unique and machine-readable name.' ), 'type' => 'string', 'required' => true, ), 'title' => array( 'description' => __( 'A human-readable variation title.' ), 'type' => 'string', 'required' => true, ), 'description' => array( 'description' => __( 'A detailed variation description.' ), 'type' => 'string', 'required' => false, ), 'category' => $category_definition, 'icon' => $icon_definition, 'isDefault' => array( 'description' => __( 'Indicates whether the current variation is the default one.' ), 'type' => 'boolean', 'required' => false, 'default' => false, ), 'attributes' => array( 'description' => __( 'The initial values for attributes.' ), 'type' => 'object', ), 'innerBlocks' => $inner_blocks_definition, 'example' => $example_definition, 'scope' => array( 'description' => __( 'The list of scopes where the variation is applicable. When not provided, it assumes all available scopes.' ), 'type' => array( 'array', 'null' ), 'default' => null, 'items' => array( 'type' => 'string', 'enum' => array( 'block', 'inserter', 'transform' ), ), 'readonly' => true, ), 'keywords' => $keywords_definition, ), ), 'readonly' => true, 'context' => array( 'embed', 'view', 'edit' ), 'default' => null, ), 'textdomain' => array( 'description' => __( 'Public text domain.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'parent' => array( 'description' => __( 'Parent blocks.' ), 'type' => array( 'array', 'null' ), 'items' => array( 'type' => 'string', 'pattern' => self::NAME_PATTERN, ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'ancestor' => array( 'description' => __( 'Ancestor blocks.' ), 'type' => array( 'array', 'null' ), 'items' => array( 'type' => 'string', 'pattern' => self::NAME_PATTERN, ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'allowed_blocks' => array( 'description' => __( 'Allowed child block types.' ), 'type' => array( 'array', 'null' ), 'items' => array( 'type' => 'string', 'pattern' => self::NAME_PATTERN, ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'keywords' => $keywords_definition, 'example' => $example_definition, 'block_hooks' => array( 'description' => __( 'This block is automatically inserted near any occurrence of the block types used as keys of this map, into a relative position given by the corresponding value.' ), 'type' => 'object', 'patternProperties' => array( self::NAME_PATTERN => array( 'type' => 'string', 'enum' => array( 'before', 'after', 'first_child', 'last_child' ), ), ), 'default' => array(), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), ), ); // Properties deprecated in WordPress 6.1, but left in the schema for backwards compatibility. $deprecated_properties = array( 'editor_script' => array( 'description' => __( 'Editor script handle. DEPRECATED: Use `editor_script_handles` instead.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'script' => array( 'description' => __( 'Public facing and editor script handle. DEPRECATED: Use `script_handles` instead.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'view_script' => array( 'description' => __( 'Public facing script handle. DEPRECATED: Use `view_script_handles` instead.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'editor_style' => array( 'description' => __( 'Editor style handle. DEPRECATED: Use `editor_style_handles` instead.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'style' => array( 'description' => __( 'Public facing and editor style handle. DEPRECATED: Use `style_handles` instead.' ), 'type' => array( 'string', 'null' ), 'default' => null, 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), ); $this->schema['properties'] = array_merge( $this->schema['properties'], $deprecated_properties ); return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for collections. * * @since 5.5.0 * * @return array Collection parameters. */ public function get_collection_params() { return array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), 'namespace' => array( 'description' => __( 'Block namespace.' ), 'type' => 'string', ), ); } } PKU![!K!K3endpoints/class-wp-rest-widget-types-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'widget-types'; } /** * Registers the widget type routes. * * @since 5.8.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[a-zA-Z0-9_-]+)', array( 'args' => array( 'id' => array( 'description' => __( 'The widget type id.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[a-zA-Z0-9_-]+)/encode', array( 'args' => array( 'id' => array( 'description' => __( 'The widget type id.' ), 'type' => 'string', 'required' => true, ), 'instance' => array( 'description' => __( 'Current instance settings of the widget.' ), 'type' => 'object', ), 'form_data' => array( 'description' => __( 'Serialized widget form data to encode into instance settings.' ), 'type' => 'string', 'sanitize_callback' => static function ( $form_data ) { $array = array(); wp_parse_str( $form_data, $array ); return $array; }, ), ), array( 'methods' => WP_REST_Server::CREATABLE, 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'callback' => array( $this, 'encode_form_data' ), ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[a-zA-Z0-9_-]+)/render', array( array( 'methods' => WP_REST_Server::CREATABLE, 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'callback' => array( $this, 'render' ), 'args' => array( 'id' => array( 'description' => __( 'The widget type id.' ), 'type' => 'string', 'required' => true, ), 'instance' => array( 'description' => __( 'Current instance settings of the widget.' ), 'type' => 'object', ), ), ), ) ); } /** * Checks whether a given request has permission to read widget types. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { return $this->check_read_permission(); } /** * Retrieves the list of all widget types. * * @since 5.8.0 * * @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_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $data = array(); foreach ( $this->get_widgets() as $widget ) { $widget_type = $this->prepare_item_for_response( $widget, $request ); $data[] = $this->prepare_response_for_collection( $widget_type ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a widget type. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $check = $this->check_read_permission(); if ( is_wp_error( $check ) ) { return $check; } $widget_id = $request['id']; $widget_type = $this->get_widget( $widget_id ); if ( is_wp_error( $widget_type ) ) { return $widget_type; } return true; } /** * Checks whether the user can read widget types. * * @since 5.8.0 * * @return true|WP_Error True if the widget type is visible, WP_Error otherwise. */ protected function check_read_permission() { if ( ! current_user_can( 'edit_theme_options' ) ) { return new WP_Error( 'rest_cannot_manage_widgets', __( 'Sorry, you are not allowed to manage widgets on this site.' ), array( 'status' => rest_authorization_required_code(), ) ); } return true; } /** * Gets the details about the requested widget. * * @since 5.8.0 * * @param string $id The widget type id. * @return array|WP_Error The array of widget data if the name is valid, WP_Error otherwise. */ public function get_widget( $id ) { foreach ( $this->get_widgets() as $widget ) { if ( $id === $widget['id'] ) { return $widget; } } return new WP_Error( 'rest_widget_type_invalid', __( 'Invalid widget type.' ), array( 'status' => 404 ) ); } /** * Normalize array of widgets. * * @since 5.8.0 * * @global WP_Widget_Factory $wp_widget_factory * @global array $wp_registered_widgets The list of registered widgets. * * @return array Array of widgets. */ protected function get_widgets() { global $wp_widget_factory, $wp_registered_widgets; $widgets = array(); foreach ( $wp_registered_widgets as $widget ) { $parsed_id = wp_parse_widget_id( $widget['id'] ); $widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] ); $widget['id'] = $parsed_id['id_base']; $widget['is_multi'] = (bool) $widget_object; if ( isset( $widget['name'] ) ) { $widget['name'] = html_entity_decode( $widget['name'], ENT_QUOTES, get_bloginfo( 'charset' ) ); } if ( isset( $widget['description'] ) ) { $widget['description'] = html_entity_decode( $widget['description'], ENT_QUOTES, get_bloginfo( 'charset' ) ); } unset( $widget['callback'] ); $classname = ''; foreach ( (array) $widget['classname'] as $cn ) { if ( is_string( $cn ) ) { $classname .= '_' . $cn; } elseif ( is_object( $cn ) ) { $classname .= '_' . get_class( $cn ); } } $widget['classname'] = ltrim( $classname, '_' ); $widgets[ $widget['id'] ] = $widget; } ksort( $widgets ); return $widgets; } /** * Retrieves a single widget type from the collection. * * @since 5.8.0 * * @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_item( $request ) { $widget_id = $request['id']; $widget_type = $this->get_widget( $widget_id ); if ( is_wp_error( $widget_type ) ) { return $widget_type; } $data = $this->prepare_item_for_response( $widget_type, $request ); return rest_ensure_response( $data ); } /** * Prepares a widget type object for serialization. * * @since 5.8.0 * @since 5.9.0 Renamed `$widget_type` to `$item` to match parent class for PHP 8 named parameter support. * * @param array $item Widget type data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Widget type data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $widget_type = $item; // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php */ return apply_filters( 'rest_prepare_widget_type', new WP_REST_Response( array() ), $widget_type, $request ); } $fields = $this->get_fields_for_response( $request ); $data = array( 'id' => $widget_type['id'], ); $schema = $this->get_item_schema(); $extra_fields = array( 'name', 'description', 'is_multi', 'classname', 'widget_class', 'option_name', 'customize_selective_refresh', ); foreach ( $extra_fields as $extra_field ) { if ( ! rest_is_field_included( $extra_field, $fields ) ) { continue; } if ( isset( $widget_type[ $extra_field ] ) ) { $field = $widget_type[ $extra_field ]; } elseif ( array_key_exists( 'default', $schema['properties'][ $extra_field ] ) ) { $field = $schema['properties'][ $extra_field ]['default']; } else { $field = ''; } $data[ $extra_field ] = rest_sanitize_value_from_schema( $field, $schema['properties'][ $extra_field ] ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $widget_type ) ); } /** * Filters the REST API response for a widget type. * * @since 5.8.0 * * @param WP_REST_Response $response The response object. * @param array $widget_type The array of widget data. * @param WP_REST_Request $request The request object. */ return apply_filters( 'rest_prepare_widget_type', $response, $widget_type, $request ); } /** * Prepares links for the widget type. * * @since 5.8.0 * * @param array $widget_type Widget type data. * @return array Links for the given widget type. */ protected function prepare_links( $widget_type ) { return array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'self' => array( 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $widget_type['id'] ) ), ), ); } /** * Retrieves the widget type's schema, conforming to JSON Schema. * * @since 5.8.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'widget-type', 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'Unique slug identifying the widget type.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'Human-readable name identifying the widget type.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'Description of the widget.' ), 'type' => 'string', 'default' => '', 'context' => array( 'view', 'edit', 'embed' ), ), 'is_multi' => array( 'description' => __( 'Whether the widget supports multiple instances' ), 'type' => 'boolean', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'classname' => array( 'description' => __( 'Class name' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * An RPC-style endpoint which can be used by clients to turn user input in * a widget admin form into an encoded instance object. * * Accepts: * * - id: A widget type ID. * - instance: A widget's encoded instance object. Optional. * - form_data: Form data from submitting a widget's admin form. Optional. * * Returns: * - instance: The encoded instance object after updating the widget with * the given form data. * - form: The widget's admin form after updating the widget with the * given form data. * * @since 5.8.0 * * @global WP_Widget_Factory $wp_widget_factory * * @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 encode_form_data( $request ) { global $wp_widget_factory; $id = $request['id']; $widget_object = $wp_widget_factory->get_widget_object( $id ); if ( ! $widget_object ) { return new WP_Error( 'rest_invalid_widget', __( 'Cannot preview a widget that does not extend WP_Widget.' ), array( 'status' => 400 ) ); } /* * Set the widget's number so that the id attributes in the HTML that we * return are predictable. */ if ( isset( $request['number'] ) && is_numeric( $request['number'] ) ) { $widget_object->_set( (int) $request['number'] ); } else { $widget_object->_set( -1 ); } if ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) { $serialized_instance = base64_decode( $request['instance']['encoded'] ); if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) { return new WP_Error( 'rest_invalid_widget', __( 'The provided instance is malformed.' ), array( 'status' => 400 ) ); } $instance = unserialize( $serialized_instance ); } else { $instance = array(); } if ( isset( $request['form_data'][ "widget-$id" ] ) && is_array( $request['form_data'][ "widget-$id" ] ) ) { $new_instance = array_values( $request['form_data'][ "widget-$id" ] )[0]; $old_instance = $instance; $instance = $widget_object->update( $new_instance, $old_instance ); /** This filter is documented in wp-includes/class-wp-widget.php */ $instance = apply_filters( 'widget_update_callback', $instance, $new_instance, $old_instance, $widget_object ); } $serialized_instance = serialize( $instance ); $widget_key = $wp_widget_factory->get_widget_key( $id ); $response = array( 'form' => trim( $this->get_widget_form( $widget_object, $instance ) ), 'preview' => trim( $this->get_widget_preview( $widget_key, $instance ) ), 'instance' => array( 'encoded' => base64_encode( $serialized_instance ), 'hash' => wp_hash( $serialized_instance ), ), ); if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) { // Use new stdClass so that JSON result is {} and not []. $response['instance']['raw'] = empty( $instance ) ? new stdClass() : $instance; } return rest_ensure_response( $response ); } /** * Returns the output of WP_Widget::widget() when called with the provided * instance. Used by encode_form_data() to preview a widget. * @since 5.8.0 * * @param string $widget The widget's PHP class name (see class-wp-widget.php). * @param array $instance Widget instance settings. * @return string */ private function get_widget_preview( $widget, $instance ) { ob_start(); the_widget( $widget, $instance ); return ob_get_clean(); } /** * Returns the output of WP_Widget::form() when called with the provided * instance. Used by encode_form_data() to preview a widget's form. * * @since 5.8.0 * * @param WP_Widget $widget_object Widget object to call widget() on. * @param array $instance Widget instance settings. * @return string */ private function get_widget_form( $widget_object, $instance ) { ob_start(); /** This filter is documented in wp-includes/class-wp-widget.php */ $instance = apply_filters( 'widget_form_callback', $instance, $widget_object ); if ( false !== $instance ) { $return = $widget_object->form( $instance ); /** This filter is documented in wp-includes/class-wp-widget.php */ do_action_ref_array( 'in_widget_form', array( &$widget_object, &$return, $instance ) ); } return ob_get_clean(); } /** * Renders a single Legacy Widget and wraps it in a JSON-encodable array. * * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. * * @return array An array with rendered Legacy Widget HTML. */ public function render( $request ) { return array( 'preview' => $this->render_legacy_widget_preview_iframe( $request['id'], isset( $request['instance'] ) ? $request['instance'] : null ), ); } /** * Renders a page containing a preview of the requested Legacy Widget block. * * @since 5.9.0 * * @param string $id_base The id base of the requested widget. * @param array $instance The widget instance attributes. * * @return string Rendered Legacy Widget block preview. */ private function render_legacy_widget_preview_iframe( $id_base, $instance ) { if ( ! defined( 'IFRAME_REQUEST' ) ) { define( 'IFRAME_REQUEST', true ); } ob_start(); ?> > >
get_registered( 'core/legacy-widget' ); echo $block->render( array( 'idBase' => $id_base, 'instance' => $instance, ) ); ?>
$this->get_context_param( array( 'default' => 'view' ) ), ); } } PKU![H?H?/endpoints/class-wp-rest-sidebars-controller.phpnu[namespace = 'wp/v2'; $this->rest_base = 'sidebars'; } /** * Registers the controllers routes. * * @since 5.8.0 */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'id' => array( 'description' => __( 'The id of a registered sidebar' ), 'type' => 'string', ), 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_item' ), 'permission_callback' => array( $this, 'update_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks if a given request has access to get sidebars. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { $this->retrieve_widgets(); foreach ( wp_get_sidebars_widgets() as $id => $widgets ) { $sidebar = $this->get_sidebar( $id ); if ( ! $sidebar ) { continue; } if ( $this->check_read_permission( $sidebar ) ) { return true; } } return $this->do_permissions_check(); } /** * Retrieves the list of sidebars (active or inactive). * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object on success. */ public function get_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $this->retrieve_widgets(); $data = array(); $permissions_check = $this->do_permissions_check(); foreach ( wp_get_sidebars_widgets() as $id => $widgets ) { $sidebar = $this->get_sidebar( $id ); if ( ! $sidebar ) { continue; } if ( is_wp_error( $permissions_check ) && ! $this->check_read_permission( $sidebar ) ) { continue; } $data[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $sidebar, $request ) ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to get a single sidebar. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $this->retrieve_widgets(); $sidebar = $this->get_sidebar( $request['id'] ); if ( $sidebar && $this->check_read_permission( $sidebar ) ) { return true; } return $this->do_permissions_check(); } /** * Checks if a sidebar can be read publicly. * * @since 5.9.0 * * @param array $sidebar The registered sidebar configuration. * @return bool Whether the side can be read. */ protected function check_read_permission( $sidebar ) { return ! empty( $sidebar['show_in_rest'] ); } /** * Retrieves one sidebar from the collection. * * @since 5.8.0 * * @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_item( $request ) { $this->retrieve_widgets(); $sidebar = $this->get_sidebar( $request['id'] ); if ( ! $sidebar ) { return new WP_Error( 'rest_sidebar_not_found', __( 'No sidebar exists with that id.' ), array( 'status' => 404 ) ); } return $this->prepare_item_for_response( $sidebar, $request ); } /** * Checks if a given request has access to update sidebars. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function update_item_permissions_check( $request ) { return $this->do_permissions_check(); } /** * Updates a sidebar. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object on success, or WP_Error object on failure. */ public function update_item( $request ) { if ( isset( $request['widgets'] ) ) { $sidebars = wp_get_sidebars_widgets(); foreach ( $sidebars as $sidebar_id => $widgets ) { foreach ( $widgets as $i => $widget_id ) { // This automatically removes the passed widget IDs from any other sidebars in use. if ( $sidebar_id !== $request['id'] && in_array( $widget_id, $request['widgets'], true ) ) { unset( $sidebars[ $sidebar_id ][ $i ] ); } // This automatically removes omitted widget IDs to the inactive sidebar. if ( $sidebar_id === $request['id'] && ! in_array( $widget_id, $request['widgets'], true ) ) { $sidebars['wp_inactive_widgets'][] = $widget_id; } } } $sidebars[ $request['id'] ] = $request['widgets']; wp_set_sidebars_widgets( $sidebars ); } $request['context'] = 'edit'; $sidebar = $this->get_sidebar( $request['id'] ); /** * Fires after a sidebar is updated via the REST API. * * @since 5.8.0 * * @param array $sidebar The updated sidebar. * @param WP_REST_Request $request Request object. */ do_action( 'rest_save_sidebar', $sidebar, $request ); return $this->prepare_item_for_response( $sidebar, $request ); } /** * Checks if the user has permissions to make the request. * * @since 5.8.0 * * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ protected function do_permissions_check() { /* * Verify if the current user has edit_theme_options capability. * This capability is required to access the widgets screen. */ if ( ! current_user_can( 'edit_theme_options' ) ) { return new WP_Error( 'rest_cannot_manage_widgets', __( 'Sorry, you are not allowed to manage widgets on this site.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves the registered sidebar with the given id. * * @since 5.8.0 * * @param string|int $id ID of the sidebar. * @return array|null The discovered sidebar, or null if it is not registered. */ protected function get_sidebar( $id ) { return wp_get_sidebar( $id ); } /** * Looks for "lost" widgets once per request. * * @since 5.9.0 * * @see retrieve_widgets() */ protected function retrieve_widgets() { if ( ! $this->widgets_retrieved ) { retrieve_widgets(); $this->widgets_retrieved = true; } } /** * Prepares a single sidebar output for response. * * @since 5.8.0 * @since 5.9.0 Renamed `$raw_sidebar` to `$item` to match parent class for PHP 8 named parameter support. * * @global array $wp_registered_sidebars The registered sidebars. * @global array $wp_registered_widgets The registered widgets. * * @param array $item Sidebar instance. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Prepared response object. */ public function prepare_item_for_response( $item, $request ) { global $wp_registered_sidebars, $wp_registered_widgets; // Restores the more descriptive, specific name for use within this method. $raw_sidebar = $item; // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php */ return apply_filters( 'rest_prepare_sidebar', new WP_REST_Response( array() ), $raw_sidebar, $request ); } $id = $raw_sidebar['id']; $sidebar = array( 'id' => $id ); if ( isset( $wp_registered_sidebars[ $id ] ) ) { $registered_sidebar = $wp_registered_sidebars[ $id ]; $sidebar['status'] = 'active'; $sidebar['name'] = isset( $registered_sidebar['name'] ) ? $registered_sidebar['name'] : ''; $sidebar['description'] = isset( $registered_sidebar['description'] ) ? wp_sidebar_description( $id ) : ''; $sidebar['class'] = isset( $registered_sidebar['class'] ) ? $registered_sidebar['class'] : ''; $sidebar['before_widget'] = isset( $registered_sidebar['before_widget'] ) ? $registered_sidebar['before_widget'] : ''; $sidebar['after_widget'] = isset( $registered_sidebar['after_widget'] ) ? $registered_sidebar['after_widget'] : ''; $sidebar['before_title'] = isset( $registered_sidebar['before_title'] ) ? $registered_sidebar['before_title'] : ''; $sidebar['after_title'] = isset( $registered_sidebar['after_title'] ) ? $registered_sidebar['after_title'] : ''; } else { $sidebar['status'] = 'inactive'; $sidebar['name'] = $raw_sidebar['name']; $sidebar['description'] = ''; $sidebar['class'] = ''; } if ( wp_is_block_theme() ) { $sidebar['status'] = 'inactive'; } $fields = $this->get_fields_for_response( $request ); if ( rest_is_field_included( 'widgets', $fields ) ) { $sidebars = wp_get_sidebars_widgets(); $widgets = array_filter( isset( $sidebars[ $sidebar['id'] ] ) ? $sidebars[ $sidebar['id'] ] : array(), static function ( $widget_id ) use ( $wp_registered_widgets ) { return isset( $wp_registered_widgets[ $widget_id ] ); } ); $sidebar['widgets'] = array_values( $widgets ); } $schema = $this->get_item_schema(); $data = array(); foreach ( $schema['properties'] as $property_id => $property ) { if ( isset( $sidebar[ $property_id ] ) && true === rest_validate_value_from_schema( $sidebar[ $property_id ], $property ) ) { $data[ $property_id ] = $sidebar[ $property_id ]; } elseif ( isset( $property['default'] ) ) { $data[ $property_id ] = $property['default']; } } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $sidebar ) ); } /** * Filters the REST API response for a sidebar. * * @since 5.8.0 * * @param WP_REST_Response $response The response object. * @param array $raw_sidebar The raw sidebar data. * @param WP_REST_Request $request The request object. */ return apply_filters( 'rest_prepare_sidebar', $response, $raw_sidebar, $request ); } /** * Prepares links for the sidebar. * * @since 5.8.0 * * @param array $sidebar Sidebar. * @return array Links for the given widget. */ protected function prepare_links( $sidebar ) { return array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'self' => array( 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $sidebar['id'] ) ), ), 'https://api.w.org/widget' => array( 'href' => add_query_arg( 'sidebar', $sidebar['id'], rest_url( '/wp/v2/widgets' ) ), 'embeddable' => true, ), ); } /** * Retrieves the block type' schema, conforming to JSON Schema. * * @since 5.8.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'sidebar', 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'ID of sidebar.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'Unique name identifying the sidebar.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'Description of sidebar.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'class' => array( 'description' => __( 'Extra CSS class to assign to the sidebar in the Widgets interface.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'before_widget' => array( 'description' => __( 'HTML content to prepend to each widget\'s HTML output when assigned to this sidebar. Default is an opening list item element.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'after_widget' => array( 'description' => __( 'HTML content to append to each widget\'s HTML output when assigned to this sidebar. Default is a closing list item element.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'before_title' => array( 'description' => __( 'HTML content to prepend to the sidebar title when displayed. Default is an opening h2 element.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'after_title' => array( 'description' => __( 'HTML content to append to the sidebar title when displayed. Default is a closing h2 element.' ), 'type' => 'string', 'default' => '', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'status' => array( 'description' => __( 'Status of sidebar.' ), 'type' => 'string', 'enum' => array( 'active', 'inactive' ), 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), 'widgets' => array( 'description' => __( 'Nested widgets.' ), 'type' => 'array', 'items' => array( 'type' => array( 'object', 'string' ), ), 'default' => array(), 'context' => array( 'embed', 'view', 'edit' ), ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } } PKU![x||endpoints/error_lognu[[18-May-2025 04:44:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [18-May-2025 06:02:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [18-May-2025 06:02:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [18-May-2025 06:03:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [18-May-2025 06:03:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [18-May-2025 06:03:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [18-May-2025 06:03:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [18-May-2025 06:04:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [18-May-2025 07:10:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [18-May-2025 07:11:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [18-May-2025 09:30:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [18-May-2025 09:30:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [18-May-2025 09:31:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [18-May-2025 09:31:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [18-May-2025 09:31:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [18-May-2025 09:31:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [18-May-2025 09:32:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [18-May-2025 09:32:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [18-May-2025 09:32:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [18-May-2025 09:32:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [18-May-2025 09:33:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [18-May-2025 09:33:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [18-May-2025 09:33:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [18-May-2025 09:33:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [18-May-2025 10:01:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [18-May-2025 10:01:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [18-May-2025 10:02:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [18-May-2025 10:37:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [18-May-2025 10:37:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [18-May-2025 10:38:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [18-May-2025 10:38:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [18-May-2025 10:38:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [18-May-2025 10:39:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [18-May-2025 10:39:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [18-May-2025 10:52:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [18-May-2025 10:52:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [18-May-2025 10:52:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [18-May-2025 10:53:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [18-May-2025 11:13:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [18-May-2025 11:13:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [19-May-2025 06:40:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [19-May-2025 06:51:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [19-May-2025 07:00:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [19-May-2025 07:03:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [19-May-2025 07:28:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [19-May-2025 07:40:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [19-May-2025 07:46:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [19-May-2025 07:50:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [19-May-2025 07:57:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [19-May-2025 08:11:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [19-May-2025 08:23:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [19-May-2025 08:39:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [19-May-2025 09:54:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [19-May-2025 10:36:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [19-May-2025 10:42:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [19-May-2025 10:45:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [19-May-2025 11:17:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [19-May-2025 12:25:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [19-May-2025 12:51:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [19-May-2025 12:57:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [19-May-2025 13:05:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [19-May-2025 13:36:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [19-May-2025 13:49:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [19-May-2025 14:07:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [19-May-2025 14:41:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [19-May-2025 14:54:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [19-May-2025 14:58:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [19-May-2025 15:04:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [19-May-2025 15:04:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [19-May-2025 15:23:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [19-May-2025 15:27:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [19-May-2025 15:27:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [19-May-2025 15:31:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [19-May-2025 16:06:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [19-May-2025 17:11:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [19-May-2025 17:15:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [19-May-2025 18:00:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [19-May-2025 18:10:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [19-May-2025 18:12:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [19-May-2025 19:08:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [04-Jun-2025 23:03:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [05-Jun-2025 00:59:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [05-Jun-2025 00:59:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [05-Jun-2025 00:59:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [05-Jun-2025 01:00:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [05-Jun-2025 01:00:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [05-Jun-2025 01:00:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [05-Jun-2025 01:00:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [05-Jun-2025 02:15:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [05-Jun-2025 02:16:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [05-Jun-2025 04:44:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [05-Jun-2025 04:44:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [05-Jun-2025 04:45:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [05-Jun-2025 04:45:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [05-Jun-2025 04:45:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [05-Jun-2025 04:45:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [05-Jun-2025 04:46:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [05-Jun-2025 04:46:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [05-Jun-2025 04:46:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [05-Jun-2025 04:46:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [05-Jun-2025 04:47:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [05-Jun-2025 04:47:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [05-Jun-2025 04:47:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [05-Jun-2025 04:47:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [05-Jun-2025 05:20:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [05-Jun-2025 05:20:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [05-Jun-2025 05:20:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [05-Jun-2025 05:57:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [05-Jun-2025 05:57:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [05-Jun-2025 05:57:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [05-Jun-2025 05:57:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [05-Jun-2025 05:58:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [05-Jun-2025 05:58:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [05-Jun-2025 05:58:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [05-Jun-2025 06:14:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [05-Jun-2025 06:14:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [05-Jun-2025 06:14:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [05-Jun-2025 06:15:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [05-Jun-2025 07:16:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [05-Jun-2025 07:16:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [10-Jun-2025 23:02:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [10-Jun-2025 23:54:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [11-Jun-2025 05:30:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [11-Jun-2025 06:19:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [11-Jun-2025 06:59:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [11-Jun-2025 08:26:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [11-Jun-2025 10:40:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [11-Jun-2025 12:08:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [11-Jun-2025 12:52:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [11-Jun-2025 16:29:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [11-Jun-2025 17:58:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [11-Jun-2025 17:58:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [11-Jun-2025 21:37:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [12-Jun-2025 00:30:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [12-Jun-2025 02:42:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [12-Jun-2025 02:42:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [12-Jun-2025 03:26:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [12-Jun-2025 05:36:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [12-Jun-2025 21:09:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [12-Jun-2025 21:09:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [12-Jun-2025 21:44:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [12-Jun-2025 21:44:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [13-Jun-2025 00:13:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [13-Jun-2025 00:57:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [13-Jun-2025 00:57:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [13-Jun-2025 01:37:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [14-Jun-2025 02:49:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [14-Jun-2025 04:35:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [15-Jun-2025 14:16:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [15-Jun-2025 21:47:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [16-Jun-2025 00:04:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [16-Jun-2025 07:05:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [16-Jun-2025 13:44:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [17-Jun-2025 02:35:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [17-Jun-2025 02:35:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [17-Jun-2025 06:39:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [19-Jun-2025 06:08:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [19-Jun-2025 17:31:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [19-Jun-2025 20:13:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [19-Jun-2025 21:50:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [20-Jun-2025 02:10:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [23-Jun-2025 13:22:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [23-Jun-2025 14:16:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [28-Jun-2025 07:10:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [28-Jun-2025 08:52:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [28-Jun-2025 08:52:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [28-Jun-2025 08:53:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [28-Jun-2025 08:53:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [28-Jun-2025 08:53:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [28-Jun-2025 08:53:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [28-Jun-2025 08:54:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [28-Jun-2025 10:30:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [28-Jun-2025 10:31:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [28-Jun-2025 13:23:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [28-Jun-2025 13:23:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [28-Jun-2025 13:23:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [28-Jun-2025 13:24:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [28-Jun-2025 13:24:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [28-Jun-2025 13:24:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [28-Jun-2025 13:24:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [28-Jun-2025 13:25:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [28-Jun-2025 13:25:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [28-Jun-2025 13:25:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [28-Jun-2025 13:25:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [28-Jun-2025 13:26:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [28-Jun-2025 13:26:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [28-Jun-2025 13:26:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [28-Jun-2025 14:21:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [28-Jun-2025 14:22:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [28-Jun-2025 14:22:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [28-Jun-2025 15:22:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [28-Jun-2025 15:23:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [28-Jun-2025 15:23:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [28-Jun-2025 15:23:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [28-Jun-2025 15:24:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [28-Jun-2025 15:24:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [28-Jun-2025 15:24:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [28-Jun-2025 15:49:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [28-Jun-2025 15:50:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [28-Jun-2025 15:50:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [28-Jun-2025 15:50:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [28-Jun-2025 16:31:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [28-Jun-2025 16:31:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [11-Jul-2025 09:54:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [11-Jul-2025 10:10:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [11-Jul-2025 10:10:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [11-Jul-2025 10:10:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [11-Jul-2025 10:10:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [11-Jul-2025 10:11:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [11-Jul-2025 10:11:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [11-Jul-2025 10:11:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [11-Jul-2025 10:17:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [11-Jul-2025 10:18:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [11-Jul-2025 10:24:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [11-Jul-2025 10:25:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [11-Jul-2025 10:25:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [11-Jul-2025 10:25:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [11-Jul-2025 10:25:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [11-Jul-2025 10:26:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [11-Jul-2025 10:26:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [11-Jul-2025 10:26:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [11-Jul-2025 10:26:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [11-Jul-2025 10:27:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [11-Jul-2025 10:27:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [11-Jul-2025 10:27:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [11-Jul-2025 10:27:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [11-Jul-2025 10:28:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [11-Jul-2025 10:36:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [11-Jul-2025 10:36:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [11-Jul-2025 10:36:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [11-Jul-2025 10:41:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [11-Jul-2025 10:41:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [11-Jul-2025 10:41:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [11-Jul-2025 10:41:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [11-Jul-2025 10:42:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [11-Jul-2025 10:42:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [11-Jul-2025 10:42:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [11-Jul-2025 10:46:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [11-Jul-2025 10:46:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [11-Jul-2025 10:47:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [11-Jul-2025 10:47:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [11-Jul-2025 10:53:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [11-Jul-2025 10:53:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [17-Aug-2025 19:30:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [17-Aug-2025 19:31:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [17-Aug-2025 19:35:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [17-Aug-2025 19:36:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [17-Aug-2025 20:00:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [17-Aug-2025 20:03:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [17-Aug-2025 20:06:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [17-Aug-2025 20:07:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [17-Aug-2025 20:12:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [17-Aug-2025 20:13:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [17-Aug-2025 20:14:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [17-Aug-2025 21:17:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [17-Aug-2025 21:21:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [17-Aug-2025 21:25:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [17-Aug-2025 21:26:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [17-Aug-2025 21:27:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [17-Aug-2025 21:28:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [17-Aug-2025 21:29:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [17-Aug-2025 21:32:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [17-Aug-2025 21:35:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [17-Aug-2025 21:37:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [17-Aug-2025 21:38:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [17-Aug-2025 21:40:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [17-Aug-2025 21:41:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [17-Aug-2025 21:43:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [17-Aug-2025 21:45:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [17-Aug-2025 21:46:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [17-Aug-2025 21:51:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [17-Aug-2025 21:53:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [17-Aug-2025 21:54:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [17-Aug-2025 21:56:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [17-Aug-2025 21:58:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [17-Aug-2025 21:59:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [17-Aug-2025 22:03:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [17-Aug-2025 22:05:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [17-Aug-2025 22:06:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [17-Aug-2025 22:09:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [17-Aug-2025 22:13:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [17-Aug-2025 22:18:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [17-Aug-2025 23:17:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [18-Aug-2025 05:13:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [18-Aug-2025 05:13:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [18-Aug-2025 05:13:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [18-Aug-2025 05:17:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [18-Aug-2025 05:18:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [18-Aug-2025 05:19:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [18-Aug-2025 05:20:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [18-Aug-2025 05:21:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [18-Aug-2025 05:22:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [18-Aug-2025 05:23:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [18-Aug-2025 05:24:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [18-Aug-2025 05:25:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [18-Aug-2025 05:26:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [18-Aug-2025 05:27:54 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [18-Aug-2025 05:28:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [18-Aug-2025 05:30:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [18-Aug-2025 05:31:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [18-Aug-2025 05:32:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [18-Aug-2025 05:33:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [18-Aug-2025 05:34:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [18-Aug-2025 05:35:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [18-Aug-2025 05:36:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [18-Aug-2025 05:37:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [18-Aug-2025 05:38:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [18-Aug-2025 05:39:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [18-Aug-2025 05:40:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [18-Aug-2025 05:41:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [18-Aug-2025 05:42:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [18-Aug-2025 05:43:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [18-Aug-2025 05:44:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [18-Aug-2025 05:45:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [18-Aug-2025 05:47:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [18-Aug-2025 05:48:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [18-Aug-2025 05:49:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [18-Aug-2025 05:50:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [18-Aug-2025 05:51:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [18-Aug-2025 05:52:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [18-Aug-2025 05:53:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [18-Aug-2025 05:56:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [18-Aug-2025 05:57:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [18-Aug-2025 05:59:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [18-Aug-2025 06:00:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [18-Aug-2025 06:01:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [18-Aug-2025 06:03:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [18-Aug-2025 06:04:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [18-Aug-2025 06:05:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [18-Aug-2025 06:06:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [18-Aug-2025 06:07:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [18-Aug-2025 06:10:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [18-Aug-2025 06:11:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [18-Aug-2025 06:12:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [18-Aug-2025 06:13:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [18-Aug-2025 06:14:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [18-Aug-2025 06:15:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [18-Aug-2025 06:16:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [18-Aug-2025 06:17:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [18-Aug-2025 06:18:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [18-Aug-2025 06:19:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [18-Aug-2025 06:20:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [18-Aug-2025 06:21:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [18-Aug-2025 06:22:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [18-Aug-2025 06:24:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [18-Aug-2025 06:25:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [18-Aug-2025 06:26:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [18-Aug-2025 06:27:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [18-Aug-2025 06:28:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [18-Aug-2025 06:29:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [18-Aug-2025 06:30:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [18-Aug-2025 06:31:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [18-Aug-2025 06:32:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [18-Aug-2025 06:33:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [18-Aug-2025 06:34:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [18-Aug-2025 06:35:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [18-Aug-2025 06:36:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [18-Aug-2025 06:37:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [18-Aug-2025 06:38:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [18-Aug-2025 06:39:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [18-Aug-2025 06:40:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [18-Aug-2025 06:41:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [18-Aug-2025 06:42:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [18-Aug-2025 06:43:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [18-Aug-2025 06:47:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [18-Aug-2025 06:50:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [18-Aug-2025 06:52:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [20-Aug-2025 04:20:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [20-Aug-2025 04:20:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [20-Aug-2025 04:21:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [20-Aug-2025 05:07:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [20-Aug-2025 05:07:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [20-Aug-2025 05:42:35 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [20-Aug-2025 06:08:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [20-Aug-2025 06:45:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [20-Aug-2025 06:45:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [20-Aug-2025 07:12:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [20-Aug-2025 08:43:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [20-Aug-2025 08:43:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [20-Aug-2025 08:43:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [20-Aug-2025 09:13:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [20-Aug-2025 09:54:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [20-Aug-2025 09:54:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [20-Aug-2025 10:14:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [20-Aug-2025 10:43:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [20-Aug-2025 10:43:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [20-Aug-2025 10:43:52 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [20-Aug-2025 11:07:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [20-Aug-2025 11:37:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [20-Aug-2025 11:37:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [20-Aug-2025 11:37:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [20-Aug-2025 12:08:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [20-Aug-2025 13:04:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [20-Aug-2025 14:11:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [20-Aug-2025 14:39:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [20-Aug-2025 15:28:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [20-Aug-2025 15:28:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [20-Aug-2025 16:33:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [20-Aug-2025 17:34:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [20-Aug-2025 17:34:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [20-Aug-2025 18:33:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [20-Aug-2025 18:58:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [20-Aug-2025 19:59:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [20-Aug-2025 21:57:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [20-Aug-2025 21:57:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [20-Aug-2025 21:57:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [20-Aug-2025 22:26:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [29-Aug-2025 19:18:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [29-Aug-2025 19:19:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [29-Aug-2025 19:20:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [29-Aug-2025 19:22:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [29-Aug-2025 19:23:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [29-Aug-2025 19:26:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [29-Aug-2025 19:27:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [29-Aug-2025 19:29:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [29-Aug-2025 19:31:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [29-Aug-2025 19:35:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [29-Aug-2025 19:36:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [29-Aug-2025 20:43:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [29-Aug-2025 20:46:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [29-Aug-2025 20:48:06 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [29-Aug-2025 20:49:02 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [29-Aug-2025 20:51:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [29-Aug-2025 20:53:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [29-Aug-2025 20:54:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [29-Aug-2025 20:55:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [29-Aug-2025 20:56:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [29-Aug-2025 20:58:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [29-Aug-2025 21:01:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [29-Aug-2025 21:03:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [29-Aug-2025 21:07:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [29-Aug-2025 21:11:08 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [29-Aug-2025 21:13:04 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [29-Aug-2025 21:14:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [29-Aug-2025 21:16:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [29-Aug-2025 21:17:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [29-Aug-2025 21:18:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [29-Aug-2025 21:24:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [29-Aug-2025 21:27:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [29-Aug-2025 21:30:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [29-Aug-2025 21:34:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [29-Aug-2025 21:34:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [29-Aug-2025 21:37:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [29-Aug-2025 21:52:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [29-Aug-2025 21:55:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [29-Aug-2025 21:56:12 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [29-Aug-2025 23:44:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [30-Aug-2025 05:32:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [30-Aug-2025 05:32:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [30-Aug-2025 05:32:28 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [30-Aug-2025 05:32:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [30-Aug-2025 05:33:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [30-Aug-2025 05:34:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [30-Aug-2025 05:35:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [30-Aug-2025 05:36:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [30-Aug-2025 05:37:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [30-Aug-2025 05:38:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [30-Aug-2025 05:39:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [30-Aug-2025 05:40:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [30-Aug-2025 05:41:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [30-Aug-2025 05:42:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [30-Aug-2025 05:43:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [30-Aug-2025 05:44:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [30-Aug-2025 05:45:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [30-Aug-2025 05:46:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [30-Aug-2025 05:47:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [30-Aug-2025 05:48:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [30-Aug-2025 05:49:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [30-Aug-2025 05:51:03 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [30-Aug-2025 05:52:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [30-Aug-2025 05:53:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [30-Aug-2025 05:54:07 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [30-Aug-2025 05:55:14 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [30-Aug-2025 05:56:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [30-Aug-2025 05:57:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [30-Aug-2025 05:58:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [30-Aug-2025 05:59:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [30-Aug-2025 06:00:22 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 [30-Aug-2025 06:01:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [30-Aug-2025 06:02:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [30-Aug-2025 06:03:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [30-Aug-2025 06:04:33 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [30-Aug-2025 06:05:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [30-Aug-2025 06:06:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [30-Aug-2025 06:07:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [30-Aug-2025 06:08:56 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [30-Aug-2025 06:10:00 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [30-Aug-2025 06:31:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [30-Aug-2025 06:38:17 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17 [30-Aug-2025 06:39:09 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17 [30-Aug-2025 06:40:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17 [30-Aug-2025 06:41:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17 [30-Aug-2025 06:42:15 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17 [30-Aug-2025 06:43:20 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17 [30-Aug-2025 06:44:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17 [30-Aug-2025 06:45:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15 [30-Aug-2025 06:46:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17 [30-Aug-2025 06:47:31 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18 [30-Aug-2025 06:48:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17 [30-Aug-2025 06:49:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17 [30-Aug-2025 06:50:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13 [30-Aug-2025 06:51:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17 [30-Aug-2025 06:52:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17 [30-Aug-2025 06:53:53 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17 [30-Aug-2025 06:54:55 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17 [30-Aug-2025 06:55:57 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17 [30-Aug-2025 06:56:59 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17 [30-Aug-2025 06:58:01 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17 [30-Aug-2025 06:59:05 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17 [30-Aug-2025 07:00:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17 [30-Aug-2025 07:01:11 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13 [30-Aug-2025 07:02:16 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17 [30-Aug-2025 07:03:18 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17 [30-Aug-2025 07:04:21 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20 [30-Aug-2025 07:05:24 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19 [30-Aug-2025 07:06:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17 [30-Aug-2025 07:07:27 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17 [30-Aug-2025 07:08:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17 [30-Aug-2025 07:09:26 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17 [30-Aug-2025 07:10:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17 [30-Aug-2025 07:11:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17 [30-Aug-2025 07:12:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17 [30-Aug-2025 07:14:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17 [30-Aug-2025 07:15:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17 [30-Aug-2025 07:16:41 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18 [30-Aug-2025 07:17:45 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17 [30-Aug-2025 07:20:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20 [30-Aug-2025 07:22:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17 PKU![ᷬ))7endpoints/class-wp-rest-font-collections-controller.phpnu[rest_base = 'font-collections'; $this->namespace = 'wp/v2'; } /** * Registers the routes for the objects of the controller. * * @since 6.5.0 */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\/\w-]+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Gets the font collections available. * * @since 6.5.0 * * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $collections_all = WP_Font_Library::get_instance()->get_font_collections(); $page = $request['page']; $per_page = $request['per_page']; $total_items = count( $collections_all ); $max_pages = (int) ceil( $total_items / $per_page ); if ( $page > $max_pages && $total_items > 0 ) { return new WP_Error( 'rest_post_invalid_page_number', __( 'The page number requested is larger than the number of pages available.' ), array( 'status' => 400 ) ); } $collections_page = array_slice( $collections_all, ( $page - 1 ) * $per_page, $per_page ); $is_head_request = $request->is_method( 'HEAD' ); $items = array(); foreach ( $collections_page as $collection ) { $item = $this->prepare_item_for_response( $collection, $request ); // If there's an error loading a collection, skip it and continue loading valid collections. if ( is_wp_error( $item ) ) { continue; } /* * Skip preparing the response body for HEAD requests. * Cannot exit earlier due to backward compatibility reasons, * as validation occurs in the prepare_item_for_response method. */ if ( $is_head_request ) { continue; } $item = $this->prepare_response_for_collection( $item ); $items[] = $item; } $response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $items ); $response->header( 'X-WP-Total', (int) $total_items ); $response->header( 'X-WP-TotalPages', $max_pages ); $request_params = $request->get_query_params(); $collection_url = rest_url( $this->namespace . '/' . $this->rest_base ); $base = add_query_arg( urlencode_deep( $request_params ), $collection_url ); if ( $page > 1 ) { $prev_page = $page - 1; if ( $prev_page > $max_pages ) { $prev_page = $max_pages; } $prev_link = add_query_arg( 'page', $prev_page, $base ); $response->link_header( 'prev', $prev_link ); } if ( $max_pages > $page ) { $next_page = $page + 1; $next_link = add_query_arg( 'page', $next_page, $base ); $response->link_header( 'next', $next_link ); } return $response; } /** * Gets a font collection. * * @since 6.5.0 * * @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_item( $request ) { $slug = $request->get_param( 'slug' ); $collection = WP_Font_Library::get_instance()->get_font_collection( $slug ); if ( ! $collection ) { return new WP_Error( 'rest_font_collection_not_found', __( 'Font collection not found.' ), array( 'status' => 404 ) ); } return $this->prepare_item_for_response( $collection, $request ); } /** * Prepare a single collection output for response. * * @since 6.5.0 * * @param WP_Font_Collection $item Font collection object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function prepare_item_for_response( $item, $request ) { $fields = $this->get_fields_for_response( $request ); $data = array(); if ( rest_is_field_included( 'slug', $fields ) ) { $data['slug'] = $item->slug; } // If any data fields are requested, get the collection data. $data_fields = array( 'name', 'description', 'font_families', 'categories' ); if ( ! empty( array_intersect( $fields, $data_fields ) ) ) { $collection_data = $item->get_data(); if ( is_wp_error( $collection_data ) ) { $collection_data->add_data( array( 'status' => 500 ) ); return $collection_data; } /** * Don't prepare the response body for HEAD requests. * Can't exit at the beginning of the method due to the potential need to return a WP_Error object. */ if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php */ return apply_filters( 'rest_prepare_font_collection', new WP_REST_Response( array() ), $item, $request ); } foreach ( $data_fields as $field ) { if ( rest_is_field_included( $field, $fields ) ) { $data[ $field ] = $collection_data[ $field ]; } } } /** * Don't prepare the response body for HEAD requests. * Can't exit at the beginning of the method due to the potential need to return a WP_Error object. */ if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php */ return apply_filters( 'rest_prepare_font_collection', new WP_REST_Response( array() ), $item, $request ); } $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) ) { $links = $this->prepare_links( $item ); $response->add_links( $links ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $response->data = $this->add_additional_fields_to_object( $response->data, $request ); $response->data = $this->filter_response_by_context( $response->data, $context ); /** * Filters the font collection data for a REST API response. * * @since 6.5.0 * * @param WP_REST_Response $response The response object. * @param WP_Font_Collection $item The font collection object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_font_collection', $response, $item, $request ); } /** * Retrieves the font collection's schema, conforming to JSON Schema. * * @since 6.5.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'font-collection', 'type' => 'object', 'properties' => array( 'slug' => array( 'description' => __( 'Unique identifier for the font collection.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'The name for the font collection.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), ), 'description' => array( 'description' => __( 'The description for the font collection.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), ), 'font_families' => array( 'description' => __( 'The font families for the font collection.' ), 'type' => 'array', 'context' => array( 'view', 'edit', 'embed' ), ), 'categories' => array( 'description' => __( 'The categories for the font collection.' ), 'type' => 'array', 'context' => array( 'view', 'edit', 'embed' ), ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Prepares links for the request. * * @since 6.5.0 * * @param WP_Font_Collection $collection Font collection data * @return array Links for the given font collection. */ protected function prepare_links( $collection ) { return array( 'self' => array( 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $collection->slug ) ), ), 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), ); } /** * Retrieves the search params for the font collections. * * @since 6.5.0 * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['context'] = $this->get_context_param( array( 'default' => 'view' ) ); unset( $query_params['search'] ); /** * Filters REST API collection parameters for the font collections controller. * * @since 6.5.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_font_collections_collection_params', $query_params ); } /** * Checks whether the user has permissions to use the Fonts Collections. * * @since 6.5.0 * * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable if ( current_user_can( 'edit_theme_options' ) ) { return true; } return new WP_Error( 'rest_cannot_read', __( 'Sorry, you are not allowed to access font collections.' ), array( 'status' => rest_authorization_required_code(), ) ); } } PKU![d䙕** error_lognu[[17-May-2025 13:38:10 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [17-May-2025 15:42:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [27-May-2025 16:33:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [04-Jun-2025 09:15:25 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [09-Jun-2025 02:36:29 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [27-Jun-2025 14:51:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [11-Jul-2025 08:46:58 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [01-Aug-2025 14:44:32 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [17-Aug-2025 19:07:13 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [17-Aug-2025 22:38:30 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [17-Aug-2025 22:39:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [19-Aug-2025 13:29:19 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [29-Aug-2025 19:03:23 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [29-Aug-2025 22:20:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 [29-Aug-2025 22:36:51 UTC] PHP Fatal error: Uncaught Error: Class "WP_HTTP_Response" not found in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php:17 Stack trace: #0 {main} thrown in /home/eufvorrv/jigawapost.com.ng/wp-includes/rest-api/class-wp-rest-response.php on line 17 PKSU![class-wp-rest-server.phpnu[PKWU![Hova/load.php.tarnu[PKYU![5ova/class-wp-rest-edit-site-export-controller.php.tarnu[PKYU![ova/block-patterns.tar.gznu[PKZU![.6ova/class-wp-block-parser-frame.php.php.tar.gznu[PK[U![ova/ms-load.php.tarnu[PK\U![ova/version.php.php.tar.gznu[PK]U![!ova/File.php.php.tar.gznu[PK`U![hova/meta.php.tarnu[PK`U![,ova/class.wp-styles.php.wp-styles.php.tar.gznu[PKaU![ova/load.php.php.tar.gznu[PKbU![Kova/block-bindings.tarnu[PKcU![ova/meta.php.php.tar.gznu[PKdU![ova/http.php.tarnu[PKeU![ova/ms-default-filters.php.tarnu[PKeU![fova/images.zipnu[PKfU!['ova/class-wp-block-parser-frame.php.tarnu[PKgU!["ova/template-canvas.php.php.tar.gznu[PKhU![Mova/template-canvas.php.tarnu[PKiU![ova/error_log.tarnu[PKiU![?ova/class-wp-rest-navigation-fallback-controller.php.php.tar.gznu[PKjU!["Hova/class-avif-info.php.php.tar.gznu[PKkU![ova/date.php.php.tar.gznu[PKlU![ova/date.php.tarnu[PKmU![.!ova/class-wp-block-parser-block.php.php.tar.gznu[PKnU![8ova/class-wp-rest-navigation-fallback-controller.php.tarnu[PKnU![ova/Curl.php.php.tar.gznu[PKoU![.ova/http.php.php.tar.gznu[PKpU![uova/Curl.php.tarnu[PKqU![ova/block-editor.php.tarnu[PKrU![ ova/index.phpnu[PKrU![": ova/template-loader.php.php.tar.gznu[PKsU![% ova/class-wp-exception.php.php.tar.gznu[PKtU![ ova/HookManager.php.php.tar.gznu[PKuU![/ ova/Misc.php.php.tar.gznu[PKuU![v ova/block-editor.php.php.tar.gznu[PKvU![ ova/ova.tar.gznu[PKwU![ ova/index.php.php.tar.gznu[PKxU![K ova/images.tar.gznu[PKyU![ ova/PHPMailer.tarnu[PKzU![! ova/class.wp-dependencies.php.tarnu[PK{U![ ova/kses.php.tarnu[PK|U![^ ova/index.php.tarnu[PK}U![ ova/images.tarnu[PK}U![ ova/HookManager.php.tarnu[PKU!["$ ova/default-widgets.php.php.tar.gznu[PKU![v ova/class-avif-info.php.tarnu[PKU![ ova/Misc.php.tarnu[PKU![-ova/class-wp-rest-comments-controller.php.tarnu[PKU![<^ova/class-wp-rest-edit-site-export-controller.php.php.tar.gznu[PKU![ova/kses.php.php.tar.gznu[PKU![ ova/ova.tarnu[PKU![Lova/Cookie.zipnu[PKU![ova/File.php.tarnu[PKU![ova/block-patterns.zipnu[PKU!['ova/class-wp-block-parser-block.php.tarnu[PKU![gova/PHPMailer.tar.gznu[PKU![ova/https-migration.php.tarnu[PKU![ova/ms-load.php.php.tar.gznu[PKU![@ova/error_log.tar.gznu[PKU![ova/Cookie.tarnu[PKU![ova/block-patterns.tarnu[PKU![8ova/class.wp-dependencies.php.wp-dependencies.php.tar.gznu[PKU![pova/PHPMailer.zipnu[PKU![ova/block-bindings.tar.gznu[PKU![$ova/class-wp-rest-controller.php.tarnu[PKU![(Nova/class-wp-dependencies.php.php.tar.gznu[PKU![ova/class.wp-styles.php.tarnu[PKU![ova/Exception.tarnu[PKU![2ova/version.php.tarnu[PKU![2uova/class-wp-rest-font-families-controller.php.tarnu[PKU![!ova/class-wp-dependencies.php.tarnu[PKU!["(ova/https-migration.php.php.tar.gznu[PKU![ zova/css.zipnu[PKU!["ova/class-simplepie.php.php.tar.gznu[PKU![ova/block-bindings.zipnu[PKU![+Mova/class-wp-rest-controller.php.php.tar.gznu[PKU![ova/Cookie.tar.gznu[PKU![ova/template-loader.php.tarnu[PKU![4ova/cron.php.php.tar.gznu[PKU![{ova/class-simplepie.php.tarnu[PKU![ova/default-widgets.php.tarnu[PKU![ ova/error_lognu[PKU![Nova/class-wp-exception.php.tarnu[PKU![9ova/class-wp-rest-font-families-controller.php.php.tar.gznu[PKU![ova/cron.php.tarnu[PKU![Eclass-wp-rest-request.phpnu[PKU![class-wp-rest-response.phpnu[PKU!['search/class-wp-rest-search-handler.phpnu[PKU![,/search/class-wp-rest-post-search-handler.phpnu[PKU![3search/class-wp-rest-post-format-search-handler.phpnu[PKU![,search/class-wp-rest-term-search-handler.phpnu[PKU![Jsearch/error_lognu[PKU![)fields/class-wp-rest-post-meta-fields.phpnu[PKU![)fields/class-wp-rest-term-meta-fields.phpnu[PKU![,<fields/class-wp-rest-comment-meta-fields.phpnu[PKU![)fields/class-wp-rest-user-meta-fields.phpnu[PKU![$fields/class-wp-rest-meta-fields.phpnu[PKU![Efields/error_lognu[PKU![2endpoints/class-wp-rest-url-details-controller.phpnu[PKU![,endpoints/class-wp-rest-posts-controller.phpnu[PKU![-Cendpoints/class-wp-rest-search-controller.phpnu[PKU![5endpoints/class-wp-rest-menu-locations-controller.phpnu[PKU![-endpoints/class-wp-rest-blocks-controller.phpnu[PKU![.bendpoints/class-wp-rest-plugins-controller.phpnu[PKU![/endpoints/class-wp-rest-settings-controller.phpnu[PKU![> endpoints/class-wp-rest-global-styles-revisions-controller.phpnu[PKU![9 endpoints/class-wp-rest-template-autosaves-controller.phpnu[PKU![< endpoints/class-wp-rest-application-passwords-controller.phpnu[PKU![7b!endpoints/class-wp-rest-edit-site-export-controller.phpnu[PKU![.!endpoints/class-wp-rest-widgets-controller.phpnu[PKU![9'"endpoints/class-wp-rest-template-revisions-controller.phpnu[PKU![1"endpoints/class-wp-rest-post-types-controller.phpnu[PKU![,"endpoints/class-wp-rest-menus-controller.phpnu[PKU![0M#endpoints/class-wp-rest-revisions-controller.phpnu[PKU![2#endpoints/class-wp-rest-attachments-controller.phpnu[PKU![:$endpoints/class-wp-rest-navigation-fallback-controller.phpnu[PKU![/y$endpoints/class-wp-rest-comments-controller.phpnu[PKU![4$endpoints/class-wp-rest-global-styles-controller.phpnu[PKU![,<%endpoints/class-wp-rest-terms-controller.phpnu[PKU![?%endpoints/class-wp-rest-block-pattern-categories-controller.phpnu[PKU![5&endpoints/class-wp-rest-block-renderer-controller.phpnu[PKU![-l&endpoints/class-wp-rest-themes-controller.phpnu[PKU![0&endpoints/class-wp-rest-autosaves-controller.phpnu[PKU![5)'endpoints/class-wp-rest-block-patterns-controller.phpnu[PKU![,'endpoints/class-wp-rest-users-controller.phpnu[PKU![1'endpoints/class-wp-rest-taxonomies-controller.phpnu[PKU![1K(endpoints/class-wp-rest-font-faces-controller.phpnu[PKU![hE(E(4(endpoints/class-wp-rest-post-statuses-controller.phpnu[PKU![l&&6UQendpoints/class-wp-rest-block-directory-controller.phpnu[PKU![Tl&l&2xendpoints/class-wp-rest-site-health-controller.phpnu[PKU![/F|J|J&cendpoints/class-wp-rest-controller.phpnu[PKU![Q͍2285endpoints/class-wp-rest-pattern-directory-controller.phpnu[PKU![ [I0*endpoints/class-wp-rest-templates-controller.phpnu[PKU![!Ͱ1)endpoints/class-wp-rest-menu-items-controller.phpnu[PKU![>VjDjD45endpoints/class-wp-rest-font-families-controller.phpnu[PKU![hh2Mzendpoints/class-wp-rest-block-types-controller.phpnu[PKU![!K!K3endpoints/class-wp-rest-widget-types-controller.phpnu[PKU![H?H?/0/endpoints/class-wp-rest-sidebars-controller.phpnu[PKU![x||nendpoints/error_lognu[PKU![ᷬ))7\endpoints/class-wp-rest-font-collections-controller.phpnu[PKU![d䙕** error_lognu[PK6