' . __( 'Default Sidebar', 'simple-page-sidebars' ) . '', array( __CLASS__, 'default_sidebar_settings_field' ), 'reading' ); } /** * Default sidebar option dropdown. * * @since 0.2.0 * @uses $wp_registered_sidebars */ public static function default_sidebar_settings_field() { global $wp_registered_sidebars; $default_sidebar_id = get_option( 'simple_page_sidebars_default_sidebar' ); $custom_sidebars = simple_page_sidebars_get_names(); ?> ID ); $custom_sidebars = simple_page_sidebars_get_names(); // Show an error message if a default sidebar hasn't been selected on the Reading settings screen. if ( ! get_option( 'simple_page_sidebars_default_sidebar' )) { echo '
'; } wp_nonce_field( 'update-page-sidebar_' . $page->ID, 'simplepagesidebars_page_sidebar_update_nonce', false ); include_once( SIMPLE_PAGE_SIDEBARS_DIR . 'admin/views/meta-box-page-sidebar.php' ); } /** * Custom sort the pages on the All Pages screen. * * Any pages without the '_sidebar_name' meta field won't appear in the * list when the pages are custom sorted. * * The $wp_query object is passed be reference and any changes made to it * will be reflected globally. * * @since 1.1.0 * @link https://codex.wordpress.org/Class_Reference/WP_Query * * @param object $wp_query The WP_Query object passed by reference. */ public static function parse_admin_query( $wp_query ) { // Ensure this only affects requests in the dashboard. if ( is_admin() && isset( $_GET['post_type'] ) && 'page' == $_GET['post_type'] ) { if ( ! empty( $_GET['orderby'] ) && 'simple-page-sidebar' == $_GET['orderby'] ) { // An example to sort results by a custom meta field. $wp_query->set( 'meta_key', '_sidebar_name' ); $wp_query->set( 'orderby', 'meta_value' ); // Set the order. $order = ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) ? 'desc' : 'asc'; $wp_query->set( 'order', $order ); } } } /** * Register sidebar column on the All Pages screen. * * @since 0.2.0 * @param array $columns Array of column names and corresponding IDs as keys. * @param array $columns The filtered columns array. */ public static function register_columns( $columns ) { $columns['simple-page-sidebar'] = __( 'Sidebar', 'simple-page-sidebars' ); return $columns; } /** * Register sortable columns on the All Pages screen. * * @since 1.1.0 * @param array $columns Array of query vars and corresponding column IDs as keys. * @return array $columns The filtered columns array. */ public static function register_sortable_columns( $columns ) { $columns['simple-page-sidebar'] = 'simple-page-sidebar'; return $columns; } /** * Display sidebar column on All Pages screen. * * @since 0.2.0 * @param string $column The ID of the column being displayed. * @param int $page_id The ID of the page the column is associated with. */ public static function display_columns( $column, $page_id ) { if ( 'simple-page-sidebar' == $column ) { $sidebar = self::get_page_sidebar( $page_id ); if ( $sidebar ) { // The edit link can be disabled to prevent confusion if support is added to other post types. if ( apply_filters( 'simple_page_sidebars_show_edit_link_in_column', true ) ) { printf( '%s', esc_url( self::get_sidebar_edit_link( $sidebar ) ), $sidebar ); } else { echo $sidebar; } } // Add the nonce here and copy it to the inline editor with javascript. $nonce = wp_create_nonce( 'update-page-sidebar_' . $page_id ); printf( '', esc_attr( $nonce ) ); } } /** * Sidebar dropdown field for quick edit mode. * * @since 0.2.0 * @param string $column The ID of the column being rendered. * @param string $post_type The type of post being updated. */ public static function quick_edit_custom_box( $column, $post_type ) { if ( 'page' != $post_type || 'simple-page-sidebar' != $column ) { return; } $sidebars = simple_page_sidebars_get_names(); ?> id || 'page' != $screen->post_type ) { return; } ?> query( $wpdb->prepare( "UPDATE $wpdb->postmeta SET meta_value=%s WHERE meta_key='_sidebar_name' AND meta_value=%s", $new_name, $current_name ) ); } // Update newly selected pages with the current sidebar name. elseif ( $update_pages = array_diff( $pages, $current_pages ) ) { foreach( $update_pages as $page_id ) { update_post_meta( $page_id, '_sidebar_name', addslashes( $current_name ) ); } } // The sidebar should have been removed from all pages. // Let WordPress move widgets to Inactive Sidebar, redirect to Widgets screen, and notify user. if ( empty( $pages ) ) { wp_safe_redirect( esc_url_raw( add_query_arg( 'simple-page-sidebars-message', 1, admin_url( 'widgets.php' ) ) ) ); exit; } // Migrate widgets if the sidebar name was changed. if ( $new_name ) { $sidebars_widgets = wp_get_sidebars_widgets(); $old_id = 'page-sidebar-' . sanitize_key( $current_name ); $new_id = 'page-sidebar-' . sanitize_key( $new_name ); // If new id matches an existing id, merge old widgets with new. if ( isset( $sidebars_widgets[ $new_id ] ) ) { $sidebars_widgets[ $new_id ] = array_merge( $sidebars_widgets[ $new_id ], $sidebars_widgets[ $old_id ] ); } // Otherwise, copy old widgets to new. elseif ( isset( $sidebars_widgets[ $old_id ] ) ) { $sidebars_widgets[ $new_id ] = $sidebars_widgets[ $old_id ]; } // Remove old widget area and save. unset( $sidebars_widgets[ $old_id ] ); #echo ''; print_r( $sidebars_widgets ); echo ''; exit; wp_set_sidebars_widgets( $sidebars_widgets ); } // Redirect back to sidebar edit screen with an update message. $name = ( ! empty( $new_name ) ) ? $new_name : $current_name; $redirect_link = self::get_sidebar_edit_link( $name, array( 'message' => 1 ) ); wp_safe_redirect( esc_url_raw( $redirect_link ) ); exit; } } /** * Display messages on the widgets page. * * @since 1.1.0 */ public static function widgets_page_messages() { $sidebars = simple_page_sidebars_get_names(); // Display an error message if a default sidebar hasn't been selected on the Reading settings screen. if ( ! get_option( 'simple_page_sidebars_default_sidebar' ) && ! empty( $sidebars ) ) { echo '
' . self::get_empty_default_sidebar_error() . '
__( 'The sidebar you were editing is no longer assigned to any pages and has been removed. Any widgets it contained should be in an "Inactive Widgets" area below.', 'simple-page-sidebars' ) ); $message_id = $_REQUEST['simple-page-sidebars-message']; if ( isset( $messages[ $message_id ] ) ) { echo $messages[ $message_id ]; } ?>