Files
roi-theme/wp-content/plugins/wp-marketing-automations/woofunnels/includes/class-woofunnels-process.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

744 lines
25 KiB
PHP
Executable File

<?php
if ( ! class_exists( 'WooFunnels_Process' ) ) {
/**
* Basic process class that detect request and pass to respective class
*
* @author woofunnels
* @package WooFunnels
*/
#[AllowDynamicProperties]
class WooFunnels_Process {
private static $ins = null;
public $in_update_messages = array();
/**
* Initiate hooks
*/
public function __construct() {
add_action( 'admin_init', array( $this, 'parse_request_and_process' ), 14 );
add_filter( 'admin_notices', array( $this, 'maybe_show_advanced_update_notification' ), 999 );
add_action( 'admin_head', array( $this, 'register_in_update_plugin_message' ) );
add_action( 'fk_fb_every_day', array( 'WooFunnels_License_Controller', 'license_check' ) );
add_action( 'wp_ajax_nopriv_fk_init_license_request', array( 'WooFunnels_License_Controller', 'license_check_api_call_init' ) );
add_action( 'funnelkit_license_update', array( $this, 'maybe_clear_plugin_update_transients' ) );
add_action( 'funnelkit_delete_transients', array( $this, 'maybe_clear_plugin_update_transients' ) );
add_action( 'woocommerce_thankyou', array( $this, 'fire_thankyou_ajax' ), 10 );
add_action( 'wp_ajax_bwf_thankyou_ajax', array( $this, 'handle_thankyou_ajax' ), 10 );
add_action( 'wp_ajax_nopriv_bwf_thankyou_ajax', array( $this, 'handle_thankyou_ajax' ), 10 );
add_action( 'admin_init', array( $this, 'maybe_set_options_auto_loading_false' ) );
add_action( 'admin_head', array( $this, 'maybe_swap_order_to_make_it_correct' ), - 2 );
add_action( 'admin_head', array( $this, 'maybe_correct_submenu_order' ), - 1 );
add_action( 'admin_head', array( $this, 'correct_sub_menu_order' ), 999 );
add_action( 'admin_head', array( $this, 'correct_sub_menu_order_legacy' ), 999 );
add_action( 'admin_init', array( $this, 'hide_plugins_update_notices' ) );
add_action( 'admin_footer', array( $this, 'print_css' ), 9999 );
}
public static function get_instance() {
if ( self::$ins === null ) {
self::$ins = new self;
}
return self::$ins;
}
public function parse_request_and_process() {
//Initiating the license instance to handle submissions (submission can redirect page two that can cause "header already sent" issue to be arised)
// Initiating this to over come that issue
if ( 'woofunnels' === filter_input( INPUT_GET, 'page', FILTER_UNSAFE_RAW ) && 'licenses' === filter_input( INPUT_GET, 'tab', FILTER_UNSAFE_RAW ) ) {
WooFunnels_licenses::get_instance();
}
//Handling Optin
if ( isset( $_GET['woofunnels-optin-choice'] ) && isset( $_GET['_woofunnels_optin_nonce'] ) ) {
if ( ! wp_verify_nonce( sanitize_text_field( $_GET['_woofunnels_optin_nonce'] ), 'woofunnels_optin_nonce' ) ) {
wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'woofunnels' ) ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch
}
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( esc_html__( 'Cheating huh?', 'woofunnels' ) ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch
}
$optin_choice = sanitize_text_field( $_GET['woofunnels-optin-choice'] );
if ( $optin_choice === 'yes' ) {
WooFunnels_optIn_Manager::Allow_optin();
if ( isset( $_GET['ref'] ) ) {
WooFunnels_optIn_Manager::update_optIn_referer( filter_input( INPUT_GET, 'ref', FILTER_UNSAFE_RAW ) );
}
} else {
WooFunnels_optIn_Manager::block_optin();
}
do_action( 'woofunnels_after_optin_choice', $optin_choice );
}
//Initiating the license instance to handle submissions (submission can redirect page two that can cause "header already sent" issue to be arised)
// Initiating this to over come that issue
if ( isset( $_GET['page'] ) && 'woofunnels' === sanitize_text_field( $_GET['page'] ) && isset( $_GET['tab'] ) && 'support' === sanitize_text_field( $_GET['tab'] ) && isset( $_POST['woofunnels_submit_support'] ) ) {
$instance_support = WooFunnels_Support::get_instance();
if ( filter_input( INPUT_POST, 'choose_addon', true ) === '' || filter_input( INPUT_POST, 'comments', true ) === '' ) {
$instance_support->validation = false;
}
}
}
public function maybe_show_advanced_update_notification() {
$screen = get_current_screen();
$plugins_installed = WooFunnels_Addons::get_installed_plugins();
$hide_notice = get_option( 'woofunnel_hide_update_notice', 'no' );
if ( 'yes' !== $hide_notice && is_object( $screen ) && 'index.php' === $screen->parent_file ) {
$plugins = get_site_transient( 'update_plugins' );
if ( isset( $plugins->response ) && is_array( $plugins->response ) ) {
$plugins = array_keys( $plugins->response );
$plugin_names = [];
foreach ( $plugins_installed as $basename => $installed ) {
if ( is_array( $plugins ) && count( $plugins ) > 0 && in_array( $basename, $plugins, true ) ) {
$plugin_names[] = $installed['Name'];
}
}
if ( count( $plugin_names ) > 0 ) {
?>
<div class="woofunnel-notice-message notice notice-warning">
<a class="woofunnel-message-close notice-dismiss" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'woofunnel-update-notice', 'hide' ), 'woofunnel_update_notice_nonce', '_woofunnel_update_notice_nonce' ) ); ?>">
<?php esc_html_e( 'Dismiss', 'woofunnels' ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch ?>
</a>
<p>
<?php
_e( sprintf( 'Attention: There is an update available of <strong>%s</strong> plugin. &nbsp;<a href="%s" class="">Go to updates</a>', implode( ', ', $plugin_names ), admin_url( 'plugins.php?s=funnelkit&plugin_status=all' ) ), 'woofunnels' ); // phpcs:ignore WordPress.Security.EscapeOutput, WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.MissingTranslatorsComment, WordPress.WP.I18n.NonSingularStringLiteralText
?>
</p>
</div>
<style>
div.woofunnel-notice-message {
overflow: hidden;
position: relative;
}
.woofunnel-notice-message a.woofunnel-message-close {
position: static;
float: right;
padding: 0px 15px 5px 28px;
margin-top: -10px;
line-height: 14px;
text-decoration: none;
}
.woofunnel-notice-message a.woofunnel-message-close:before {
position: relative;
top: 18px;
left: -20px;
transition: all .1s ease-in-out;
}
</style>
<?php
}
}
}
}
/**
* Set option for hide woofunnel plugin update notice
*/
public static function hide_plugins_update_notices() {
if ( isset( $_GET['woofunnel-update-notice'] ) && isset( $_GET['_woofunnel_update_notice_nonce'] ) ) {
if ( ! wp_verify_nonce( sanitize_text_field( $_GET['_woofunnel_update_notice_nonce'] ), 'woofunnel_update_notice_nonce' ) ) {
wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'woofunnels' ) ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch
}
update_option( 'woofunnel_hide_update_notice', 'yes' );
wp_safe_redirect( admin_url( 'index.php' ) );
exit;
}
}
public function register_in_update_plugin_message() {
$get_in_update_message_support = apply_filters( 'woofunnels_in_update_message_support', array() );
if ( empty( $get_in_update_message_support ) ) {
return;
}
$this->in_update_messages = $get_in_update_message_support;
$get_basenames = array_keys( $get_in_update_message_support );
foreach ( $get_basenames as $basename ) {
add_action( 'in_plugin_update_message-' . $basename, array( $this, 'in_plugin_update_message' ), 10, 2 );
}
}
/**
* Show plugin changes on the plugins screen. Code adapted from W3 Total Cache.
*
* @param array $args Unused parameter.
* @param stdClass $response Plugin update response.
*/
public function in_plugin_update_message( $args, $response ) {
$changelog_path = $this->in_update_messages[ $args['plugin'] ];
$current_version = $args['Version'];
$upgrade_notice = $this->get_upgrade_notice( $response->new_version, $changelog_path, $current_version );
echo apply_filters( 'woofunnels_in_plugin_update_message', $upgrade_notice ? '</br>' . wp_kses_post( $upgrade_notice ) : '', $args['plugin'] ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '<style>span.woofunnels_plugin_upgrade_notice::before {
content: ' . '"\f463";
margin-right: 6px;
vertical-align: bottom;
color: #f56e28;
display: inline-block;
font: 400 20px/1 dashicons;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
vertical-align: top;
}</style>';
}
/**
* Get the upgrade notice from WordPress.org.
*
* @param string $version WooCommerce new version.
*
* @return string
*/
protected function get_upgrade_notice( $version, $path, $current_version ) {
$transient_name = 'woofunnels_upgrade_notice_' . $version . md5( $path );
$upgrade_notice = get_transient( $transient_name );
if ( false === $upgrade_notice ) {
$response = wp_safe_remote_get( $path );
if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
$upgrade_notice = $this->parse_update_notice( $response['body'], $version, $current_version );
set_transient( $transient_name, $upgrade_notice, DAY_IN_SECONDS );
}
}
return $upgrade_notice;
}
/**
* Parse update notice from readme file.
*
* @param string $content WooCommerce readme file content.
* @param string $new_version WooCommerce new version.
*
* @return string
*/
private function parse_update_notice( $content, $new_version, $current_version ) {
$version_parts = explode( '.', $new_version );
$check_for_notices = array(
$version_parts[0] . '.0', // Major.
$version_parts[0] . '.0.0', // Major.
$version_parts[0] . '.' . $version_parts[1], // Minor.
);
$notice_regexp = '~==\s*Upgrade Notice\s*==\s*=\s*(.*)\s*=(.*)(=\s*' . preg_quote( $new_version ) . '\s*=|$)~Uis';
$upgrade_notice = '';
foreach ( $check_for_notices as $check_version ) {
if ( version_compare( $current_version, $check_version, '>' ) ) {
continue;
}
$matches = null;
if ( preg_match( $notice_regexp, $content, $matches ) ) {
$notices = (array) preg_split( '~[\r\n]+~', trim( $matches[2] ) );
if ( version_compare( trim( $matches[1] ), $check_version, '=' ) ) {
$upgrade_notice .= '<span class="woofunnels_plugin_upgrade_notice">';
foreach ( $notices as $line ) {
$upgrade_notice .= preg_replace( '~\[([^\]]*)\]\(([^\)]*)\)~', '<a href="${2}">${1}</a>', $line );
}
$upgrade_notice .= '</span>';
}
break;
}
}
return wp_kses_post( $upgrade_notice );
}
public function fire_thankyou_ajax( $order_id ) {
$action = 'bwf_thankyou_ajax';
$nonce = wp_create_nonce( 'bwf_thankyou_ajax' );
$ajaxurl = admin_url( 'admin-ajax.php' );
$bwfUrlAjaxThankYou = $ajaxurl . '?action=' . $action . '&nonce=' . $nonce . '&order_id=' . $order_id;
?>
<script>
document.addEventListener("DOMContentLoaded", function (event) {
var xhr = new XMLHttpRequest();
var bwfUrlAjaxThankYou = '<?php echo $bwfUrlAjaxThankYou; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>';
xhr.open("POST", bwfUrlAjaxThankYou, true);
//Send the proper header information along with the request
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send();
});
</script>
<?php
}
public function handle_thankyou_ajax() {
check_ajax_referer( 'bwf_thankyou_ajax', 'nonce' );
$get_order_id = filter_input( INPUT_GET, 'order_id', FILTER_SANITIZE_NUMBER_INT );
if ( empty( $get_order_id ) ) {
return;
}
/**
* Fires a generic WC thankyou hook
*/
do_action( 'woofunnels_woocommerce_thankyou', $get_order_id );
wp_send_json( array( 'success' => true ) );
}
/**
* @hooked over 'admin_init'
* Mark the customizer data to not autoload on WP load as its only needed on specific pages.
*/
public function maybe_set_options_auto_loading_false() {
$should_run_query = get_option( '_bwf_upgrade_1_9_14', 'no' );
if ( 'yes' === $should_run_query ) {
return;
}
global $wpdb;
/**
* Update session table with the data
*/
$query = $wpdb->prepare( "UPDATE `" . $wpdb->prefix . "options` SET `autoload` = %s WHERE (`option_name` LIKE '%wfocu_c_%' OR `option_name` LIKE '%wfacp_c_%') AND `autoload` LIKE 'yes' AND `option_name` NOT LIKE 'wfacp_css_migrated'", 'no' );
$wpdb->query( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
update_option( '_bwf_upgrade_1_9_14', 'yes' );
}
public function maybe_swap_order_to_make_it_correct() {
global $menu, $submenu;
if ( ! isset( $submenu['woofunnels'] ) ) {
return;
}
$get_parent_position = $this->get_parent_position( $menu );
$get_autonami_position = $this->get_autonami_position( $menu );
if ( false === $get_parent_position ) {
return;
}
if ( ! isset( $menu[ $get_autonami_position ] ) || ! is_array( $menu[ $get_autonami_position ] ) || 'autonami' !== $menu[ $get_autonami_position ][2] ) {
return;
}
$this->array_swap( $menu, $get_parent_position, $get_autonami_position );
}
/**
* @hooked over admin_head::-1
* Handles menu order for woofunnels submenu as it gets registered by the different plugin on different priorities
*/
public function maybe_correct_submenu_order() {
global $submenu, $menu, $woofunnels_menu_slug;
if ( ! isset( $submenu['woofunnels'] ) ) {
return;
}
$woofunnels_menu_slug = 'woofunnels';
$get_all_submenu = $submenu['woofunnels'];
/**
* get the top slug/submenu to play as parent menu
*/
$get_slug = $this->get_top_slug( $get_all_submenu );
if ( empty( $get_slug ) ) {
return;
}
/**
* get 'woofunnels' parent menu position so that we can alter it
*/
$get_parent_position = $this->get_parent_position( $menu );
if ( false === $get_parent_position ) {
return;
}
/**
* Assign found submenu in place of woofunnels to be shown as first menu in the series
*/
$menu[ $get_parent_position ][2] = $get_slug;
/**
* Unset woofunnels we do not need it
*/
unset( $submenu['woofunnels'] );
/**
* get the menu order sorted by placing license at the bottom
*/
$get_all_submenu = $this->get_current_order( $get_all_submenu );
/**
* Manage menu URL
*/
$get_all_submenu = array_map( function ( $val ) {
$val[2] = 'admin.php?page=' . $val[2];
return $val;
}, $get_all_submenu );
/**
* Place correct submenu in the global
*/
$submenu[ $get_slug ] = $get_all_submenu;
$woofunnels_menu_slug = $get_slug;
/**
* manage highlighting the menus
*/ global $parent_file, $plugin_page, $submenu_file, $current_page;
if ( true === $this->is_our_submenu( $plugin_page, $get_all_submenu ) ) :
$parent_file = $get_slug;//phpcs:ignore
$submenu_file = 'admin.php?page=' . $plugin_page;//phpcs:ignore
endif;
}
public function get_top_slug( $submenu ) {
if ( isset( $submenu[1][2] ) ) {
return $submenu[1][2];
}
return '';
}
function array_swap( &$array, $swap_a, $swap_b ) {
list( $array[ $swap_a ], $array[ $swap_b ] ) = array( $array[ $swap_b ], $array[ $swap_a ] );
}
public function get_parent_position( $menus ) {
$found = false;
foreach ( $menus as $key => $menu ) {
if ( 'woofunnels' === $menu[2] ) {
$found = $key;
break;
}
}
return $found;
}
public function get_autonami_position( $menus ) {
$found = false;
foreach ( $menus as $key => $menu ) {
if ( 'autonami' === $menu[2] ) {
$found = $key;
break;
}
}
return $found;
}
public function get_current_order( $get_all_submenu ) {
$get_license_config = $get_all_submenu[0];
array_shift( $get_all_submenu );
$get_all_submenu[ count( $get_all_submenu ) ] = $get_license_config;
return $get_all_submenu;
}
public function is_our_submenu( $plugin_page, $get_all_submenu ) {
$found = false;
foreach ( $get_all_submenu as $menu ) {
if ( 'admin.php?page=' . $plugin_page === $menu[2] ) {
$found = true;
break;
}
}
return $found;
}
public function correct_sub_menu_order() {
global $submenu, $menu;
/**
* change the title of the woofunnels to the new menu
*/
foreach ( $menu as &$men ) {
if ( isset( $men[5] ) && $men[5] === 'toplevel_page_woofunnels' ) {
$men[0] = 'FunnelKit';
$men[3] = 'FunnelKit';
}
}
if ( ! isset( $submenu['bwf'] ) ) {
return;
}
$new_sub_menu = [];
$any_external = false;
$max_count = 90;
$additional_break = false;
foreach ( $submenu['bwf'] as $key => $sub_item ) {
if ( ! current_user_can( $sub_item[1] ) ) {
continue;
}
if ( "admin.php?page=woofunnels" === $sub_item[2] ) {
continue;
}
switch ( $sub_item[2] ) {
case "admin.php?page=bwf":
$sub_item[4] = '';
$new_sub_menu[0] = $sub_item;
break;
case "admin.php?page=bwf&path=/funnels":
$new_sub_menu[10] = $sub_item;
break;
case "admin.php?page=bwf&path=/store-checkout":
$new_sub_menu[11] = $sub_item;
$new_sub_menu[11][4] = 'bwf_store_checkout';
break;
case "admin.php?page=bwf&path=/analytics":
$new_sub_menu[12] = $sub_item;
break;
case "admin.php?page=bwf&path=/templates":
$new_sub_menu[13] = $sub_item;
break;
case "admin.php?page=bwf_ab_tests":
$new_sub_menu[20] = $sub_item;
$any_external = true;
break;
case "admin.php?page=bwfcrm-contacts":
$sub_item[4] = 'bwf_admin_menu_b_top';
$new_sub_menu[70] = $sub_item;
$any_external = true;
break;
case "admin.php?page=autonami":
$new_sub_menu[80] = $sub_item;
$any_external = true;
break;
case "admin.php?page=bwf-campaigns":
$new_sub_menu[90] = $sub_item;
$any_external = true;
break;
case "admin.php?page=wfacp":
$any_external = true;
$new_sub_menu[40] = $sub_item;
break;
case "admin.php?page=wfch":
$any_external = true;
$new_sub_menu[45] = $sub_item;
break;
case "admin.php?page=wfob":
$any_external = true;
$new_sub_menu[50] = $sub_item;
break;
case "admin.php?page=upstroke":
$any_external = true;
$new_sub_menu[55] = $sub_item;
break;
default:
if ( false === $additional_break ) {
$additional_break = $max_count + 1;
}
$new_sub_menu[ $max_count + 1 ] = $sub_item;
$max_count ++;
break;
}
}
if ( ! empty( $new_sub_menu ) && count( $new_sub_menu ) > 0 ) {
/** Assigning class above native plugins */
if ( isset( $new_sub_menu[40] ) ) {
$new_sub_menu[40][4] = 'bwf_admin_menu_b_top';
} elseif ( isset( $new_sub_menu[45] ) ) {
$new_sub_menu[45][4] = 'bwf_admin_menu_b_top';
} elseif ( isset( $new_sub_menu[50] ) ) {
$new_sub_menu[50][4] = 'bwf_admin_menu_b_top';
} elseif ( isset( $new_sub_menu[55] ) ) {
$new_sub_menu[55][4] = 'bwf_admin_menu_b_top';
}
ksort( $new_sub_menu );
$submenu['bwf'] = $new_sub_menu;
ob_start();
?>
<style>
#adminmenu li.bwf_admin_menu_b_top {
border-top: 1px dashed #65686b;
padding-top: 5px;
margin-top: 5px
}
#adminmenu li.bwf_admin_menu_b_bottom {
border-bottom: 1px dashed #65686b;
padding-bottom: 5px;
margin-bottom: 5px
}
</style>
<?php
echo ob_get_clean(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
}
public function correct_sub_menu_order_legacy() {
global $submenu;
if ( ! isset( $submenu['bwf_dashboard'] ) ) {
return;
}
$new_sub_menu = [];
$section = filter_input( INPUT_GET, 'section', FILTER_UNSAFE_RAW );
$aero_settings = filter_input( INPUT_GET, 'tab', FILTER_UNSAFE_RAW );
$aero_page = filter_input( INPUT_GET, 'page', FILTER_UNSAFE_RAW );
foreach ( $submenu['bwf_dashboard'] as $key => $sub_item ) {
if ( ! current_user_can( $sub_item[1] ) ) {
continue;
}
switch ( $sub_item[2] ) {
case "admin.php?page=bwf_dashboard":
$sub_item[4] = 'bwf_admin_menu_b_bottom';
$new_sub_menu[0] = $sub_item;
break;
case "admin.php?page=bwf_funnels":
$new_sub_menu[10] = $sub_item;
break;
case "admin.php?page=bwf_ab_tests":
$new_sub_menu[20] = $sub_item;
break;
case "admin.php?page=bwfcrm-contacts":
$sub_item[4] = 'bwf_admin_menu_b_top';
$new_sub_menu[70] = $sub_item;
break;
case "admin.php?page=autonami":
$new_sub_menu[80] = $sub_item;
break;
case "admin.php?page=bwf-campaigns":
$new_sub_menu[90] = $sub_item;
break;
case "admin.php?page=woofunnels_settings":
$sub_item[4] = 'bwf_admin_menu_b_top';
if ( in_array( $section, [ 'bwf_settings', 'lp-settings', 'op-settings', 'ty-settings' ] ) ) {
$sub_item[4] .= ' current';
} elseif ( 'settings' === $aero_settings && 'wfacp' === $aero_page ) {
$sub_item[4] .= ' current';
}
$new_sub_menu[140] = $sub_item;
break;
case "admin.php?page=woofunnels":
$new_sub_menu[150] = $sub_item;
break;
case "admin.php?page=wfacp":
$new_sub_menu[40] = $sub_item;
break;
case "admin.php?page=wfch":
$new_sub_menu[45] = $sub_item;
break;
case "admin.php?page=wfob":
$new_sub_menu[50] = $sub_item;
break;
case "admin.php?page=upstroke":
$new_sub_menu[55] = $sub_item;
break;
}
}
if ( ! empty( $new_sub_menu ) && count( $new_sub_menu ) > 0 ) {
/** Assigning class above native plugins */
if ( isset( $new_sub_menu[40] ) ) {
$new_sub_menu[40][4] = 'bwf_admin_menu_b_top';
} elseif ( isset( $new_sub_menu[45] ) ) {
$new_sub_menu[45][4] = 'bwf_admin_menu_b_top';
} elseif ( isset( $new_sub_menu[50] ) ) {
$new_sub_menu[50][4] = 'bwf_admin_menu_b_top';
}
ksort( $new_sub_menu );
$submenu['bwf_dashboard'] = $new_sub_menu;
ob_start();
?>
<style>
#adminmenu li.bwf_admin_menu_b_top {
border-top: 1px dashed #65686b;
padding-top: 5px;
margin-top: 5px
}
#adminmenu li.bwf_admin_menu_b_bottom {
border-bottom: 1px dashed #65686b;
padding-bottom: 5px;
margin-bottom: 5px
}
</style>
<?php
echo ob_get_clean(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
}
public function maybe_clear_plugin_update_transients() {
delete_transient( 'update_plugins' );
delete_site_transient( 'update_plugins' );
global $wpdb;
$wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->options WHERE option_name LIKE %s", '%_bwf_version_cache_%' ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
public function print_css() {
?>
<style>
.wp-admin #adminmenu .toplevel_page_woofunnels .wp-menu-image:before {
content: none;
}
.wp-admin #adminmenu .toplevel_page_woofunnels .wp-not-current-submenu .wp-menu-image {
background-image: url("<?php echo esc_url( plugin_dir_url( WooFunnel_Loader::$ultimate_path ) . 'woofunnels/assets/img/bwf-icon-grey.svg'); ?>") !important;
}
.wp-admin #adminmenu .toplevel_page_woofunnels .wp-has-current-submenu .wp-menu-image {
background-image: url("<?php echo esc_url( plugin_dir_url( WooFunnel_Loader::$ultimate_path ) . 'woofunnels/assets/img/bwf-icon-white.svg'); ?>") !important;
}
.wp-admin #adminmenu .toplevel_page_woofunnels .wp-menu-image {
background-repeat: no-repeat;
position: relative;
top: 5px;
background-position: 50% 25%;
background-size: 60%;
}
</style> <?php
}
}
}