Current File : /home/kelaby89/www/wp/wp-content/plugins/trx_addons/components/cpt/layouts/layouts-submenu.php |
<?php
/**
* ThemeREX Addons Layouts: Use layouts as submenu
*
* @package ThemeREX Addons
* @since v1.6.39
*/
// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
exit;
}
if ( ! defined( 'TRX_ADDONS_MENU_SETTINGS_META_KEY' ) ) define( 'TRX_ADDONS_MENU_SETTINGS_META_KEY', 'trx_addons_nav_menu_item_data' );
if ( ! defined( 'TRX_ADDONS_MENU_SETTINGS_META_KEY_OLD' ) ) define( 'TRX_ADDONS_MENU_SETTINGS_META_KEY_OLD', '_menu_item_layout_submenu' );
// Add layout's type in the list
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_add_layout_type' ) ) {
add_filter( 'trx_addons_filter_layout_types', 'trx_addons_cpt_layouts_submenu_add_layout_type' );
function trx_addons_cpt_layouts_submenu_add_layout_type( $list ) {
trx_addons_array_insert_after( $list, 'footer', array( 'submenu' => esc_html__( 'Submenu', 'trx_addons' ) ) );
return $list;
}
}
// Store layout id to the menu item's post_meta
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_save_settings_to_menu_items' ) ) {
add_action( 'wp_update_nav_menu', 'trx_addons_cpt_layouts_submenu_save_settings_to_menu_items', 10, 1 );
function trx_addons_cpt_layouts_submenu_save_settings_to_menu_items( $nav_menu_selected_id ) {
$menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array(
'orderby' => 'ID',
'output' => ARRAY_A,
'output_key' => 'ID',
'post_status' => 'draft,publish'
) );
foreach ( $menu_items as $item ) {
if ( ! empty( $_POST['menu-item-settings'][ $item->db_id ] ) ) {
$settings = json_decode( trx_addons_stripslashes( $_POST['menu-item-settings'][ $item->db_id ] ), true );
if ( is_array( $settings ) ) {
update_post_meta( $item->db_id, TRX_ADDONS_MENU_SETTINGS_META_KEY, $settings );
}
}
}
}
}
// Add settings to the menu item object
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_load_settings_to_menu_items' ) ) {
add_filter( 'wp_setup_nav_menu_item', 'trx_addons_cpt_layouts_submenu_load_settings_to_menu_items' );
function trx_addons_cpt_layouts_submenu_load_settings_to_menu_items( $menu_item ) {
if ( isset( $menu_item->post_type ) && 'nav_menu_item' == $menu_item->post_type && ! isset( $menu_item->settings)) {
$menu_item->settings = get_post_meta( $menu_item->ID, TRX_ADDONS_MENU_SETTINGS_META_KEY, true );
}
return $menu_item;
}
}
// Add class 'menu-item-has-children' to the items with layouts submenu
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_add_class_has_children_to_menu_items' ) ) {
add_filter( 'wp_nav_menu_objects', 'trx_addons_cpt_layouts_submenu_add_class_has_children_to_menu_items', 10, 2 );
function trx_addons_cpt_layouts_submenu_add_class_has_children_to_menu_items( $menu_items, $args = null ) {
if ( is_array( $menu_items ) ) {
foreach ( $menu_items as $k => $item ) {
if ( ! empty( $item->settings['layout_submenu'] ) && (int)$item->settings['layout_submenu'] > 0 ) {
$menu_items[$k]->classes[] = 'menu-item-has-children';
$menu_items[$k]->classes[] = 'menu-item-has-children-layout';
if ( ! empty( $args->menu_class ) && strpos( $args->menu_class, 'trx-addons-nav-menu' ) !== false ) {
$menu_items[$k]->classes[] = 'trx-addons-mega-nav-item'; // For the NavMenu widget
}
}
if ( empty( $args->menu_class ) || strpos( $args->menu_class, 'trx-addons-nav-menu' ) === false ) {
if ( ! empty( $item->settings['submenu_pos'] ) && $item->settings['submenu_pos'] == 'static' ) {
$menu_items[$k]->classes[] = 'menu-item-position-static';
}
if ( ! empty( $item->settings['badge_text'] ) ) {
$menu_items[$k]->classes[] = 'menu-item-has-badge';
}
if ( ! empty( $item->settings['icon'] ) ) {
$menu_items[$k]->classes[] = 'menu-item-has-icon';
}
}
if ( ! empty( $item->settings['submenu_fullwidth'] ) ) {
$menu_items[$k]->classes[] = 'trx_addons_' . $item->settings['submenu_fullwidth'];
}
if ( ! empty( $item->settings['submenu_width'] ) && ( empty( $item->settings['submenu_fullwidth'] ) || $item->settings['submenu_fullwidth'] == 'no_stretch' ) ) {
$menu_items[$k]->classes[] = trx_addons_add_inline_css_class( 'width: ' . $item->settings['submenu_width'] . 'px !important;', ' > ul' );
}
}
}
return $menu_items;
}
}
// Add layout content to the item's output ( if 'layouts submenu' is set for this item )
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_show_layout' ) ) {
add_filter( 'walker_nav_menu_start_el', 'trx_addons_cpt_layouts_submenu_show_layout', 10, 4 );
function trx_addons_cpt_layouts_submenu_show_layout( $output, $item, $depth, $args ) {
// Add an icon and a badge to the item's output (only for sc_layouts menu, not for NavMenu widget)
if ( empty( $args->menu_class ) || strpos( $args->menu_class, 'trx-addons-nav-menu' ) === false ) {
$icon_html = $badge_html = '';
if ( ! empty( $item->settings['icon'] ) ) {
$icon_html = '<i class="menu-item-icon '
. esc_attr( $item->settings['icon'] )
. ( ! empty( $item->settings['icon_color'] ) ? ' ' . trx_addons_add_inline_css_class( 'color:' . $item->settings['icon_color'] ) : '' )
. ( ! empty( $item->settings['icon_hover'] ) ? ' ' . trx_addons_add_inline_css_class( 'color:' . $item->settings['icon_hover'], '', '.menu-item > a:hover > ' ) : '' )
. '"></i>';
}
if ( ! empty( $item->settings['badge_text'] ) ) {
$css = '';
$badge_class = 'menu-item-badge';
if ( ! empty( $item->settings['badge_color'] ) ) {
$css .= 'color:' . $item->settings['badge_color'] . ';';
}
if ( ! empty( $item->settings['badge_bg_color'] ) ) {
$css .= 'background-color:' . $item->settings['badge_bg_color'] . ';';
}
if ( ! empty( $item->settings['badge_font_size'] ) && (int)$item->settings['badge_font_size'] > 0 ) {
$css .= 'font-size:' . $item->settings['badge_font_size'] . 'px !important;';
}
if ( ! empty( $item->settings['badge_font_bold'] ) && (int)$item->settings['badge_font_bold'] > 0 ) {
$css .= 'font-weight:bold !important;';
}
if ( ! empty( $item->settings['badge_offset_x'] ) && (int)$item->settings['badge_offset_x'] != 0 ) {
$css .= 'left:' . $item->settings['badge_offset_x'] . 'px;';
}
if ( ! empty( $item->settings['badge_offset_y'] ) && (int)$item->settings['badge_offset_y'] != 0 ) {
$css .= 'top:' . $item->settings['badge_offset_y'] . 'px;';
}
if ( ! empty( $css ) ) {
$badge_class .= ' ' . trx_addons_add_inline_css_class( $css );
}
$badge_html = '<i class="' . esc_attr( $badge_class ) . '">'
. esc_html( $item->settings['badge_text'] )
. '</i>';
}
// Add icon and badge to the item's output (inside the link)
if ( ! empty( $icon_html ) || ! empty( $badge_html ) ) {
$output = preg_replace( '/(<a[^>]*>)/', '$1' . $icon_html . $badge_html, $output );
}
}
// Add layout content to the item's output ( if 'layouts submenu' is set for this item )
if ( ! empty( $item->settings['layout_submenu'] ) && (int)$item->settings['layout_submenu'] > 0 ) {
ob_start();
// Start submenu creation
trx_addons_sc_stack_push( 'trx_sc_layouts_submenu' );
// Simulate usage shortcode to prevent wrap widgets to the class 'sc_layouts_item'
trx_addons_sc_stack_push( 'trx_sc_layouts' );
// Make layout with submenu
do_action( 'trx_addons_action_before_show_layout_submenu' );
trx_addons_cpt_layouts_show_layout( $item->settings['layout_submenu'] );
do_action( 'trx_addons_action_after_show_layout_submenu' );
// End simulation
trx_addons_sc_stack_pop();
// End submenu creation
trx_addons_sc_stack_pop();
// Get layout and output it (if not empty)
$submenu = ob_get_contents();
ob_end_clean();
if ( ! empty( $submenu ) ) {
$output .= '<ul class="'
. ( ! empty( $args->menu_class ) && strpos( $args->menu_class, 'trx-addons-nav-menu' ) !== false
? 'trx-addons-mega-content-container'
: 'sc_layouts_submenu'
)
. '"'
. ( ! empty( $item->settings['submenu_width'] ) && (int)$item->settings['submenu_width'] > 0
? ' style="width: ' . $item->settings['submenu_width'] . 'px;"'
: ''
)
. '>'
. '<li class="sc_layouts_submenu_wrap">' . trim( $submenu ) . '</li>'
. '</ul>';
}
}
return $output;
}
}
//-------------------------------------------------------
// ADMIN AREA: MENU EDITOR
//-------------------------------------------------------
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_load_scripts_admin' ) ) {
add_action( 'admin_footer', 'trx_addons_cpt_layouts_submenu_load_scripts_admin' );
/**
* Load required styles and scripts for admin mode for the menu editor
*
* @hooked admin_footer
*/
function trx_addons_cpt_layouts_submenu_load_scripts_admin() {
static $loaded = false;
if ( $loaded ) return;
$loaded = true;
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
if ( ! empty( $screen->id ) && 'nav-menus' === $screen->id ) {
// wp_enqueue_style( 'wp-color-picker' );
include_once trx_addons_get_file_dir( 'templates/tpl.admin-menu-settings.php' );
}
}
}
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_need_options' ) ) {
add_filter( 'trx_addons_filter_need_options', 'trx_addons_cpt_layouts_submenu_need_options' );
/**
* Check if current screen need to load options scripts and styles
*
* @hooked trx_addons_filter_need_options
*
* @param bool $need Filter value
*
* @return bool True if current screen need to load options scripts and styles
*/
function trx_addons_cpt_layouts_submenu_need_options( $need = false ) {
if ( ! $need ) {
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
if ( ! empty( $screen->id ) && 'nav-menus' === $screen->id ) {
$need = true;
}
}
return $need;
}
}
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_load_scripts' ) ) {
add_action( "admin_enqueue_scripts", 'trx_addons_cpt_layouts_submenu_load_scripts' );
/**
* Enqueue scripts and styles for the user profile
*
* @hooked admin_enqueue_scripts
*/
function trx_addons_cpt_layouts_submenu_load_scripts() {
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
if ( ! empty( $screen->id ) && 'nav-menus' === $screen->id ) {
wp_localize_script( 'trx_addons-options', 'TRX_ADDONS_DEPENDENCIES',
trx_addons_get_options_dependencies( trx_addons_cpt_layouts_submenu_get_fields() ) );
}
}
}
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_get_fields' ) ) {
/**
* Return fields for the menu item settings
*
* @return array Menu setting fields
*/
function trx_addons_cpt_layouts_submenu_get_fields() {
return apply_filters( 'trx_addons_filter_menu_item_settings', array(
'layout_submenu' => array(
'title' => esc_html__( 'Layout of submenu (optional)', 'trx_addons' ),
'desc' => wp_kses(
__( 'Select a pre-created Layout to use as a submenu.', 'trx_addons' )
. ' '
. sprintf( '<a href="%1$s" class="trx_addons_post_editor trx_addons_hidden" target="_blank">%2$s</a>',
admin_url( apply_filters( 'trx_addons_filter_post_edit_link', sprintf( "post.php?post=%d&action=edit", 0 ), 0 ) ),
__( 'Open selected layout in a new tab to edit', 'trx_addons' )
),
'trx_addons_kses_content'
),
'std' => 'none',
'val' => 'none', // Need to specify 'val' equal to 'std' (for all options) because options are not loaded from the database (its an option list for the popup dialog)
'options' => trx_addons_get_list_layouts( true, 'submenu', 'title' ),
'type' => 'select',
),
'submenu_pos' => array(
'title' => esc_html__( 'Submenu position', 'trx_addons' ),
'desc' => wp_kses( __( 'A position of the parent item.', 'trx_addons' ), 'trx_addons_kses_content' ),
'dependency' => array(
'layout_submenu' => array( '^none' ),
),
'std' => 'default',
'val' => 'default',
'options' => array(
'default' => esc_html__( 'Default', 'trx_addons' ),
'static' => esc_html__( 'Static', 'trx_addons' ),
),
'type' => 'select',
),
'submenu_depth' => array(
'title' => esc_html__( 'Submenu depth', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Depth of current menu level', 'trx_addons') ),
'dependency' => array(
'layout_submenu' => array( '^none' ),
),
'std' => '0',
'val' => '0',
'hidden' => true, // 'hidden' => 'true' - hide this field in the 'Menu Settings' dialog
'type' => 'text'
),
// 'submenu_fullwidth' => array(
// 'title' => esc_html__( 'Submenu fullwidth', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Make this submenu fullwidth (only for the first level menu)', 'trx_addons') ),
// 'dependency' => array(
// 'layout_submenu' => array( '^none' ),
// 'submenu_depth' => array( '0' ),
// ),
// 'std' => '0',
// 'val' => '0',
// 'type' => 'switch'
// ),
'submenu_fullwidth' => array(
'title' => esc_html__( 'Submenu stretch', 'trx_addons' ),
'desc' => wp_kses_data( __('Stretch this submenu (only for the first level menu)', 'trx_addons') ),
'dependency' => array(
// 'layout_submenu' => array( '^none' ),
'submenu_depth' => array( '0' ),
),
'std' => '',
'val' => '',
'options' => array(
'' => esc_html__( 'Default', 'trx_addons' ),
'no_stretch' => esc_html__( 'No stretch', 'trx_addons' ),
'stretch_content' => esc_html__( 'Boxed bg & content', 'trx_addons' ),
'stretch_window_boxed' => esc_html__( 'Fullwidth bg, boxed content', 'trx_addons' ),
'stretch_window' => esc_html__( 'Fullwidth bg & content', 'trx_addons' ),
),
'type' => 'select'
),
'submenu_width' => array(
'title' => esc_html__( 'Submenu width', 'trx_addons' ),
'desc' => wp_kses_data( __('If 0 - a default width is used.', 'trx_addons') ),
'dependency' => array(
'layout_submenu' => array( '^none' ),
'submenu_fullwidth' => array( 'is_empty', 'no_stretch' ),
),
'std' => 0,
'val' => 0,
'min' => 0,
'max' => 2000,
'type' => 'slider'
),
'icon' => array(
'title' => esc_html__( 'Item Icon', 'trx_addons'),
// 'desc' => wp_kses_data( __('Select an icon for the item', 'trx_addons') ),
'std' => '',
'val' => '',
'options' => array(),
'style' => trx_addons_get_setting('icons_type'),
'type' => 'icons'
),
'icon_color' => array(
'title' => esc_html__( 'Icon Color', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Color of the icon', 'trx_addons') ),
'dependency' => array(
'icon' => array( 'not_empty' ),
),
'std' => '',
'val' => '',
'type' => 'color'
),
'icon_hover' => array(
'title' => esc_html__( 'Icon Hover', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Hover color of the icon', 'trx_addons') ),
'dependency' => array(
'icon' => array( 'not_empty' ),
),
'std' => '',
'val' => '',
'type' => 'color'
),
'badge_text' => array(
'title' => esc_html__( 'Badge text', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Text of the badge', 'trx_addons') ),
'std' => '',
'val' => '',
'type' => 'text'
),
'badge_color' => array(
'title' => esc_html__( 'Badge color', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Color of the badge', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => '',
'val' => '',
'type' => 'color'
),
'badge_bg_color' => array(
'title' => esc_html__( 'Badge background', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Background color of the badge', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => '',
'val' => '',
'type' => 'color'
),
'badge_font_size' => array(
'title' => esc_html__( 'Badge font size', 'trx_addons' ),
'desc' => wp_kses_data( __('Font size (in px) of the badge. If 0 - a default size is used.', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => 0,
'val' => 0,
'min' => 0,
'max' => 30,
'type' => 'slider'
),
'badge_font_bold' => array(
'title' => esc_html__( 'Badge font bold', 'trx_addons' ),
// 'desc' => wp_kses_data( __('Font weight of the badge.', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => '0',
'val' => '0',
'type' => 'switch'
),
'badge_offset_x' => array(
'title' => esc_html__( 'Badge X offset', 'trx_addons' ),
'desc' => wp_kses_data( __('Offset of the badge on the X axis.', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => 0,
'val' => 0,
'min' => -20,
'max' => 20,
'type' => 'slider'
),
'badge_offset_y' => array(
'title' => esc_html__( 'Badge Y offset', 'trx_addons' ),
'desc' => wp_kses_data( __('Offset of the badge on the Y axis.', 'trx_addons') ),
'dependency' => array(
'badge_text' => array( 'not_empty' ),
),
'std' => 0,
'val' => 0,
'min' => -20,
'max' => 20,
'type' => 'slider'
),
) );
}
}
// Substitute standard WordPress menu edit walker
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_set_nav_menu_edit_walker_class' ) ) {
add_filter( 'wp_edit_nav_menu_walker', 'trx_addons_cpt_layouts_submenu_set_nav_menu_edit_walker_class', 10, 2 );
function trx_addons_cpt_layouts_submenu_set_nav_menu_edit_walker_class( $class = '', $menu_id = 0 ) {
return 'THEMEREX_ADDONS_NAV_MENU_EDIT_WALKER';
}
}
// Standard WordPress Walker_Nav_Menu_Edit class
require_once( ABSPATH . 'wp-admin/includes/class-walker-nav-menu-edit.php' );
if ( ! class_exists( 'THEMEREX_ADDONS_NAV_MENU_EDIT_WALKER' ) ) {
class THEMEREX_ADDONS_NAV_MENU_EDIT_WALKER extends Walker_Nav_Menu_Edit {
var $layouts = false;
/**
* Start the element output.
*
* @see Walker_Nav_Menu::start_el()
* @since 3.0.0
*
* @global int $_wp_nav_menu_max_depth
*
* @param string $output Used to append additional content (passed by reference).
* @param object $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
* @param array $args Not used.
* @param int $id Not used.
*/
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$tmp = $output;
parent::start_el( $output, $item, $depth, $args, $id );
$item_id = $item->ID;
$item_html = substr( $output, strlen( $tmp ) );
// Get list of layouts
if ( $this->layouts === false ) {
$this->layouts = trx_addons_get_list_layouts( true, 'submenu', 'title' );
}
// Add layouts selector if at least one layout is present
// (item 0 is '- Not Selected -')
/*
if ( is_array( $this->layouts ) && count( $this->layouts ) > 1 ) {
$html = '<p class="field-layout-submenu description description-wide">
<label for="edit-menu-item-layout-submenu-' . esc_attr( $item_id ) . '">'
. '<span class="field-title-layout-submenu">' . esc_html__( 'Layout of submenu (optional)', 'trx_addons' ) . '</span>'
. sprintf( '<a href="%1$s" class="trx_addons_post_editor' . ( empty( $item->layout_submenu ) || intval( $item->layout_submenu ) == 0 ? ' trx_addons_hidden' : '' ) . '" target="_blank">%2$s</a>',
admin_url( apply_filters( 'trx_addons_filter_post_edit_link', sprintf( "post.php?post=%d&action=edit", $item->layout_submenu ), $item->layout_submenu) ),
__( "Open selected layout in a new tab to edit", 'trx_addons' )
)
.'<select id="edit-menu-item-layout-submenu-' . esc_attr( $item_id ) . '"'
. ' name="menu-item-layout-submenu[' . esc_attr( $item_id ) . ']"'
. ' class="widefat code edit-menu-item-layout-submenu trx_addons_layout_selector"'
. '>';
foreach ( $this->layouts as $id => $title ) {
$html .= '<option value="' . esc_attr( $id ) . '"' . ( ! empty( $item->layout_submenu ) && $item->layout_submenu == $id ? ' selected="selected"' : '' ) .'>'
. esc_html( $title )
. '</option>';
}
$html .= '
</select>
</label>
</p>';
$item_html = str_replace( '<fieldset class="field-move', $html . '<fieldset class="field-move', $item_html );
}
*/
// Mark the item as 'menu-item-has-submenu-settings' and 'menu-item-has-submenu-layout' if it has a correspond settings
$add_classes = '';
if ( ! empty( $item->settings['icon'] ) || ! empty( $item->settings['badge_text'] ) ) {
$add_classes = ' menu-item-has-submenu-settings';
}
if ( ! empty( $item->settings['layout_submenu'] ) && (int)$item->settings['layout_submenu'] > 0 ) {
$add_classes .= ' menu-item-has-submenu-layout';
}
if ( ! empty( $add_classes ) ) {
$item_html = preg_replace( '/(<li[^>]*class="menu-item[\s]*)/U', '$1' . $add_classes . ' ', $item_html );
}
// Add a link "Settings" to the item
$item_html = preg_replace(
'/(<div class="menu-item-actions[^>]+>)/',
'$1<a class="item-settings" id="settings-' . $item_id . '" href="#">' . __( 'Settings', 'trx_addons' ) . '</a>'
. '<input type="hidden" id="edit-menu-item-settings-' . $item_id . '"'
. ' name="menu-item-settings[' . $item_id . ']"'
. ' value="' . esc_attr( json_encode( $item->settings ) ) . '"'
. '>',
$item_html
);
// Add a new item html to the output
$output = $tmp . $item_html;
}
}
}
// Convert old parameters of menu items to the new format
//-------------------------------------------------------
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_convert_params' ) ) {
add_action( 'trx_addons_action_is_new_version_of_plugin', 'trx_addons_cpt_layouts_submenu_convert_params', 10, 2 );
add_action( 'trx_addons_action_importer_import_end', 'trx_addons_cpt_layouts_submenu_convert_params' );
add_action( 'admin_init', 'trx_addons_cpt_layouts_submenu_convert_params' );
/**
* Convert old parameters of menu items (submenu layout id) to the new format (settings array)
* after update plugin ThemeREX Addons to the new version or after import demo data.
* Get all metadata '_menu_item_layout_submenu' and convert it to the new format.
*
* @hooked trx_addons_action_is_new_version_of_plugin
* @hooked trx_addons_action_importer_import_end
* @hooked admin_init
*
* @param string $new_version New version of the plugin.
* @param string $old_version Old version of the plugin.
*/
function trx_addons_cpt_layouts_submenu_convert_params( $new_version = '', $old_version = '' ) {
$db_key = 'cpt_layouts_submenu_convert_params';
$db_limit = trx_addons_db_update_get_limit();
$db_offset = trx_addons_db_update_get_state( $db_key );
if ( $db_offset === 0 ) {
return;
} else if ( $db_offset === false ) {
$db_offset = 0;
}
if ( empty( $old_version ) ) {
$old_version = get_option( 'trx_addons_version', '1.0' );
}
if ( version_compare( $old_version, '2.29.4', '<' ) || current_action() == 'trx_addons_action_importer_import_end' || $db_offset > 0 ) {
global $wpdb;
$rows = $wpdb->get_results( "SELECT post_id, meta_id, meta_value
FROM {$wpdb->postmeta}
WHERE meta_key='" . TRX_ADDONS_MENU_SETTINGS_META_KEY_OLD . "' && meta_value!=''
ORDER BY meta_id ASC
LIMIT {$db_offset}, {$db_limit}"
);
$total = is_array( $rows ) ? count( $rows ) : 0;
if ( $total > 0 ) {
foreach ( $rows as $row ) {
$meta = get_post_meta( $row->post_id, TRX_ADDONS_MENU_SETTINGS_META_KEY, true );
if ( ! is_array( $meta ) ) {
$meta = array();
}
$meta['layout_submenu'] = $row->meta_value;
update_post_meta( $row->post_id, TRX_ADDONS_MENU_SETTINGS_META_KEY, $meta );
}
if ( $total == $db_limit ) {
$db_offset += $total;
trx_addons_db_update_set_state( $db_key, $db_offset );
} else {
trx_addons_db_update_set_state( $db_key, 0 );
}
} else {
trx_addons_db_update_set_state( $db_key, 0 );
}
}
}
}
if ( ! function_exists( 'trx_addons_cpt_layouts_submenu_convert_params_2' ) ) {
add_action( 'trx_addons_action_is_new_version_of_plugin', 'trx_addons_cpt_layouts_submenu_convert_params_2', 10, 2 );
add_action( 'trx_addons_action_importer_import_end', 'trx_addons_cpt_layouts_submenu_convert_params_2' );
add_action( 'admin_init', 'trx_addons_cpt_layouts_submenu_convert_params_2' );
/**
* Convert old parameters of menu items (submenu layout id) to the new format (settings array)
* after update plugin ThemeREX Addons to the new version or after import demo data.
* Get all items with classes 'trx_addons_stretch_window%' or 'trx_addons_no_stretch' and convert its to the new format
*
* @hooked trx_addons_action_is_new_version_of_plugin
* @hooked trx_addons_action_importer_import_end
* @hooked admin_init
*
* @param string $new_version New version of the plugin.
* @param string $old_version Old version of the plugin.
*/
function trx_addons_cpt_layouts_submenu_convert_params_2( $new_version = '', $old_version = '' ) {
$db_key = 'cpt_layouts_submenu_convert_params_2';
$db_limit = trx_addons_db_update_get_limit();
$db_offset = trx_addons_db_update_get_state( $db_key );
if ( $db_offset === 0 ) {
return;
} else if ( $db_offset === false ) {
$db_offset = 0;
}
if ( empty( $old_version ) ) {
$old_version = get_option( 'trx_addons_version', '1.0' );
}
if ( version_compare( $old_version, '2.29.4', '<' ) || current_action() == 'trx_addons_action_importer_import_end' || $db_offset > 0 ) {
global $wpdb;
$rows = $wpdb->get_results( "SELECT post_id, meta_id, meta_value
FROM {$wpdb->postmeta}
WHERE meta_key='_menu_item_classes' && ( meta_value LIKE '%trx_addons_stretch_%' OR meta_value LIKE '%trx_addons_no_stretch%' )
ORDER BY meta_id ASC
LIMIT {$db_offset}, {$db_limit}"
);
$total = is_array( $rows ) ? count( $rows ) : 0;
if ( $total > 0 ) {
foreach ( $rows as $row ) {
$meta = get_post_meta( $row->post_id, TRX_ADDONS_MENU_SETTINGS_META_KEY, true );
if ( ! is_array( $meta ) ) {
$meta = array();
}
$classes = get_post_meta( $row->post_id, '_menu_item_classes', true );
if ( is_array( $classes ) ) {
foreach( $classes as $k => $class ) {
if ( strpos( $class, 'trx_addons_stretch_' ) !== false || strpos( $class, 'trx_addons_no_stretch' ) !== false ) {
$meta['submenu_fullwidth'] = str_replace( 'trx_addons_', '', $class );
unset( $classes[$k] );
break;
}
}
}
update_post_meta( $row->post_id, '_menu_item_classes', $classes );
update_post_meta( $row->post_id, TRX_ADDONS_MENU_SETTINGS_META_KEY, $meta );
}
if ( $total == $db_limit ) {
$db_offset += $total;
trx_addons_db_update_set_state( $db_key, $db_offset );
} else {
trx_addons_db_update_set_state( $db_key, 0 );
}
} else {
trx_addons_db_update_set_state( $db_key, 0 );
}
}
}
}