/** * WP_oEmbed_Controller class, used to provide an oEmbed endpoint. * * @package WordPress * @subpackage Embeds * @since 4.4.0 */ /** * oEmbed API endpoint controller. * * Registers the REST API route and delivers the response data. * The output format (XML or JSON) is handled by the REST API. * * @since 4.4.0 */ #[AllowDynamicProperties] final class WP_oEmbed_Controller { /** * Register the oEmbed REST API route. * * @since 4.4.0 */ public function register_routes() { /** * Filters the maxwidth oEmbed parameter. * * @since 4.4.0 * * @param int $maxwidth Maximum allowed width. Default 600. */ $maxwidth = apply_filters( 'oembed_default_width', 600 ); register_rest_route( 'oembed/1.0', '/embed', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'default' => 'json', 'sanitize_callback' => 'wp_oembed_ensure_format', ), 'maxwidth' => array( 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), ), ), ) ); register_rest_route( 'oembed/1.0', '/proxy', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_proxy_item' ), 'permission_callback' => array( $this, 'get_proxy_item_permissions_check' ), 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'description' => __( 'The oEmbed format to use.' ), 'type' => 'string', 'default' => 'json', 'enum' => array( 'json', 'xml', ), ), 'maxwidth' => array( 'description' => __( 'The maximum width of the embed frame in pixels.' ), 'type' => 'integer', 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), 'maxheight' => array( 'description' => __( 'The maximum height of the embed frame in pixels.' ), 'type' => 'integer', 'sanitize_callback' => 'absint', ), 'discover' => array( 'description' => __( 'Whether to perform an oEmbed discovery request for unsanctioned providers.' ), 'type' => 'boolean', 'default' => true, ), ), ), ) ); } /** * Callback for the embed API endpoint. * * Returns the JSON object for the post. * * @since 4.4.0 * * @param WP_REST_Request $request Full data about the request. * @return array|WP_Error oEmbed response data or WP_Error on failure. */ public function get_item( $request ) { $post_id = url_to_postid( $request['url'] ); /** * Filters the determined post ID. * * @since 4.4.0 * * @param int $post_id The post ID. * @param string $url The requested URL. */ $post_id = apply_filters( 'oembed_request_post_id', $post_id, $request['url'] ); $data = get_oembed_response_data( $post_id, $request['maxwidth'] ); if ( ! $data ) { return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } return $data; } /** * Checks if current user can make a proxy oEmbed request. * * @since 4.8.0 * * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_proxy_item_permissions_check() { if ( ! current_user_can( 'edit_posts' ) ) { return new WP_Error( 'rest_forbidden', __( 'Sorry, you are not allowed to make proxied oEmbed requests.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Callback for the proxy API endpoint. * * Returns the JSON object for the proxied item. * * @since 4.8.0 * * @see WP_oEmbed::get_html() * @global WP_Embed $wp_embed WordPress Embed object. * @global WP_Scripts $wp_scripts * * @param WP_REST_Request $request Full data about the request. * @return object|WP_Error oEmbed response data or WP_Error on failure. */ public function get_proxy_item( $request ) { global $wp_embed, $wp_scripts; $args = $request->get_params(); // Serve oEmbed data from cache if set. unset( $args['_wpnonce'] ); $cache_key = 'oembed_' . md5( serialize( $args ) ); $data = get_transient( $cache_key ); if ( ! empty( $data ) ) { return $data; } $url = $request['url']; unset( $args['url'] ); // Copy maxwidth/maxheight to width/height since WP_oEmbed::fetch() uses these arg names. if ( isset( $args['maxwidth'] ) ) { $args['width'] = $args['maxwidth']; } if ( isset( $args['maxheight'] ) ) { $args['height'] = $args['maxheight']; } // Short-circuit process for URLs belonging to the current site. $data = get_oembed_response_data_for_url( $url, $args ); if ( $data ) { return $data; } $data = _wp_oembed_get_object()->get_data( $url, $args ); if ( false === $data ) { // Try using a classic embed, instead. /* @var WP_Embed $wp_embed */ $html = $wp_embed->get_embed_handler_html( $args, $url ); if ( $html ) { // Check if any scripts were enqueued by the shortcode, and include them in the response. $enqueued_scripts = array(); foreach ( $wp_scripts->queue as $script ) { $enqueued_scripts[] = $wp_scripts->registered[ $script ]->src; } return (object) array( 'provider_name' => __( 'Embed Handler' ), 'html' => $html, 'scripts' => $enqueued_scripts, ); } return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } /** This filter is documented in wp-includes/class-wp-oembed.php */ $data->html = apply_filters( 'oembed_result', _wp_oembed_get_object()->data2html( (object) $data, $url ), $url, $args ); /** * Filters the oEmbed TTL value (time to live). * * Similar to the {@see 'oembed_ttl'} filter, but for the REST API * oEmbed proxy endpoint. * * @since 4.8.0 * * @param int $time Time to live (in seconds). * @param string $url The attempted embed URL. * @param array $args An array of embed request arguments. */ $ttl = apply_filters( 'rest_oembed_ttl', DAY_IN_SECONDS, $url, $args ); set_transient( $cache_key, $data, $ttl ); return $data; } } Discover the JB.com Mobile App Your Gateway to Convenience – tejas-apartment.teson.xyz

