|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /html/relaunch-kmu/wp-content/plugins/real-cookie-banner/inc/rest/ |
Upload File : |
<?php
namespace DevOwl\RealCookieBanner\rest;
use DevOwl\RealCookieBanner\Vendor\DevOwl\Multilingual\AbstractSyncPlugin;
use DevOwl\RealCookieBanner\Vendor\DevOwl\Multilingual\Sync;
use DevOwl\RealCookieBanner\Vendor\MatthiasWeb\Utils\Service;
use DevOwl\RealCookieBanner\base\UtilsProvider;
use DevOwl\RealCookieBanner\comp\language\Hooks;
use DevOwl\RealCookieBanner\comp\migration\AbstractDashboardTileMigration;
use DevOwl\RealCookieBanner\Core;
use DevOwl\RealCookieBanner\lite\settings\TcfVendorConfiguration;
use DevOwl\RealCookieBanner\settings\Blocker;
use DevOwl\RealCookieBanner\settings\Cookie;
use DevOwl\RealCookieBanner\settings\CookiePolicy;
use DevOwl\RealCookieBanner\settings\CountryBypass;
use DevOwl\RealCookieBanner\settings\General;
use DevOwl\RealCookieBanner\settings\Reset;
use DevOwl\RealCookieBanner\settings\Revision;
use DevOwl\RealCookieBanner\Utils;
use DevOwl\RealCookieBanner\view\Checklist;
use DevOwl\RealCookieBanner\view\ConfigPage;
use DevOwl\RealCookieBanner\view\navmenu\NavMenuLinks;
use DevOwl\RealCookieBanner\view\Notices;
use DevOwl\RealCookieBanner\view\shortcode\CookiePolicyShortcode;
use WP_Error;
use WP_HTTP_Response;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;
use WP_REST_Settings_Controller;
// @codeCoverageIgnoreStart
\defined('ABSPATH') or die('No script kiddies please!');
// Avoid direct file request
// @codeCoverageIgnoreEnd
/**
* Create an config REST API, extending from the official `wp/v2/settings` route to also provide a route
* for all Real Cookie Banner specific settings.
* @internal
*/
class Config extends WP_REST_Settings_Controller
{
use UtilsProvider;
/**
* Register endpoints.
*/
public function rest_api_init()
{
$namespace = Service::getNamespace($this);
$this->namespace = $namespace;
$this->register_routes();
\register_rest_route($namespace, '/checklist', ['methods' => 'GET', 'callback' => [$this, 'routeGetChecklist'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/checklist/(?P<id>[a-zA-Z0-9_-]+)', ['methods' => 'PUT', 'callback' => [$this, 'routePutChecklist'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['state' => ['type' => 'boolean', 'required' => \true]]]);
\register_rest_route($namespace, '/revision/second-view', ['methods' => 'GET', 'callback' => [$this, 'routeGetRevisionSecondView'], 'permission_callback' => '__return_true']);
\register_rest_route($namespace, '/revision/current', ['methods' => 'GET', 'callback' => [$this, 'routeGetRevisionCurrent'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/revision/(?P<hash>[a-zA-Z0-9_-]{32})', ['methods' => 'GET', 'callback' => [$this, 'routeGetRevisionByHash'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['backwardsCompatibility' => ['type' => 'boolean', 'default' => \true]]]);
\register_rest_route($namespace, '/revision/independent/(?P<hash>[a-zA-Z0-9_-]{32})', ['methods' => 'GET', 'callback' => [$this, 'routeGetRevisionIndependentByHash'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['backwardsCompatibility' => ['type' => 'boolean', 'default' => \true]]]);
\register_rest_route($namespace, '/revision/current', ['methods' => 'PUT', 'callback' => [$this, 'routePutRevisionCurrent'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['needs_retrigger' => ['type' => 'boolean', 'default' => \true]]]);
\register_rest_route($namespace, '/cookie-groups/order', ['methods' => 'PUT', 'callback' => [$this, 'routeCookieGroupsOrder'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/cookies/order', ['methods' => 'PUT', 'callback' => [$this, 'routeCookiesOrder'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/cookies/unassigned', ['methods' => 'GET', 'callback' => [$this, 'routeCookiesUnassigned'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/country-bypass/database', ['methods' => 'PUT', 'callback' => [$this, 'routeCountryBypassDownload'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/migration/(?P<migrationId>[a-zA-Z0-9_-]+)/(?P<actionId>[a-zA-Z0-9_-]+)', ['methods' => 'POST', 'callback' => [$this, 'routeMigrationPost'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/migration/(?P<migrationId>[a-zA-Z0-9_-]+)', ['methods' => 'DELETE', 'callback' => [$this, 'routeMigrationDelete'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/nav-menu/add-links', ['methods' => 'POST', 'callback' => [$this, 'routeNavMenuAddLinksPost'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['id' => ['type' => 'string', 'required' => \true]]]);
\register_rest_route($namespace, '/create-cookie-policy', ['methods' => 'POST', 'callback' => [$this, 'routeCreateCookiePolicy'], 'permission_callback' => [$this, 'permission_callback']]);
\register_rest_route($namespace, '/reset-texts/dry', ['methods' => 'GET', 'callback' => [$this, 'routeGetResetTextsDry'], 'permission_callback' => [$this, 'permission_callback']]);
// Make the search capable of embedded content and add the custom post statuses to the search results
if (isset($_GET['_rcbExtendSearchResult'])) {
$post_types = \get_post_types(['show_in_rest' => \true], 'objects');
foreach ($post_types as $post_type) {
\add_filter("rest_{$post_type->name}_item_schema", [$this, 'filter_rest_post_type_item_schema']);
\add_filter("rest_prepare_{$post_type->name}", [$this, 'filter_rest_prepare_post'], 10, 3);
}
\add_filter('rest_post_collection_params', [$this, 'filter_rest_post_collection_params'], 10, 2);
\add_filter('rest_post_search_query', [$this, 'filter_rest_post_search_query'], 10, 2);
}
}
/**
* Check if user is allowed to call this service requests.
*/
public function permission_callback()
{
return \current_user_can(Core::MANAGE_MIN_CAPABILITY);
}
/**
* See API docs.
*
* @api {get} /real-cookie-banner/v1/checklist Get all checklist items with their state
* @apiHeader {string} X-WP-Nonce
* @apiName ChecklistGet
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetChecklist()
{
return new WP_REST_Response(\array_merge(Checklist::getInstance()->result(), ['overdue' => Checklist::getInstance()->isOverdue(ConfigPage::CHECKLIST_OVERDUE)]));
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {put} /real-cookie-banner/v1/checklist/:id Mark a checklist item as checked / unchecked
* @apiHeader {string} X-WP-Nonce
* @apiHeader {boolean} state
* @apiName ChecklistPut
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routePutChecklist($request)
{
Checklist::getInstance()->toggle($request->get_param('id'), $request->get_param('state'));
return new WP_REST_Response(\array_merge(Checklist::getInstance()->result(), ['overdue' => Checklist::getInstance()->isOverdue(ConfigPage::CHECKLIST_OVERDUE)]));
}
/**
* See API docs.
*
* @api {get} /real-cookie-banner/v1/revision/second-view Get the current lazy loadable data for the second view
* @apiName RevisionSecondView
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetRevisionSecondView()
{
$frontend = Core::getInstance()->getCookieConsentManagement()->getFrontend();
$output = $frontend->toJson();
return new WP_REST_Response($frontend->prepareLazyData($output));
}
/**
* See API docs.
*
* @api {get} /real-cookie-banner/v1/revision/current Get the current revision hash
* @apiHeader {string} X-WP-Nonce
* @apiName RevisionCurrent
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetRevisionCurrent()
{
$current = Revision::getInstance()->getCurrent();
return new WP_REST_Response(\array_merge(['needs_retrigger' => Revision::getInstance()->needsRetrigger($current)], $current));
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @since 1.3.0
* @api {get} /real-cookie-banner/v1/revision/:hash Get the revision by hash
* @apiHeader {string} X-WP-Nonce
* @apiParam {boolean} [backwardsCompatibility=true]
* @apiName RevisionByHash
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetRevisionByHash($request)
{
$result = Revision::getInstance()->getByHash($request->get_param('hash'), \false, $request->get_param('backwardsCompatibility'));
return $result === null ? new WP_Error('rest_not_found', null, ['status' => 404]) : new WP_REST_Response(Core::getInstance()->getCookieConsentManagement()->getRevision()->prepareJsonForFrontend($result));
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @since 1.3.0
* @api {get} /real-cookie-banner/v1/revision/independent/:hash Get the independent revision by hash
* @apiHeader {string} X-WP-Nonce
* @apiParam {boolean} [backwardsCompatibility=true]
* @apiName RevisionIndependentByHash
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetRevisionIndependentByHash($request)
{
$result = Revision::getInstance()->getByHash($request->get_param('hash'), \true, $request->get_param('backwardsCompatibility'));
return $result === null ? new WP_Error('rest_not_found', null, ['status' => 404]) : new WP_REST_Response(Core::getInstance()->getCookieConsentManagement()->getRevision()->prepareJsonForFrontend($result));
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {put} /real-cookie-banner/v1/revision/current Update current revision hash from the latest settings
* @apiHeader {string} X-WP-Nonce
* @apiName RevisionCurrentPut
* @apiParam {boolean} [needs_retrigger=true] If you do not want to collect new consents for the current revision, pass `false`
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routePutRevisionCurrent($request)
{
$revision = Revision::getInstance();
$needsRetrigger = $request->get_param('needs_retrigger');
if (!$needsRetrigger) {
Core::getInstance()->getNotices()->getStates()->set(Notices::NOTICE_REVISON_REQUEST_NEW_CONSENT_PREFIX . $revision->getContextVariablesString(), $revision->getCurrent()['calculated']);
}
$current = $revision->getCurrent($needsRetrigger ? 'force' : \false);
return new WP_REST_Response(\array_merge(['needs_retrigger' => $revision->needsRetrigger($current)], $current));
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {put} /real-cookie-banner/v1/cookie-groups/order Order the cookie groups
* @apiHeader {string} X-WP-Nonce
* @apiParam {number[]} ids
* @apiName CookieGroupsOrder
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeCookieGroupsOrder($request)
{
// Get ids array
$ids = $request->get_param('ids');
if (!isset($ids) || !\is_array($ids) || empty($ids)) {
return new WP_Error('rest_rcb_wrong_ids');
}
$ids = \array_map('absint', $ids);
// Persist
foreach ($ids as $index => $id) {
\update_term_meta($id, 'order', $index);
}
return new WP_REST_Response(\true);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {put} /real-cookie-banner/v1/cookies/order Order the cookies
* @apiHeader {string} X-WP-Nonce
* @apiParam {number[]} ids
* @apiName CookiesOrder
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeCookiesOrder($request)
{
// Get ids array
$ids = $request->get_param('ids');
if (!isset($ids) || !\is_array($ids) || empty($ids)) {
return new WP_Error('rest_rcb_wrong_ids');
}
$ids = \array_map('absint', $ids);
// Persist
foreach ($ids as $index => $id) {
\wp_update_post(['ID' => $id, 'menu_order' => $index]);
}
return new WP_REST_Response(\true);
}
/**
* See API docs.
*
* @api {get} /real-cookie-banner/v1/cookies/unassigned Get unassigned services
* @apiHeader {string} X-WP-Nonce
* @apiName CookiesUnassigned
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeCookiesUnassigned()
{
$posts = Cookie::getInstance()->getUnassignedCookies();
$result = [];
foreach ($posts as $post) {
$result[] = ['id' => $post->ID, 'title' => $post->post_title];
}
return new WP_REST_Response($result);
}
/**
* See API docs.
*
* @api {put} /real-cookie-banner/v1/country-bypass/database Download the Country Bypass IP database
* @apiHeader {string} X-WP-Nonce
* @apiName CountryBypassDatabaseDownload
* @apiGroup Config
* @apiPermission manage_options, PRO
* @apiVersion 1.0.0
*/
public function routeCountryBypassDownload()
{
$result = CountryBypass::getInstance()->updateDatabase();
return \is_wp_error($result) ? $result : new WP_REST_Response(['dbDownloadTime' => \mysql2date('c', CountryBypass::getInstance()->getDatabaseDownloadTime(), \false)]);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {post} /real-cookie-banner/v1/migration/:migration/:action Apply a registered migration action registered via `AbstractDashboardTileMigration::addAction`
* @apiParam {string} migration
* @apiParam {string} action
* @apiHeader {string} X-WP-Nonce
* @apiName DoMigration
* @apiGroup Config
* @apiPermission manage_options, PRO
* @apiVersion 1.0.0
*/
public function routeMigrationPost($request)
{
$result = AbstractDashboardTileMigration::doAction($request->get_param('migrationId'), $request->get_param('actionId'));
if (\is_wp_error($result)) {
return $result;
}
if ($result['success'] !== \true) {
return new WP_Error('rcb_migration_failed', null, ['result' => $result]);
}
return $result;
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {delete} /real-cookie-banner/v1/migration/:migration/ Dismiss a migration by migration ID
* @apiParam {string} migration
* @apiHeader {string} X-WP-Nonce
* @apiName DismissMigration
* @apiGroup Config
* @apiPermission manage_options, PRO
* @apiVersion 1.0.0
*/
public function routeMigrationDelete($request)
{
AbstractDashboardTileMigration::doDismiss($request->get_param('migrationId'));
return new WP_REST_Response(['success' => \true]);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {post} /real-cookie-banner/v1/nav-menu/add-links Add links to an existing menu
* @apiParam {string} id The ID for this navigation
* @apiHeader {string} X-WP-Nonce
* @apiName NavMenuAddLinks
* @apiGroup Config
* @apiPermission manage_options, PRO
* @apiVersion 1.0.0
*/
public function routeNavMenuAddLinksPost($request)
{
$result = NavMenuLinks::instance()->addLinksToMenu($request->get_param('id'));
if (\is_wp_error($result)) {
return $result;
}
return new WP_REST_Response(['success' => $result]);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {post} /real-cookie-banner/v1/create-cookie-policy Create a cookie policy page
* @apiHeader {string} X-WP-Nonce
* @apiName CreateCookiePolicy
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeCreateCookiePolicy($request)
{
$compLanguage = Core::getInstance()->getCompLanguage();
$fnCreatePost = function () {
return \wp_insert_post(['post_type' => 'page', 'post_content' => \sprintf('[%s]', CookiePolicyShortcode::TAG), 'post_title' => \_x('Cookie policy', 'legal-text', 'real-cookie-banner'), 'post_status' => 'publish'], \true);
};
if ($compLanguage->isActive() && $compLanguage instanceof AbstractSyncPlugin) {
$sourceLanguage = $compLanguage->getDefaultLanguage();
$result = $compLanguage->switchToLanguage($sourceLanguage, function () use($fnCreatePost, $compLanguage) {
$td = Hooks::getInstance()->createTemporaryTextDomain();
$result = $td->translate(function () use($fnCreatePost) {
return $fnCreatePost();
});
$td->teardown();
return $result;
});
if (!\is_wp_error($result)) {
$sync = new Sync(CookiePolicy::SYNC_OPTIONS, [], $compLanguage);
$sync->startCopyProcess()->copyPost($result, $sourceLanguage, \array_values(\array_diff($compLanguage->getActiveLanguages(), [$sourceLanguage])));
}
} else {
$result = $fnCreatePost();
}
if (\is_wp_error($result)) {
return $result;
}
\update_option(General::SETTING_COOKIE_POLICY_ID, $result);
return new WP_REST_Response(['id' => $result]);
}
/**
* See API docs.
*
* @api {get} /real-cookie-banner/v1/reset-texts/dry Get resettable text languages
* @apiHeader {string} X-WP-Nonce
* @apiName ResetTextsDryGet
* @apiGroup Config
* @apiPermission manage_options
* @apiVersion 1.0.0
*/
public function routeGetResetTextsDry()
{
$dryResetTexts = [];
Reset::getInstance()->texts(null, $dryResetTexts);
return new WP_REST_Response($dryResetTexts);
}
/**
* Retrieves all of the registered options for the Settings API, specific to Real Cookie Banner.
*
* @return array Array of registered options.
*/
public function get_registered_options()
{
$array = parent::get_registered_options();
foreach ($array as $key => $value) {
if (!Utils::startsWith($key, RCB_OPT_PREFIX)) {
unset($array[$key]);
}
}
return $array;
}
/**
* See `WP_REST_Settings_Controller`.
*
* @param WP_REST_Request $request Full details about the request.
*/
public function get_item_permissions_check($request)
{
return \current_user_can(Core::MANAGE_MIN_CAPABILITY);
}
/**
* Check if settings got updated and `do_action`.
*
* @param WP_HTTP_Response $response
* @param WP_REST_Server $server
* @param WP_REST_Request $request
*/
public function rest_post_dispatch($response, $server, $request)
{
if ($request->get_route() === \sprintf('/%s/%s', $this->namespace, $this->rest_base) && $request->get_method() === 'PATCH' && isset($response->data) && \is_array($response->data)) {
// Check if any RCB specific option was set
foreach (\array_keys($response->data) as $key) {
if (\strpos($key, RCB_OPT_PREFIX, 0) === 0) {
/**
* Settings got updated in the "Settings" tab.
*
* @hook RCB/Settings/Updated
* @param {WP_HTTP_Response} $response
* @param {WP_REST_Request} $request
* @return {WP_HTTP_Response}
*/
$response = \apply_filters('RCB/Settings/Updated', $response, $request);
break;
}
}
}
return $response;
}
/**
* Filter the post type item schema to add embed context to content properties.
*
* Additionally, add `type_singular` property to the schema.
*
* @param array $schema
* @return array
*/
public function filter_rest_post_type_item_schema($schema)
{
if (isset($schema['properties']['content'])) {
if (!\in_array('embed', $schema['properties']['content']['context'], \true)) {
$schema['properties']['content']['context'][] = 'embed';
}
if (!\in_array('embed', $schema['properties']['status']['context'], \true)) {
$schema['properties']['status']['context'][] = 'embed';
}
if (isset($schema['properties']['content']['properties']['rendered'])) {
if (!\in_array('embed', $schema['properties']['content']['properties']['rendered']['context'], \true)) {
$schema['properties']['content']['properties']['rendered']['context'][] = 'embed';
}
}
$schema['properties']['type_singular'] = ['description' => \__('The singular name of the post type.', 'real-cookie-banner'), 'type' => 'string', 'context' => ['view', 'edit', 'embed'], 'readonly' => \true];
// Iterate through all taxonomies registered for this post type and allow embedding of them
$taxonomies = \get_object_taxonomies($schema['title'], 'objects');
foreach ($taxonomies as $taxonomy) {
$tax_name = $taxonomy->name;
if (isset($schema['properties'][$tax_name])) {
if (!\in_array('embed', $schema['properties'][$tax_name]['context'], \true)) {
$schema['properties'][$tax_name]['context'][] = 'embed';
}
}
}
}
return $schema;
}
/**
* Filter the search query to include custom post statuses when user has permission.
*
* @param array $args The search query arguments.
* @param WP_REST_Request $request The REST request object.
* @return array Modified search query arguments.
*/
public function filter_rest_post_search_query($args, $request)
{
if (\current_user_can(Core::MANAGE_MIN_CAPABILITY)) {
$status = $request->get_param('status');
if (!empty($status)) {
$args['post_status'] = $status;
}
}
return $args;
}
/**
* Add custom 'status' parameter to post collection parameters.
*
* @param array $query_params JSON Schema-formatted collection parameters.
* @param WP_Post_Type $post_type Post type object.
* @return array Modified collection parameters.
*/
public function filter_rest_post_collection_params($query_params, $post_type)
{
$query_params['status'] = ['description' => \__('Limit result set to posts with one or more specific statuses.', 'real-cookie-banner'), 'type' => 'array', 'items' => ['type' => 'string', 'enum' => \array_merge(['any'], \get_post_stati())], 'default' => ['publish']];
return $query_params;
}
/**
* Filter the post response to add typeSingular property.
*
* @param WP_REST_Response $response The response object.
* @param WP_Post $post The post object.
* @param WP_REST_Request $request The request object.
* @return WP_REST_Response Modified response object.
*/
public function filter_rest_prepare_post($response, $post, $request)
{
$post_type_obj = \get_post_type_object($post->post_type);
$response->data['type_singular'] = $post_type_obj->labels->singular_name;
return $response;
}
/**
* Make our registered post types public for the search endpoint so it works for the
* "Connected services" field. This is a hacky way as WordPress itself does not allow to
* include private post types to the `wp/v2/search` REST API endpoint.
*
* @param array $queryVars
* @see https://github.com/WordPress/WordPress/blob/4f8f6e9fa25f598fc06829d0ea72caac4d3d60e4/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php#L28-L39
*/
public function modify_wp_post_types_temporarily($queryVars)
{
global $wp_post_types;
if (isset($_GET['_rcbExtendSearchResult']) && isset($queryVars['rest_route']) && $queryVars['rest_route'] === '/wp/v2/search' && isset($_GET['subtype']) && \current_user_can(Core::MANAGE_MIN_CAPABILITY)) {
foreach ([Cookie::CPT_NAME, Blocker::CPT_NAME] as $cpt) {
if (isset($wp_post_types[$cpt]) && $_GET['subtype'] === $cpt) {
$wp_post_types[$cpt]->public = \true;
$wp_post_types[$cpt]->publicly_queryable = \true;
}
}
if ($this->isPro() && isset($wp_post_types[TcfVendorConfiguration::CPT_NAME]) && $_GET['subtype'] === TcfVendorConfiguration::CPT_NAME) {
$wp_post_types[TcfVendorConfiguration::CPT_NAME]->public = \true;
$wp_post_types[TcfVendorConfiguration::CPT_NAME]->publicly_queryable = \true;
}
}
return $queryVars;
}
/**
* New instance.
*/
public static function instance()
{
return new \DevOwl\RealCookieBanner\rest\Config();
}
}