activate_status; } return false; } /** * Returns pro version number. * * @param int $version version number. * @since 1.0.0 */ function _is_cartflows_pro_ver_less_than( $version ) { if ( defined( 'CARTFLOWS_PRO_VER' ) && version_compare( CARTFLOWS_PRO_VER, $version, '<' ) ) { return true; } return false; } /** * Returns step id. * * @since 1.0.0 */ function _get_wcf_post_id() { global $post; if ( isset( $post->ID ) ) { return $post->ID; } return 0; } /** * Returns step id. * * @since 1.0.0 */ function _get_wcf_step_id() { if ( wcf()->utils->is_step_post_type() ) { global $post; return $post->ID; } return false; } /** * Check if it is a landing page? * * @since 1.0.0 */ function _is_wcf_landing_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'landing' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Returns landing id. * * @since 1.0.0 */ function _get_wcf_landing_id() { if ( _is_wcf_landing_type() ) { global $post; return $post->ID; } return false; } /** * Is custom checkout? * * @param int $checkout_id checkout ID. * @since 1.0.0 */ function _is_wcf_meta_custom_checkout( $checkout_id ) { $is_custom = wcf()->options->get_checkout_meta_value( $checkout_id, 'wcf-custom-checkout-fields' ); if ( 'yes' === $is_custom ) { return true; } return false; } /** * Check if page is cartflow checkout. * * @since 1.0.0 * @return bool */ function _is_wcf_checkout_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'checkout' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Check if AJAX call is in progress. * * @since 1.0.0 * @return bool */ function _is_wcf_doing_checkout_ajax() { //phpcs:disable WordPress.Security.NonceVerification if ( wp_doing_ajax() || isset( $_GET['wc-ajax'] ) ) { if ( ( isset( $_GET['wc-ajax'] ) && isset( $_POST['_wcf_checkout_id'] ) ) || isset( $_GET['wcf_checkout_id'] ) ) { return true; } } //phpcs:enable WordPress.Security.NonceVerification return false; } /** * Check if optin AJAX call is in progress. * * @since 1.0.0 * @return bool */ function _is_wcf_doing_optin_ajax() { //phpcs:disable WordPress.Security.NonceVerification if ( wp_doing_ajax() || isset( $_GET['wc-ajax'] ) ) { if ( isset( $_GET['wc-ajax'] ) && isset( $_POST['_wcf_optin_id'] ) ) { return true; } } //phpcs:enable WordPress.Security.NonceVerification return false; } /** * Returns checkout ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_checkout_id() { if ( _is_wcf_checkout_type() ) { global $post; return $post->ID; } return false; } /** * Check if it is checkout shortcode. * * @since 1.0.0 * @return bool */ function _is_wcf_checkout_shortcode() { global $post; if ( ! empty( $post ) && has_shortcode( $post->post_content, 'cartflows_checkout' ) ) { return true; } return false; } /** * Check if it is checkout shortcode. * * @since 1.0.0 * @param string $content shortcode content. * @return bool */ function _get_wcf_checkout_id_from_shortcode( $content = '' ) { $checkout_id = 0; if ( ! empty( $content ) ) { $regex_pattern = get_shortcode_regex( array( 'cartflows_checkout' ) ); preg_match( '/' . $regex_pattern . '/s', $content, $regex_matches ); if ( ! empty( $regex_matches ) ) { if ( 'cartflows_checkout' == $regex_matches[2] ) { $attribure_str = str_replace( ' ', '&', trim( $regex_matches[3] ) ); $attribure_str = str_replace( '"', '', $attribure_str ); $attributes = wp_parse_args( $attribure_str ); if ( isset( $attributes['id'] ) ) { $checkout_id = $attributes['id']; } } } } return $checkout_id; } /** * Check if post type is upsell. * * @since 1.0.0 * @return bool */ function _is_wcf_upsell_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'upsell' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Returns upsell ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_upsell_id() { if ( _is_wcf_upsell_type() ) { global $post; return $post->ID; } return false; } /** * Check if post is of type downsell. * * @since 1.0.0 * @return int/bool */ function _is_wcf_downsell_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'downsell' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Get downsell page ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_downsell_id() { if ( _is_wcf_downsell_type() ) { global $post; return $post->ID; } return false; } /** * Check if page is of thank you type. * * @since 1.0.0 * @return int/bool */ function _is_wcf_thankyou_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'thankyou' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Get thank you page ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_thankyou_id() { if ( _is_wcf_thankyou_type() ) { global $post; return $post->ID; } return false; } /** * Check if post type is upsell. * * @since 1.0.0 * @return bool */ function _is_wcf_base_offer_type() { $result = false; if ( wcf()->utils->is_step_post_type() ) { global $post; $step_type = get_post_meta( $post->ID, 'wcf-step-type', true ); if ( 'upsell' === $step_type || 'downsell' === $step_type ) { $result = true; } } return apply_filters( 'cartflows_is_offer_type', $result ); } /** * Returns upsell ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_base_offer_id() { if ( _is_wcf_base_offer_type() ) { global $post; return $post->ID; } return false; } /** * Check if page is of optin type. * * @since 1.0.0 * @return int/bool */ function _is_wcf_optin_type() { if ( wcf()->utils->is_step_post_type() ) { global $post; if ( 'optin' === get_post_meta( $post->ID, 'wcf-step-type', true ) ) { return true; } } return false; } /** * Get optin page ID. * * @since 1.0.0 * @return int/bool */ function _get_wcf_optin_id() { if ( _is_wcf_optin_type() ) { global $post; return $post->ID; } return false; } /** * Define a constant if it is not already defined. * * @since 3.0.0 * @param string $name Constant name. * @param mixed $value Value. */ function wcf_maybe_define_constant( $name, $value ) { if ( ! defined( $name ) ) { define( $name, $value ); } } if ( ! function_exists( 'wp_body_open' ) ) { /** * Fire the wp_body_open action. * * Added for backwards compatibility to support WordPress versions prior to 5.2.0. */ function wp_body_open() { /** * Triggered after the opening tag. */ do_action( 'wp_body_open' ); } } /** * Check if type is optin by id. * * @param int $post_id post id. * * @return int/bool * @since 1.0.0 */ function _wcf_check_is_optin_by_id( $post_id ) { if ( 'optin' === get_post_meta( $post_id, 'wcf-step-type', true ) ) { return true; } return false; } /** * Supported Page Template * * @param string $page_template current page template. * * @return int/bool * @since 1.5.7 */ function _wcf_supported_template( $page_template ) { if ( in_array( $page_template, array( 'cartflows-default', 'cartflows-canvas' ), true ) ) { return true; } return false; } /** * Display design Metabox Notice. * * @return string * @since 1.6.15 */ function wcf_get_page_builder_notice() { $notice = ''; $page_builder = Cartflows_Helper::get_common_setting( 'default_page_builder' ); $supported_page_builders = array( 'elementor', 'beaver-builder' ); $page_builder_data = array( 'elementor' => array( 'name' => 'Elementor', 'doc' => 'https://cartflows.com/docs/elementor-widgets-of-cartflows/?utm_source=dashboard&utm_medium=free-cartflows&utm_campaign=docs', ), 'beaver-builder' => array( 'name' => 'Beaver Builder', 'doc' => 'https://cartflows.com/docs/beaver-builder-modules-of-cartflows/?utm_source=dashboard&utm_medium=free-cartflows&utm_campaign=docs', ), 'gutenberg' => array( 'name' => 'Gutenebrg', 'doc' => 'https://cartflows.com/docs/cartflows-gutenberg-blocks/?utm_source=dashboard&utm_medium=free-cartflows&utm_campaign=docs', ), ); if ( isset( $page_builder_data[ $page_builder ] ) ) { $page_builder_name = $page_builder_data[ $page_builder ]['name']; $doc_link = $page_builder_data[ $page_builder ]['doc']; $notice = '

'; $notice .= ' '; /* translators: %1$s page builder name "string" */ $notice .= sprintf( __( 'We have introduced %1$1s widgets for CartFlows shortcodes. Now, you can add/change/update design settings directly from the page builder as well.', 'cartflows' ), $page_builder_name ); $notice .= ' ' . __( 'Learn More ยป', 'cartflows' ) . ''; $notice .= '

'; } return $notice; } /** * Get step type. * * @param int $post_id post id. * * @return bool|string * @since 1.0.0 */ function wcf_get_step_type( $post_id ) { return get_post_meta( $post_id, 'wcf-step-type', true ); } /** * Get get step object. * * @param int $step_id current step ID. * @since 1.5.9 */ function wcf_get_step( $step_id ) { if ( ! isset( wcf()->wcf_step_objs[ $step_id ] ) ) { wcf()->wcf_step_objs[ $step_id ] = new Cartflows_Step_Factory( $step_id ); } return wcf()->wcf_step_objs[ $step_id ]; } /** * Check auto-prefill checkout fields feature is enabled or not. * * @return boolean */ function is_auto_prefill_checkout_fields_enabled() { return apply_filters( 'cartflows_auto_prefill_checkout_fields', true ); } /** * Is starter plan. * * @return boolean */ function is_wcf_starter_plan() { return defined( 'CARTFLOWS_PRO_PLUGIN_TYPE' ) && CARTFLOWS_PRO_PLUGIN_TYPE === 'starter'; } /** * Is PRO plan. * * @return boolean */ function is_wcf_pro_plan() { return defined( 'CARTFLOWS_PRO_PLUGIN_TYPE' ) && CARTFLOWS_PRO_PLUGIN_TYPE === 'pro'; } /** * Show notice. * * @param string $title title. * @param string $message description. * @param string $classes classes. */ function wcf_feature_notice( $title, $message, $classes ) { $image_path = esc_url( CARTFLOWS_URL . 'assets/images/cartflows-logo-small.jpg' ); $output = '
'; $output .= '
'; $output .= ''; $output .= '

' . $title . '

' . $message . '

'; $output .= '
'; $output .= '
'; echo wp_kses_post( $output ); }