$post_id, 'action' => 'elementor' ], admin_url( 'post.php' ) ); /** * Get edit link. * * Filters the Elementor edit link. * * @since 1.0.0 * * @param string $edit_link New URL query string (unescaped). * @param int $post_id Post ID. */ $edit_link = apply_filters( 'elementor/utils/get_edit_link', $edit_link, $post_id ); return $edit_link; } /** * Get pro link. * * Retrieve the link to Elementor Pro. * * @since 1.7.0 * @access public * @static * * @param string $link URL to Elementor pro. * * @return string Elementor pro link. */ public static function get_pro_link( $link ) { static $theme_name = false; if ( ! $theme_name ) { $theme_obj = wp_get_theme(); if ( $theme_obj->parent() ) { $theme_name = $theme_obj->parent()->get( 'Name' ); } else { $theme_name = $theme_obj->get( 'Name' ); } $theme_name = sanitize_key( $theme_name ); } $link = add_query_arg( 'utm_term', $theme_name, $link ); if ( defined( 'ELEMENTOR_PARTNER_ID' ) ) { $link = add_query_arg( 'partner_id', sanitize_key( ELEMENTOR_PARTNER_ID ), $link ); } return $link; } /** * Get preview URL. * * Retrieve the post preview URL. * * @since 1.6.4 * @access public * @static * * @param int $post_id Optional. Post ID. Default is `0`. * * @return string Post preview URL. */ public static function get_preview_url( $post_id ) { $preview_url = set_url_scheme( add_query_arg( 'elementor-preview', '', get_permalink( $post_id ) ) ); /** * Preview URL. * * Filters the Elementor preview URL. * * @since 1.6.4 * * @param string $preview_url URL with chosen scheme. * @param int $post_id Post ID. */ $preview_url = apply_filters( 'elementor/utils/preview_url', $preview_url, $post_id ); return $preview_url; } /** * @since 1.9.0 * @static * @access public */ public static function get_wp_preview_url( $post_id ) { $query_args = []; $nonce = wp_create_nonce( 'post_preview_' . $post_id ); $query_args['preview_nonce'] = $nonce; $query_args['preview'] = 'true'; $wp_preview_url = get_preview_post_link( $post_id, $query_args ); /** * WordPress preview URL. * * Filters the WordPress preview URL. * * @since 1.9.0 * * @param string $wp_preview_url WordPress preview URL with chosen scheme. * @param int $post_id Post ID. */ $wp_preview_url = apply_filters( 'elementor/utils/wp_preview_url', $wp_preview_url, $post_id ); return $wp_preview_url; } /** * @since 1.9.0 * @static * @access public */ public static function get_exit_to_dashboard_url( $post_id ) { $exit_url = get_edit_post_link( $post_id, 'raw' ); /** * Exit To Dashboard URL. * * Filters the Exit To Dashboard URL. * * @since 1.9.0 * * @param string $exit_url Default exit URL. * @param int $post_id Post ID. */ $exit_url = apply_filters( 'elementor/utils/exit_to_dashboard_url', $exit_url, $post_id ); return $exit_url; } /** * Is post type supports Elementor. * * Whether the post type supports editing with Elementor. * * @since 1.0.0 * @access public * @static * * @param int $post_id Optional. Post ID. Default is `0`. * * @return string True if post type supports editing with Elementor, false otherwise. */ public static function is_post_type_support( $post_id = 0 ) { $post_type = get_post_type( $post_id ); $is_supported = post_type_supports( $post_type, 'elementor' ); /** * Is post type support. * * Filters whether the post type supports editing with Elementor. * * @since 1.0.0 * * @param bool $is_supported Whether the post type supports editing with Elementor. * @param int $post_id Post ID. * @param string $post_type Post type. */ $is_supported = apply_filters( 'elementor/utils/is_post_type_support', $is_supported, $post_id, $post_type ); return $is_supported; } /** * Get placeholder image source. * * Retrieve the source of the placeholder image. * * @since 1.0.0 * @access public * @static * * @return string The source of the default placeholder image used by Elementor. */ public static function get_placeholder_image_src() { $placeholder_image = ELEMENTOR_ASSETS_URL . 'images/placeholder.png'; /** * Get placeholder image source. * * Filters the source of the default placeholder image used by Elementor. * * @since 1.0.0 * * @param string $placeholder_image The source of the default placeholder image. */ $placeholder_image = apply_filters( 'elementor/utils/get_placeholder_image_src', $placeholder_image ); return $placeholder_image; } /** * Generate random string. * * Returns a string containing a hexadecimal representation of randon number. * * @since 1.0.0 * @access public * @static * * @return string Random string. */ public static function generate_random_string() { return dechex( rand() ); } /** * Do not cache. * * Tell WordPress cache plugins not to cache this request. * * @since 1.0.0 * @access public * @static */ public static function do_not_cache() { if ( ! defined( 'DONOTCACHEPAGE' ) ) { define( 'DONOTCACHEPAGE', true ); } if ( ! defined( 'DONOTCACHEDB' ) ) { define( 'DONOTCACHEDB', true ); } if ( ! defined( 'DONOTMINIFY' ) ) { define( 'DONOTMINIFY', true ); } if ( ! defined( 'DONOTCDN' ) ) { define( 'DONOTCDN', true ); } if ( ! defined( 'DONOTCACHCEOBJECT' ) ) { define( 'DONOTCACHCEOBJECT', true ); } // Set the headers to prevent caching for the different browsers. nocache_headers(); } /** * Get timezone string. * * Retrieve timezone string from the WordPress database. * * @since 1.0.0 * @access public * @static * * @return string Timezone string. */ public static function get_timezone_string() { $current_offset = (float) get_option( 'gmt_offset' ); $timezone_string = get_option( 'timezone_string' ); // Create a UTC+- zone if no timezone string exists. if ( empty( $timezone_string ) ) { if ( 0 === $current_offset ) { $timezone_string = 'UTC+0'; } elseif ( $current_offset < 0 ) { $timezone_string = 'UTC' . $current_offset; } else { $timezone_string = 'UTC+' . $current_offset; } } return $timezone_string; } /** * Do action deprecated. * * Fires functions attached to a deprecated action hook. * * @since 1.0.10 * @access public * @static * * @param string $tag The name of the action hook. * @param array $args Array of additional function arguments to be passed to `do_action()`. * @param string $version The version of WordPress that deprecated the hook. * @param string $replacement Optional. The hook that should have been used. * @param string $message Optional. A message regarding the change. */ public static function do_action_deprecated( $tag, $args, $version, $replacement = false, $message = null ) { // TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `do_action_deprecated()` function. if ( function_exists( 'do_action_deprecated' ) ) { /* WP >= 4.6 */ do_action_deprecated( $tag, $args, $version, $replacement, $message ); } else { do_action_ref_array( $tag, $args ); } } /** * Do filter deprecated. * * Fires functions attached to a deprecated filter hook. * * @since 1.0.10 * @access public * @static * * @param string $tag The name of the filter hook. * @param array $args Array of additional function arguments to be passed to `apply_filters()`. * @param string $version The version of WordPress that deprecated the hook. * @param string $replacement Optional. The hook that should have been used. * @param string $message Optional. A message regarding the change. */ public static function apply_filters_deprecated( $tag, $args, $version, $replacement = false, $message = null ) { // TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `apply_filters_deprecated()` function. if ( function_exists( 'apply_filters_deprecated' ) ) { /* WP >= 4.6 */ return apply_filters_deprecated( $tag, $args, $version, $replacement, $message ); } else { return apply_filters_ref_array( $tag, $args ); } } /** * @since 1.9.0 * @static * @access public */ public static function get_last_edited( $post_id ) { $post = get_post( $post_id ); $autosave_post = Utils::get_post_autosave( $post_id ); if ( $autosave_post ) { $post = $autosave_post; } $date = date_i18n( _x( 'M j, H:i', 'revision date format', 'elementor' ), strtotime( $post->post_modified ) ); $display_name = get_the_author_meta( 'display_name' , $post->post_author ); if ( $autosave_post ) { /* translators: 1: Saving date, 2: Author display name */ $last_edited = sprintf( __( 'Draft saved on %1$s by %2$s', 'elementor' ), '', $display_name ); } else { /* translators: 1: Editing date, 2: Author display name */ $last_edited = sprintf( __( 'Last edited on %1$s by %2$s', 'elementor' ), '', $display_name ); } return $last_edited; } /** * @since 1.9.0 * @static * @access public */ public static function get_create_new_post_url( $post_type = 'page' ) { $new_post_url = add_query_arg( [ 'action' => 'elementor_new_post', 'post_type' => $post_type, ], admin_url( 'edit.php' ) ); $new_post_url = wp_nonce_url( $new_post_url, 'elementor_action_new_post' ); return $new_post_url; } /** * @static * @access public */ public static function get_post_autosave( $post_id, $user_id = 0 ) { global $wpdb; $where = $wpdb->prepare( 'post_parent = %d AND post_name LIKE %s', [ $post_id, "{$post_id}-autosave%" ] ); if ( $user_id ) { $where .= $wpdb->prepare( ' AND post_author = %d', $user_id ); } $revision = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE $where AND post_type = 'revision'" ); if ( $revision ) { $revision = new \WP_Post( $revision ); } else { $revision = false; } return $revision; } }