Discover the JB.com Mobile App Your Gateway to Convenience

Discover the JB.com Mobile App Your Gateway to Convenience

Welcome to the JB.com Mobile App

The JB.com mobile app is designed to enhance your shopping experience, allowing you to browse and purchase your favorite products effortlessly. With a user-friendly interface and a host of features, this app is your ultimate shopping companion. To learn more about the app, you can visit JB.com Mobile App https://jb-ru.com/prilozhenie/.

Key Features of the JB.com Mobile App

Seamless Browsing

The JB.com mobile app provides an intuitive browsing experience. Users can easily navigate through various categories, making it simple to find the products they love. The app’s design is optimized for mobile devices, ensuring that every touch and swipe is smooth and efficient.

Personalized Recommendations

One of the standout features of the JB.com app is its personalized recommendations. By analyzing your shopping habits, the app suggests products tailored to your preferences. This personalization not only saves you time but also helps you discover new products that match your taste.

Exclusive Offers

As a user of the JB.com mobile app, you gain access to exclusive offers and discounts. The app frequently features promotions that are only available to mobile users, meaning you can save money while shopping for your favorite items. Don’t miss out on these fantastic deals!

Easy Checkout Process

The app simplifies the checkout process, allowing you to complete your purchases quickly. With features like saved payment methods and address information, your shopping experience is only a few taps away. This efficiency is especially appreciated during busy shopping seasons or flash sales.

Order Tracking

After making a purchase, tracking your order is a breeze. The JB.com mobile app offers real-time updates on your order status. You can see when your items are shipped and when they’re expected to arrive, providing peace of mind and transparency in the shopping process.

Discover the JB.com Mobile App Your Gateway to Convenience

Improving User Engagement

Beyond its functional features, the JB.com app is designed to foster user engagement. The app hosts a community section where users can share reviews, tips, and experiences. This creates a sense of belonging among users and enhances the overall shopping experience.

Customer Support

Excellent customer support is crucial in today’s shopping landscape, and the JB.com app excels in this area. Users can access support directly through the app, ensuring that assistance is always just a few taps away. Whether you have questions about a product or need help with an order, the support team is ready to assist.

Regular Updates

The development team behind the JB.com mobile app is committed to continuous improvement. Regular updates are released to enhance functionality, improve performance, and introduce new features. This dedication to progress ensures that users always have access to the best possible experience.

Getting Started with the JB.com Mobile App

Getting started with the JB.com mobile app is simple. First, download the app from your device’s app store and install it. Creating an account is quick and easy, requiring minimal information to set up. Once registered, you can begin exploring the vast array of products offered by JB.com.

Tips for Maximizing Your Experience

To get the most out of your JB.com experience, consider the following tips:

  • Enable notifications to stay informed about promotions and special events.
  • Utilize the wishlist feature to keep track of items you’re interested in but may want to purchase later.
  • Participate in community discussions to connect with other users and gain insights into trending products.

Conclusion

The JB.com mobile app is more than just a shopping tool; it’s a comprehensive platform that enhances your entire shopping experience. From seamless browsing and personalized recommendations to exclusive offers and real-time order tracking, this app is designed with the user in mind. Whether you’re a seasoned online shopper or just getting started, the JB.com app is a perfect choice. Download it today and unlock the convenience of shopping at your fingertips!

Leave a Comment

Your email address will not be published. Required fields are marked *