set_parentage( $parent_file ); ?>
render_screen_meta(); if ( is_network_admin() ) { /** * Prints network admin screen notices. * * @since 3.1.0 */ do_action( 'network_admin_notices' ); } elseif ( is_user_admin() ) { /** * Prints user admin screen notices. * * @since 3.1.0 */ do_action( 'user_admin_notices' ); } else { /** * Prints admin screen notices. * * @since 3.1.0 */ do_action( 'admin_notices' ); } /** * Prints generic admin screen notices. * * @since 3.1.0 */ do_action( 'all_admin_notices' ); if ( 'options-general.php' === $parent_file ) { require ABSPATH . 'wp-admin/options-head.php'; } PK!vÔ'`öö upgrade.phpnu„[µü¤db_version(); $php_compat = version_compare( $php_version, $required_php_version, '>=' ); if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) { $mysql_compat = true; } else { $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ); } $missing_extensions = array(); if ( isset( $required_php_extensions ) && is_array( $required_php_extensions ) ) { foreach ( $required_php_extensions as $extension ) { if ( extension_loaded( $extension ) ) { continue; } $missing_extensions[] = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: The PHP extension name needed. */ __( 'You cannot upgrade because WordPress %2$s requires the %3$s PHP extension.' ), $version_url, $wp_version, $extension ); } } header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); ?> > <?php _e( 'WordPress › Update' ); ?>

' . sprintf( /* translators: %s: URL to Update PHP page. */ __( 'Learn more about updating PHP.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $php_update_message .= '

' . $annotation . ''; } if ( ! $mysql_compat && ! $php_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number. */ __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) . $php_update_message; } elseif ( ! $php_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number. */ __( 'You cannot update because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_php_version, $php_version ) . $php_update_message; } elseif ( ! $mysql_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number. */ __( 'You cannot update because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_mysql_version, $mysql_version ); } echo '

' . $message . '

'; elseif ( count( $missing_extensions ) > 0 ) : echo '

' . implode( '

', $missing_extensions ) . '

'; else : switch ( $step ) : case 0: $goback = wp_get_referer(); if ( $goback ) { $goback = sanitize_url( $goback ); $goback = urlencode( $goback ); } ?>

PK!|bò)¦¦ link-add.phpnu„[µü¤

labels->edit_item; ?>

' . $message . '

'; if ( $wp_http_referer ) { $message .= sprintf( '

%2$s

', esc_url( wp_validate_redirect( sanitize_url( $wp_http_referer ), admin_url( 'term.php?taxonomy=' . $taxonomy ) ) ), esc_html( $tax->labels->back_to_items ) ); } wp_admin_notice( $message, array( 'type' => $class, 'id' => 'message', 'paragraph_wrap' => false, ) ); } ?>
> name ) ) { $tag_name_value = esc_attr( $tag->name ); } ?> slug ) ? apply_filters( 'editable_slug', $tag->slug, $tag ) : ''; ?>
wp-config-sample.php' ) ); } // Check if wp-config.php has been created. if ( file_exists( ABSPATH . 'wp-config.php' ) ) { wp_die( '

' . sprintf( /* translators: 1: wp-config.php, 2: install.php */ __( 'The file %1$s already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.' ), 'wp-config.php', 'install.php' ) . '

', 409 ); } // Check if wp-config.php exists above the root directory but is not part of another installation. if ( @file_exists( ABSPATH . '../wp-config.php' ) && ! @file_exists( ABSPATH . '../wp-settings.php' ) ) { wp_die( '

' . sprintf( /* translators: 1: wp-config.php, 2: install.php */ __( 'The file %1$s already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.' ), 'wp-config.php', 'install.php' ) . '

', 409 ); } $step = isset( $_GET['step'] ) ? (int) $_GET['step'] : -1; /** * Display setup wp-config.php file header. * * @ignore * @since 2.3.0 * * @param string|string[] $body_classes Class attribute values for the body tag. */ function setup_config_display_header( $body_classes = array() ) { $body_classes = (array) $body_classes; $body_classes[] = 'wp-core-ui'; $body_classes[] = 'admin-color-modern'; if ( is_rtl() ) { $body_classes[] = 'rtl'; } header( 'Content-Type: text/html; charset=utf-8' ); ?> > <?php _e( 'WordPress › Setup Configuration File' ); ?> Welcome to WordPress'; echo '
'; wp_install_language_form( $languages ); echo '
'; break; } } // Deliberately fall through if we can't reach the translations API. case 0: if ( ! empty( $language ) ) { $loaded_language = wp_download_language_pack( $language ); if ( $loaded_language ) { load_default_textdomain( $loaded_language ); $GLOBALS['wp_locale'] = new WP_Locale(); } } setup_config_display_header(); $step_1 = 'setup-config.php?step=1'; if ( isset( $_REQUEST['noapi'] ) ) { $step_1 .= '&noapi'; } if ( ! empty( $loaded_language ) ) { $step_1 .= '&language=' . $loaded_language; } ?>

wp-config.php' ); ?> wp-config-sample.php', 'wp-config.php' ); ?> Read the support article on %2$s.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/wp-config/' ), 'wp-config.php' ); ?>

' . __( 'Try Again' ) . ''; if ( empty( $prefix ) ) { wp_die( __( 'Error: "Table Prefix" must not be empty.' ) . $tryagain_link ); } // Validate $prefix: it can only contain letters, numbers and underscores. if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) { wp_die( __( 'Error: "Table Prefix" can only contain numbers, letters, and underscores.' ) . $tryagain_link ); } // Test the DB connection. /**#@+ * * @ignore */ define( 'DB_NAME', $dbname ); define( 'DB_USER', $uname ); define( 'DB_PASSWORD', $pwd ); define( 'DB_HOST', $dbhost ); /**#@-*/ // Re-construct $wpdb with these new values. unset( $wpdb ); require_wp_db(); /* * The wpdb constructor bails when WP_SETUP_CONFIG is set, so we must * fire this manually. We'll fail here if the values are no good. */ $wpdb->db_connect(); if ( ! empty( $wpdb->error ) ) { wp_die( $wpdb->error->get_error_message() . $tryagain_link ); } $errors = $wpdb->suppress_errors(); $wpdb->query( "SELECT $prefix" ); $wpdb->suppress_errors( $errors ); if ( ! $wpdb->last_error ) { // MySQL was able to parse the prefix as a value, which we don't want. Bail. wp_die( __( 'Error: "Table Prefix" is invalid.' ) ); } // Generate keys and salts using secure CSPRNG; fallback to API if enabled; further fallback to original wp_generate_password(). try { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; $max = strlen( $chars ) - 1; for ( $i = 0; $i < 8; $i++ ) { $key = ''; for ( $j = 0; $j < 64; $j++ ) { $key .= substr( $chars, random_int( 0, $max ), 1 ); } $secret_keys[] = $key; } } catch ( Exception $ex ) { $no_api = isset( $_POST['noapi'] ); if ( ! $no_api ) { $secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); } if ( $no_api || is_wp_error( $secret_keys ) ) { $secret_keys = array(); for ( $i = 0; $i < 8; $i++ ) { $secret_keys[] = wp_generate_password( 64, true, true ); } } else { $secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) ); foreach ( $secret_keys as $k => $v ) { $secret_keys[ $k ] = substr( $v, 28, 64 ); } } } $key = 0; foreach ( $config_file as $line_num => $line ) { if ( str_starts_with( $line, '$table_prefix =' ) ) { $config_file[ $line_num ] = '$table_prefix = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n"; continue; } if ( ! preg_match( '/^define\(\s*\'([A-Z_]+)\',([ ]+)/', $line, $match ) ) { continue; } $constant = $match[1]; $padding = $match[2]; switch ( $constant ) { case 'DB_NAME': case 'DB_USER': case 'DB_PASSWORD': case 'DB_HOST': $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'" . addcslashes( constant( $constant ), "\\'" ) . "' );\r\n"; break; case 'DB_CHARSET': if ( 'utf8mb4' === $wpdb->charset || ( ! $wpdb->charset ) ) { $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'utf8mb4' );\r\n"; } break; case 'AUTH_KEY': case 'SECURE_AUTH_KEY': case 'LOGGED_IN_KEY': case 'NONCE_KEY': case 'AUTH_SALT': case 'SECURE_AUTH_SALT': case 'LOGGED_IN_SALT': case 'NONCE_SALT': $config_file[ $line_num ] = "define( '" . $constant . "'," . $padding . "'" . $secret_keys[ $key++ ] . "' );\r\n"; break; } } unset( $line ); if ( ! is_writable( ABSPATH ) ) : setup_config_display_header(); ?>

wp-config.php' ); ?>

wp-config.php' ); $config_text = ''; foreach ( $config_file as $line ) { $config_text .= htmlentities( $line, ENT_COMPAT, 'UTF-8' ); } ?>

Changing File Permissions for more information.' ), 'wp-config.php', __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ) ); } else { $error_message = sprintf( /* translators: %s: wp-config.php */ __( 'Unable to write to %s file.' ), 'wp-config.php' ); } } chmod( $path_to_wp_config, 0666 ); setup_config_display_header(); if ( false !== $handle ) : ?>

%s

', $error_message ); endif; endif; break; } // End of the steps switch. ?> PK!l¤TTsswidgets-form-blocks.phpnu„[µü¤is_block_editor( true ); $block_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-widgets' ) ); $preload_paths = array( array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ), '/wp/v2/widget-types?context=edit&per_page=-1', '/wp/v2/sidebars?context=edit&per_page=-1', '/wp/v2/widgets?context=edit&per_page=-1&_embed=about', ); block_editor_rest_api_preload( $preload_paths, $block_editor_context ); $editor_settings = get_block_editor_settings( array_merge( get_legacy_widget_block_editor_settings(), array( 'styles' => get_block_editor_theme_styles() ) ), $block_editor_context ); // The widgets editor does not support the Block Directory, so don't load any of // its assets. This also prevents 'wp-editor' from being enqueued which we // cannot load in the widgets screen because many widget scripts rely on `wp.editor`. remove_action( 'enqueue_block_editor_assets', 'wp_enqueue_editor_block_directory_assets' ); wp_add_inline_script( 'wp-edit-widgets', sprintf( 'wp.domReady( function() { wp.editWidgets.initialize( "widgets-editor", %s ); } );', wp_json_encode( $editor_settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); // Preload server-registered block schemas. wp_add_inline_script( 'wp-blocks', 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ');' ); // Preload server-registered block bindings sources. $registered_sources = get_all_registered_block_bindings_sources(); if ( ! empty( $registered_sources ) ) { $filtered_sources = array(); foreach ( $registered_sources as $source ) { $filtered_sources[] = array( 'name' => $source->name, 'label' => $source->label, 'usesContext' => $source->uses_context, ); } $script = sprintf( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }', wp_json_encode( $filtered_sources, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-blocks', $script ); } wp_add_inline_script( 'wp-blocks', sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $block_editor_context ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); wp_enqueue_script( 'wp-edit-widgets' ); wp_enqueue_script( 'admin-widgets' ); wp_enqueue_style( 'wp-edit-widgets' ); /** This action is documented in wp-admin/edit-form-blocks.php */ do_action( 'enqueue_block_editor_assets' ); /** This action is documented in wp-admin/widgets-form.php */ do_action( 'sidebar_admin_setup' ); require_once ABSPATH . 'wp-admin/admin-header.php'; /** This action is documented in wp-admin/widgets-form.php */ do_action( 'widgets_admin_page' ); ?>

Classic Widgets plugin.' ), esc_url( $plugin_activate_url ) ); } else { // If Classic Widgets is not installed, provide a link to install it. $installed = false; $plugin_install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-widgets' ), 'install-plugin_classic-widgets' ); $message = sprintf( /* translators: %s: A link to install the Classic Widgets plugin. */ __( 'The block widgets require JavaScript. Please enable JavaScript in your browser settings, or install the Classic Widgets plugin.' ), esc_url( $plugin_install_url ) ); } /** * Filters the message displayed in the block widget interface when JavaScript is * not enabled in the browser. * * @since 6.4.0 * * @param string $message The message being displayed. * @param bool $installed Whether the Classic Widget plugin is installed. */ $message = apply_filters( 'block_widgets_no_javascript_message', $message, $installed ); wp_admin_notice( $message, array( 'type' => 'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?>
' . __( 'Welcome to your WordPress Dashboard!' ) . '

'; $help .= '

' . __( 'The Dashboard is the first place you will come to every time you log into your site. It is where you will find all your WordPress tools. If you need help, just click the “Help” tab above the screen title.' ) . '

'; $screen = get_current_screen(); $screen->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $help, ) ); // Help tabs. $help = '

' . __( 'The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.' ) . '

'; $help .= '

' . __( 'Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.' ) . '

'; $screen->add_help_tab( array( 'id' => 'help-navigation', 'title' => __( 'Navigation' ), 'content' => $help, ) ); $help = '

' . __( 'You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.' ) . '

'; $help .= '

' . __( 'Screen Options — Use the Screen Options tab to choose which Dashboard boxes to show.' ) . '

'; $help .= '

' . __( 'Drag and Drop — To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.' ) . '

'; $help .= '

' . __( 'Box Controls — Click the title bar of the box to expand or collapse it. Some boxes added by plugins may have configurable content, and will show a “Configure” link in the title bar if you hover over it.' ) . '

'; $screen->add_help_tab( array( 'id' => 'help-layout', 'title' => __( 'Layout' ), 'content' => $help, ) ); $help = '

' . __( 'The boxes on your Dashboard screen are:' ) . '

'; if ( current_user_can( 'edit_theme_options' ) ) { $help .= '

' . __( 'Welcome — Shows links for some of the most common tasks when setting up a new site.' ) . '

'; } if ( current_user_can( 'view_site_health_checks' ) ) { $help .= '

' . __( 'Site Health Status — Informs you of any potential issues that should be addressed to improve the performance or security of your website.' ) . '

'; } if ( current_user_can( 'edit_posts' ) ) { $help .= '

' . __( 'At a Glance — Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.' ) . '

'; } $help .= '

' . __( 'Activity — Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them.' ) . '

'; if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) { $help .= '

' . __( "Quick Draft — Allows you to create a new post and save it as a draft. Also displays links to the 3 most recent draft posts you've started." ) . '

'; } $help .= '

' . sprintf( /* translators: %s: WordPress Planet URL. */ __( 'WordPress Events and News — Upcoming events near you as well as the latest news from the official WordPress project and the WordPress Planet.' ), __( 'https://planet.wordpress.org/' ) ) . '

'; $screen->add_help_tab( array( 'id' => 'help-content', 'title' => __( 'Content' ), 'content' => $help, ) ); unset( $help ); $wp_version = get_bloginfo( 'version', 'display' ); /* translators: %s: WordPress version. */ $wp_version_text = sprintf( __( 'Version %s' ), $wp_version ); $is_dev_version = preg_match( '/alpha|beta|RC/', $wp_version ); if ( ! $is_dev_version ) { $version_url = sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ) ), sanitize_title( $wp_version ) ); $wp_version_text = sprintf( '%2$s', $version_url, $wp_version_text ); } $screen->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Dashboard' ) . '

' . '

' . __( 'Support forums' ) . '

' . '

' . $wp_version_text . '

' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

'success', 'dismissible' => true, ) ); endif; endif; ?> user_email !== get_option( 'admin_email' ) ) ); if ( $hide ) { $classes .= ' hidden'; } ?>
Links / Edit Link' ), 'link-manager.php' ); $submit_text = __( 'Update Link' ); $form_name = 'editlink'; $nonce_action = 'update-bookmark_' . $link_id; } else { /* translators: %s: URL to Links screen. */ $heading = sprintf( __( 'Links / Add Link' ), 'link-manager.php' ); $submit_text = __( 'Add Link' ); $form_name = 'addlink'; $nonce_action = 'add-bookmark'; } require_once ABSPATH . 'wp-admin/includes/meta-boxes.php'; add_meta_box( 'linksubmitdiv', __( 'Save' ), 'link_submit_meta_box', null, 'side', 'core' ); add_meta_box( 'linkcategorydiv', __( 'Categories' ), 'link_categories_meta_box', null, 'normal', 'core' ); add_meta_box( 'linktargetdiv', __( 'Target' ), 'link_target_meta_box', null, 'normal', 'core' ); add_meta_box( 'linkxfndiv', __( 'Link Relationship (XFN)' ), 'link_xfn_meta_box', null, 'normal', 'core' ); add_meta_box( 'linkadvanceddiv', __( 'Advanced' ), 'link_advanced_meta_box', null, 'normal', 'core' ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'add_meta_boxes', 'link', $link ); /** * Fires when link-specific meta boxes are added. * * @since 3.0.0 * * @param object $link Link object. */ do_action( 'add_meta_boxes_link', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'normal', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'advanced', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'side', $link ); add_screen_option( 'layout_columns', array( 'max' => 2, 'default' => 2, ) ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'You can add or edit links on this screen by entering information in each of the boxes. Only the link’s web address and name (the text you want to display on your site as the link) are required fields.' ) . '

' . '

' . __( 'The boxes for link name, web address, and description have fixed positions, while the others may be repositioned using drag and drop. You can also hide boxes you do not use in the Screen Options tab, or minimize boxes by clicking on the title bar of the box.' ) . '

' . '

' . __( 'XFN stands for XHTML Friends Network, which is optional. WordPress allows the generation of XFN attributes to show how you are related to the authors/owners of the site to which you are linking.' ) . '

', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Creating Links' ) . '

' . '

' . __( 'Support forums' ) . '

' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>


'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } ?>

https://wordpress.org/ — do not forget the https://' ); ?>

PK!~R�RTTmedia-upload.phpnu„[µü¤' . __( 'An error occurred during the upload process.' ) . '' . '

' . __( 'Invalid item ID. You can view all media items in the Media Library.' ) . '

', 403 ); } if ( ! empty( $_REQUEST['post_id'] ) && ! current_user_can( 'edit_post', $_REQUEST['post_id'] ) ) { wp_die( '

' . __( 'You need a higher level of permission.' ) . '

' . '

' . __( 'Sorry, you are not allowed to edit this item.' ) . '

', 403 ); } // Upload type: image, video, file, ...? if ( isset( $_GET['type'] ) ) { $type = (string) $_GET['type']; } else { /** * Filters the default media upload type in the legacy (pre-3.5.0) media popup. * * @since 2.5.0 * * @param string $type The default media upload type. Possible values include * 'image', 'audio', 'video', 'file', etc. Default 'file'. */ $type = apply_filters( 'media_upload_default_type', 'file' ); } // Tab: gallery, library, or type-specific. if ( isset( $_GET['tab'] ) ) { $tab = (string) $_GET['tab']; } else { /** * Filters the default tab in the legacy (pre-3.5.0) media popup. * * @since 2.5.0 * * @param string $tab The default media popup tab. Default 'type' (From Computer). */ $tab = apply_filters( 'media_upload_default_tab', 'type' ); } $body_id = 'media-upload'; // Let the action code decide how to handle the request. if ( 'type' === $tab || 'type_url' === $tab || ! array_key_exists( $tab, media_upload_tabs() ) ) { /** * Fires inside specific upload-type views in the legacy (pre-3.5.0) * media popup based on the current tab. * * The dynamic portion of the hook name, `$type`, refers to the specific * media upload type. * * The hook only fires if the current `$tab` is 'type' (From Computer), * 'type_url' (From URL), or, if the tab does not exist (i.e., has not * been registered via the {@see 'media_upload_tabs'} filter. * * Possible hook names include: * * - `media_upload_audio` * - `media_upload_file` * - `media_upload_image` * - `media_upload_video` * * @since 2.5.0 */ do_action( "media_upload_{$type}" ); } else { /** * Fires inside limited and specific upload-tab views in the legacy * (pre-3.5.0) media popup. * * The dynamic portion of the hook name, `$tab`, refers to the specific * media upload tab. Possible values include 'library' (Media Library), * or any custom tab registered via the {@see 'media_upload_tabs'} filter. * * @since 2.5.0 */ do_action( "media_upload_{$tab}" ); } PK!?3“¯X`X` user-new.phpnu„[µü¤' . __( 'You need a higher level of permission.' ) . '' . '

' . __( 'Sorry, you are not allowed to add users to this network.' ) . '

', 403 ); } } elseif ( ! current_user_can( 'create_users' ) ) { wp_die( '

' . __( 'You need a higher level of permission.' ) . '

' . '

' . __( 'Sorry, you are not allowed to create users.' ) . '

', 403 ); } if ( is_multisite() ) { add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' ); } if ( isset( $_REQUEST['action'] ) && 'adduser' === $_REQUEST['action'] ) { check_admin_referer( 'add-user', '_wpnonce_add-user' ); $user_details = null; $user_email = wp_unslash( $_REQUEST['email'] ); if ( str_contains( $user_email, '@' ) ) { $user_details = get_user_by( 'email', $user_email ); } else { if ( current_user_can( 'manage_network_users' ) ) { $user_details = get_user_by( 'login', $user_email ); } else { wp_redirect( add_query_arg( array( 'update' => 'enter_email' ), 'user-new.php' ) ); die(); } } if ( ! $user_details ) { wp_redirect( add_query_arg( array( 'update' => 'does_not_exist' ), 'user-new.php' ) ); die(); } if ( ! current_user_can( 'promote_user', $user_details->ID ) ) { wp_die( '

' . __( 'You need a higher level of permission.' ) . '

' . '

' . __( 'Sorry, you are not allowed to add users to this network.' ) . '

', 403 ); } // Adding an existing user to this blog. $new_user_email = array(); $redirect = 'user-new.php'; $username = $user_details->user_login; $user_id = $user_details->ID; if ( array_key_exists( $blog_id, get_blogs_of_user( $user_id ) ) ) { $redirect = add_query_arg( array( 'update' => 'addexisting' ), 'user-new.php' ); } else { if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { wp_ensure_editable_role( $_REQUEST['role'] ); $result = add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST['role'], ) ); if ( ! is_wp_error( $result ) ) { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $user_id, ), 'user-new.php' ); } else { $redirect = add_query_arg( array( 'update' => 'could_not_add' ), 'user-new.php' ); } } else { $newuser_key = wp_generate_password( 20, false ); add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST['role'], ) ); $roles = get_editable_roles(); $role = $roles[ $_REQUEST['role'] ]; /** * Fires immediately after an existing user is invited to join the site, but before the notification is sent. * * @since 4.4.0 * * @param int $user_id The invited user's ID. * @param array $role Array containing role information for the invited user. * @param string $newuser_key The key of the invitation. */ do_action( 'invite_user', $user_id, $role, $newuser_key ); $switched_locale = switch_to_user_locale( $user_id ); if ( '' !== get_option( 'blogname' ) ) { $site_title = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); } else { $site_title = parse_url( home_url(), PHP_URL_HOST ); } /* translators: 1: Site title, 2: Site URL, 3: User role, 4: Activation URL. */ $message = __( 'Hi, You\'ve been invited to join \'%1$s\' at %2$s with the role of %3$s. Please click the following link to confirm the invite: %4$s' ); $new_user_email['to'] = $user_details->user_email; $new_user_email['subject'] = sprintf( /* translators: Joining confirmation notification email subject. %s: Site title. */ __( '[%s] Joining Confirmation' ), $site_title ); $new_user_email['message'] = sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ); $new_user_email['headers'] = ''; /** * Filters the contents of the email sent when an existing user is invited to join the site. * * @since 5.6.0 * * @param array $new_user_email { * Used to build wp_mail(). * * @type string $to The email address of the invited user. * @type string $subject The subject of the email. * @type string $message The content of the email. * @type string $headers Headers. * } * @param int $user_id The invited user's ID. * @param array $role Array containing role information for the invited user. * @param string $newuser_key The key of the invitation. * */ $new_user_email = apply_filters( 'invited_user_email', $new_user_email, $user_id, $role, $newuser_key ); wp_mail( $new_user_email['to'], $new_user_email['subject'], $new_user_email['message'], $new_user_email['headers'] ); if ( $switched_locale ) { restore_previous_locale(); } $redirect = add_query_arg( array( 'update' => 'add' ), 'user-new.php' ); } } wp_redirect( $redirect ); die(); } elseif ( isset( $_REQUEST['action'] ) && 'createuser' === $_REQUEST['action'] ) { check_admin_referer( 'create-user', '_wpnonce_create-user' ); if ( ! current_user_can( 'create_users' ) ) { wp_die( '

' . __( 'You need a higher level of permission.' ) . '

' . '

' . __( 'Sorry, you are not allowed to create users.' ) . '

', 403 ); } if ( ! is_multisite() ) { $user_id = edit_user(); if ( is_wp_error( $user_id ) ) { $add_user_errors = $user_id; } else { if ( current_user_can( 'list_users' ) ) { $redirect = 'users.php?update=add&id=' . $user_id; } else { $redirect = add_query_arg( 'update', 'add', 'user-new.php' ); } wp_redirect( $redirect ); die(); } } else { // Adding a new user to this site. $new_user_email = wp_unslash( $_REQUEST['email'] ); $user_details = wpmu_validate_user_signup( $_REQUEST['user_login'], $new_user_email ); if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) { $add_user_errors = $user_details['errors']; } else { /** This filter is documented in wp-includes/user.php */ $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) ); if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email. add_filter( 'wpmu_welcome_user_notification', '__return_false' ); // Disable welcome email. } wp_ensure_editable_role( $_REQUEST['role'] ); wpmu_signup_user( $new_user_login, $new_user_email, array( 'add_to_blog' => get_current_blog_id(), 'new_role' => $_REQUEST['role'], ) ); if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $new_user_email ) ); $new_user = wpmu_activate_signup( $key ); if ( is_wp_error( $new_user ) ) { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' ); } elseif ( ! is_user_member_of_blog( $new_user['user_id'] ) ) { $redirect = add_query_arg( array( 'update' => 'created_could_not_add' ), 'user-new.php' ); } else { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $new_user['user_id'], ), 'user-new.php' ); } } else { $redirect = add_query_arg( array( 'update' => 'newuserconfirmation' ), 'user-new.php' ); } wp_redirect( $redirect ); die(); } } } // Used in the HTML title tag. $title = __( 'Add User' ); $parent_file = 'users.php'; $do_both = false; if ( is_multisite() && current_user_can( 'promote_users' ) && current_user_can( 'create_users' ) ) { $do_both = true; } $help = '

' . __( 'To add a new user to your site, fill in the form on this screen and click the Add User button at the bottom.' ) . '

'; if ( is_multisite() ) { $help .= '

' . __( 'Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.' ) . '

' . '

' . __( 'New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you do not want the user to receive a welcome email.' ) . '

'; } else { $help .= '

' . __( 'New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added.' ) . '

' . '

' . __( 'By default, new users will receive an email letting them know they’ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you do not want to send the new user a welcome email.' ) . '

'; } $help .= '

' . __( 'Remember to click the Add User button at the bottom of this screen when you are finished.' ) . '

'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $help, ) ); get_current_screen()->add_help_tab( array( 'id' => 'user-roles', 'title' => __( 'User Roles' ), 'content' => '

' . __( 'Here is a basic overview of the different user roles and the permissions associated with each one:' ) . '

' . '
    ' . '
  • ' . __( 'Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.' ) . '
  • ' . '
  • ' . __( 'Contributors can write and manage their posts but not publish posts or upload media files.' ) . '
  • ' . '
  • ' . __( 'Authors can publish and manage their own posts, and are able to upload files.' ) . '
  • ' . '
  • ' . __( 'Editors can publish posts, manage posts as well as manage other people’s posts, etc.' ) . '
  • ' . '
  • ' . __( 'Administrators have access to all the administration features.' ) . '
  • ' . '
', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Adding New Users' ) . '

' . '

' . __( 'Support forums' ) . '

' ); wp_enqueue_script( 'wp-ajax-response' ); wp_enqueue_script( 'user-profile' ); /** * Filters whether to enable user auto-complete for non-super admins in Multisite. * * @since 3.4.0 * * @param bool $enable Whether to enable auto-complete for non-super admins. Default false. */ if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' ) && ( current_user_can( 'manage_network_users' ) || apply_filters( 'autocomplete_users_for_site_admins', false ) ) ) { wp_enqueue_script( 'user-suggest' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; if ( isset( $_GET['update'] ) ) { $messages = array(); if ( is_multisite() ) { $edit_link = ''; if ( ( isset( $_GET['user_id'] ) ) ) { $user_id_new = absint( $_GET['user_id'] ); if ( $user_id_new ) { $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) ); } } switch ( $_GET['update'] ) { case 'newuserconfirmation': $messages[] = __( 'Invitation email sent to new user. A confirmation link must be clicked before their account is created.' ); break; case 'add': $messages[] = __( 'Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.' ); break; case 'addnoconfirmation': $message = __( 'User has been added to your site.' ); if ( $edit_link ) { $message .= sprintf( ' %s', $edit_link, __( 'Edit user' ) ); } $messages[] = $message; break; case 'addexisting': $messages[] = __( 'That user is already a member of this site.' ); break; case 'could_not_add': $add_user_errors = new WP_Error( 'could_not_add', __( 'That user could not be added to this site.' ) ); break; case 'created_could_not_add': $add_user_errors = new WP_Error( 'created_could_not_add', __( 'User has been created, but could not be added to this site.' ) ); break; case 'does_not_exist': $add_user_errors = new WP_Error( 'does_not_exist', __( 'The requested user does not exist.' ) ); break; case 'enter_email': $add_user_errors = new WP_Error( 'enter_email', __( 'Please enter a valid email address.' ) ); break; } } else { if ( 'add' === $_GET['update'] ) { $messages[] = __( 'User added.' ); } } } ?>

get_error_messages() as $err ) { $error_message .= "
  • $err
  • \n"; } wp_admin_notice( '
      ' . $error_message . '
    ', array( 'additional_classes' => array( 'error' ), 'paragraph_wrap' => false, ) ); endif; if ( ! empty( $messages ) ) { foreach ( $messages as $msg ) { wp_admin_notice( $msg, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } } ?> get_error_messages() as $message ) { $error_message .= "

    $message

    \n"; } wp_admin_notice( $error_message, array( 'additional_classes' => array( 'error' ), 'paragraph_wrap' => false, ) ); endif; ?>
    ' . __( 'Add Existing User' ) . ''; } if ( ! current_user_can( 'manage_network_users' ) ) { echo '

    ' . __( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '

    '; $label = __( 'Email' ); $type = 'email'; } else { echo '

    ' . __( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '

    '; $label = __( 'Email or Username' ); $type = 'text'; } ?>
    > 'addusersub' ) ); ?>
    ' . __( 'Add User' ) . ''; } ?>

    > 'createusersub' ) ); ?>

    worldwide team of passionate individuals.' ), __( 'https://wordpress.org/about/' ) ); ?>


    '; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } ?>



    cap->create_posts ) ) { wp_die( __( 'Sorry, you are not allowed to create posts as this user.' ), __( 'You need a higher level of permission.' ), 403 ); } elseif ( is_plugin_active( $plugin_file ) ) { include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; // @phpstan-ignore include.fileNotFound $wp_press_this = new WP_Press_This_Plugin(); // @phpstan-ignore class.notFound $wp_press_this->html(); } elseif ( current_user_can( 'activate_plugins' ) ) { if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) ) { $url = wp_nonce_url( add_query_arg( array( 'action' => 'activate', 'plugin' => $plugin_file, 'from' => 'press-this', ), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_file ); $action = sprintf( '%2$s', esc_url( $url ), __( 'Activate Press This' ) ); } else { if ( is_main_site() ) { $url = wp_nonce_url( add_query_arg( array( 'action' => 'install-plugin', 'plugin' => $plugin_slug, 'from' => 'press-this', ), self_admin_url( 'update.php' ) ), 'install-plugin_' . $plugin_slug ); $action = sprintf( '%3$s', esc_url( $url ), esc_attr( $plugin_slug ), _x( 'Install Now', 'plugin' ) ); } else { $action = sprintf( /* translators: %s: URL to Press This bookmarklet on the main site. */ __( 'Press This is not installed. Please install Press This from the main site.' ), get_admin_url( get_current_network_id(), 'press-this.php' ) ); } } wp_die( __( 'The Press This plugin is required.' ) . '
    ' . $action, __( 'Installation Required' ), 200 ); } else { wp_die( __( 'Press This is not available. Please contact your site administrator.' ), __( 'Installation Required' ), 200 ); } } wp_load_press_this(); PK!}|Šffoptions-head.phpnu„[µü¤tables( 'ms_global' ) as $table => $prefixed_table ) { $wpdb->$table = $prefixed_table; } if ( ! network_domain_check() && ( ! defined( 'WP_ALLOW_MULTISITE' ) || ! WP_ALLOW_MULTISITE ) ) { wp_die( sprintf( /* translators: 1: WP_ALLOW_MULTISITE, 2: wp-config.php */ __( 'You must define the %1$s constant as true in your %2$s file to allow creation of a Network.' ), 'WP_ALLOW_MULTISITE', 'wp-config.php' ) ); } if ( is_network_admin() ) { // Used in the HTML title tag. $title = __( 'Network Setup' ); $parent_file = 'settings.php'; } else { // Used in the HTML title tag. $title = __( 'Create a Network of WordPress Sites' ); $parent_file = 'tools.php'; } $network_help = '

    ' . __( 'This screen allows you to configure a network as having subdomains (site1.example.com) or subdirectories (example.com/site1). Subdomains require wildcard subdomains to be enabled in Apache and DNS records, if your host allows it.' ) . '

    ' . '

    ' . __( 'Choose subdomains or subdirectories; this can only be switched afterwards by reconfiguring your installation. Fill out the network details, and click Install. If this does not work, you may have to add a wildcard DNS record (for subdomains) or change to another setting in Permalinks (for subdirectories).' ) . '

    ' . '

    ' . __( 'The next screen for Network Setup will give you individually-generated lines of code to add to your wp-config.php and .htaccess files. Make sure the settings of your FTP client make files starting with a dot visible, so that you can find .htaccess; you may have to create this file if it really is not there. Make backup copies of those two files.' ) . '

    ' . '

    ' . __( 'Add the designated lines of code to wp-config.php (just before /*...stop editing...*/) and .htaccess (replacing the existing WordPress rules).' ) . '

    ' . '

    ' . __( 'Once you add this code and refresh your browser, multisite should be enabled. This screen, now in the Network Admin navigation menu, will keep an archive of the added code. You can switch between Network Admin and Site Admin by clicking on the Network Admin or an individual site name under the My Sites dropdown in the Toolbar.' ) . '

    ' . '

    ' . __( 'The choice of subdirectory sites is disabled if this setup is more than a month old because of permalink problems with “/blog/” from the main site. This disabling will be addressed in a future version.' ) . '

    ' . '

    ' . __( 'For more information:' ) . '

    ' . '

    ' . __( 'Documentation on Creating a Network' ) . '

    ' . '

    ' . __( 'Documentation on the Network Screen' ) . '

    '; get_current_screen()->add_help_tab( array( 'id' => 'network', 'title' => __( 'Network' ), 'content' => $network_help, ) ); get_current_screen()->set_help_sidebar( '

    ' . __( 'For more information:' ) . '

    ' . '

    ' . __( 'Documentation on Creating a Network' ) . '

    ' . '

    ' . __( 'Documentation on the Network Screen' ) . '

    ' . '

    ' . __( 'Support forums' ) . '

    ' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

    get_error_codes() ) && 'no_wildcard_dns' === $result->get_error_code() ) { network_step2( $result ); } else { network_step1( $result ); } } else { network_step2(); } } else { network_step2(); } } elseif ( is_multisite() || network_domain_check() ) { network_step2(); } else { network_step1(); } ?>
    PK!`i#export-personal-data.phpnu„[µü¤add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

    ' . __( 'This screen is where you manage requests for an export of personal data.' ) . '

    ' . '

    ' . __( 'Privacy Laws around the world require businesses and online services to provide an export of some of the data they collect about an individual, and to deliver that export on request. The rights those laws enshrine are sometimes called the "Right of Data Portability". It allows individuals to obtain and reuse their personal data for their own purposes across different services. It allows them to move, copy or transfer personal data easily from one IT environment to another.' ) . '

    ' . '

    ' . __( 'The tool associates data stored in WordPress with a supplied email address, including profile data and comments.' ) . '

    ' . '

    ' . __( 'Note: Since this tool only gathers data from WordPress and participating plugins, you may need to do more to comply with export requests. For example, you should also send the requester some of the data collected from or stored with the 3rd party services your organization uses.' ) . '

    ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'default-data', 'title' => __( 'Default Data' ), 'content' => '

    ' . __( 'WordPress collects (but never publishes) a limited amount of data from registered users who have logged in to the site. Generally, these users are people who contribute to the site in some way -- content, store management, and so on. With rare exceptions, these users do not include occasional visitors who might have registered to comment on articles or buy products. The data WordPress retains can include:' ) . '

    ' . '

    ' . __( 'Profile Information — user email address, username, display name, nickname, first name, last name, description/bio, and registration date.' ) . '

    ' . '

    ' . __( 'Community Events Location — The IP Address of the user, which populates the Upcoming Community Events dashboard widget with relevant information.' ) . '

    ' . '

    ' . __( 'Session Tokens — User login information, IP Addresses, Expiration Date, User Agent (Browser/OS), and Last Login.' ) . '

    ' . '

    ' . __( 'Comments — For user comments, Email Address, IP Address, User Agent (Browser/OS), Date/Time, Comment Content, and Content URL.' ) . '

    ' . '

    ' . __( 'Media — A list of URLs for media files the user uploads.' ) . '

    ', ) ); $privacy_policy_guide = '

    ' . sprintf( /* translators: %s: URL to Privacy Policy Guide screen. */ __( 'If you are not sure, check the plugin documentation or contact the plugin author to see if the plugin collects data and if it supports the Data Exporter tool. This information may be available in the Privacy Policy Guide.' ), admin_url( 'options-privacy.php?tab=policyguide' ) ) . '

    '; get_current_screen()->add_help_tab( array( 'id' => 'plugin-data', 'title' => __( 'Plugin Data' ), 'content' => '

    ' . __( 'Many plugins may collect or store personal data either in the WordPress database or remotely. Any Export Personal Data request should include data from plugins as well.' ) . '

    ' . $privacy_policy_guide . '

    ' . __( 'If you are a plugin author, you can learn more about how to add the Personal Data Exporter to a plugin.' ) . '

    ', ) ); get_current_screen()->set_help_sidebar( '

    ' . __( 'For more information:' ) . '

    ' . '

    ' . __( 'Documentation on Export Personal Data' ) . '

    ' . '

    ' . __( 'Support forums' ) . '

    ' ); // Handle list table actions. _wp_personal_data_handle_actions(); // Cleans up failed and expired requests before displaying the list table. _wp_personal_data_cleanup_requests(); wp_enqueue_script( 'privacy-tools' ); add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'export_personal_data_requests_per_page', ) ); $_list_table_args = array( 'plural' => 'privacy_requests', 'singular' => 'privacy_request', ); $requests_table = _get_list_table( 'WP_Privacy_Data_Export_Requests_List_Table', $_list_table_args ); $requests_table->screen->set_screen_reader_content( array( 'heading_views' => __( 'Filter export personal data list' ), 'heading_pagination' => __( 'Export personal data list navigation' ), 'heading_list' => __( 'Export personal data list' ), ) ); $requests_table->process_bulk_action(); $requests_table->prepare_items(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>



    views(); ?>
    search_box( __( 'Search Requests' ), 'requests' ); ?>
    display(); $requests_table->embed_scripts(); ?>
    ' . __( 'You need a higher level of permission.' ) . '' . '

    ' . __( 'Sorry, you are not allowed to customize this site.' ) . '

    ', 403 ); } /** * @global WP_Scripts $wp_scripts * @global WP_Customize_Manager $wp_customize */ global $wp_scripts, $wp_customize; if ( $wp_customize->changeset_post_id() ) { $changeset_post = get_post( $wp_customize->changeset_post_id() ); if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $changeset_post->ID ) ) { wp_die( '

    ' . __( 'You need a higher level of permission.' ) . '

    ' . '

    ' . __( 'Sorry, you are not allowed to edit this changeset.' ) . '

    ', 403 ); } $missed_schedule = ( 'future' === $changeset_post->post_status && get_post_time( 'G', true, $changeset_post ) < time() ); if ( $missed_schedule ) { /* * Note that an Ajax request spawns here instead of just calling `wp_publish_post( $changeset_post->ID )`. * * Because WP_Customize_Manager is not instantiated for customize.php with the `settings_previewed=false` * argument, settings cannot be reliably saved. Some logic short-circuits if the current value is the * same as the value being saved. This is particularly true for options via `update_option()`. * * By opening an Ajax request, this is avoided and the changeset is published. See #39221. */ $nonces = $wp_customize->get_nonces(); $request_args = array( 'nonce' => $nonces['save'], 'customize_changeset_uuid' => $wp_customize->changeset_uuid(), 'wp_customize' => 'on', 'customize_changeset_status' => 'publish', ); ob_start(); ?> ' . __( 'Your scheduled changes just published' ) . '' . '

    ' . __( 'Customize New Changes' ) . '

    ' . $script, 200 ); } if ( in_array( get_post_status( $changeset_post->ID ), array( 'publish', 'trash' ), true ) ) { wp_die( '

    ' . __( 'An error occurred while saving your changeset.' ) . '

    ' . '

    ' . __( 'Please try again or start a new changeset. This changeset cannot be further modified.' ) . '

    ' . '

    ' . __( 'Customize New Changes' ) . '

    ', 403 ); } } $url = ! empty( $_REQUEST['url'] ) ? esc_url_raw( wp_unslash( $_REQUEST['url'] ) ) : ''; $return = ! empty( $_REQUEST['return'] ) ? esc_url_raw( wp_unslash( $_REQUEST['return'] ) ) : ''; $autofocus = ! empty( $_REQUEST['autofocus'] ) && is_array( $_REQUEST['autofocus'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_REQUEST['autofocus'] ) ) : array(); if ( ! empty( $url ) ) { $wp_customize->set_preview_url( $url ); } if ( ! empty( $return ) ) { $wp_customize->set_return_url( $return ); } if ( ! empty( $autofocus ) ) { $wp_customize->set_autofocus( $autofocus ); } // Let's roll. header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); wp_user_settings(); _wp_admin_html_begin(); $registered = $wp_scripts->registered; $wp_scripts = new WP_Scripts(); $wp_scripts->registered = $registered; add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 ); add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' ); add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 ); /** * Fires when Customizer controls are initialized, before scripts are enqueued. * * @since 3.4.0 */ do_action( 'customize_controls_init' ); wp_enqueue_script( 'heartbeat' ); wp_enqueue_script( 'customize-controls' ); wp_enqueue_style( 'customize-controls' ); /** * Fires when enqueuing Customizer control scripts. * * @since 3.4.0 */ do_action( 'customize_controls_enqueue_scripts' ); $body_class = 'wp-core-ui wp-customizer js'; if ( wp_is_mobile() ) : $body_class .= ' mobile'; add_filter( 'admin_viewport_meta', '_customizer_mobile_viewport_meta' ); endif; if ( $wp_customize->is_ios() ) { $body_class .= ' ios'; } if ( is_rtl() ) { $body_class .= ' rtl'; } $body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); $admin_color = get_user_option( 'admin_color' ); $body_class .= ' admin-color-' . sanitize_html_class( is_string( $admin_color ) ? $admin_color : '', 'modern' ); if ( wp_use_widgets_block_editor() ) { $body_class .= ' wp-embed-responsive'; } $admin_title = sprintf( $wp_customize->get_document_title_template(), __( 'Loading…' ) ); ?> <?php echo esc_html( $admin_title ); ?>
    theme()->get( 'RequiresWP' ) ); $compatible_php = is_php_version_compatible( $wp_customize->theme()->get( 'RequiresPHP' ) ); ?> is_theme_active() ? __( 'Publish' ) : __( 'Activate & Publish' ); ?>

      ' . get_bloginfo( 'name', 'display' ) . '' ); ?>

      Documentation on Customizer' ); ?>

      PK!Eê_îWîW edit-tags.phpnu„[µü¤name, get_taxonomies( array( 'show_ui' => true ) ), true ) ) { wp_die( __( 'Sorry, you are not allowed to edit terms in this taxonomy.' ) ); } if ( ! current_user_can( $tax->cap->manage_terms ) ) { wp_die( '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . '

      ' . __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ) . '

      ', 403 ); } /** * $post_type is set when the WP_Terms_List_Table instance is created. * * @global string $post_type Global post type. */ global $post_type; $wp_list_table = _get_list_table( 'WP_Terms_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $title = $tax->labels->name; if ( 'post' !== $post_type ) { $parent_file = ( 'attachment' === $post_type ) ? 'upload.php' : "edit.php?post_type=$post_type"; $submenu_file = "edit-tags.php?taxonomy=$taxonomy&post_type=$post_type"; } elseif ( 'link_category' === $tax->name ) { $parent_file = 'link-manager.php'; $submenu_file = 'edit-tags.php?taxonomy=link_category'; } else { $parent_file = 'edit.php'; $submenu_file = "edit-tags.php?taxonomy=$taxonomy"; } add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'edit_' . $tax->name . '_per_page', ) ); get_current_screen()->set_screen_reader_content( array( 'heading_pagination' => $tax->labels->items_list_navigation, 'heading_list' => $tax->labels->items_list, ) ); $location = false; $referer = wp_get_referer(); if ( ! $referer ) { // For POST requests. $referer = wp_unslash( $_SERVER['REQUEST_URI'] ); } $referer = remove_query_arg( array( '_wp_http_referer', '_wpnonce', 'error', 'message', 'paged' ), $referer ); switch ( $wp_list_table->current_action() ) { case 'add-tag': check_admin_referer( 'add-tag', '_wpnonce_add-tag' ); if ( ! current_user_can( $tax->cap->edit_terms ) ) { wp_die( '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . '

      ' . __( 'Sorry, you are not allowed to create terms in this taxonomy.' ) . '

      ', 403 ); } $ret = wp_insert_term( $_POST['tag-name'], $taxonomy, $_POST ); if ( $ret && ! is_wp_error( $ret ) ) { $location = add_query_arg( 'message', 1, $referer ); } else { $location = add_query_arg( array( 'error' => true, 'message' => 4, ), $referer ); } break; case 'delete': if ( ! isset( $_REQUEST['tag_ID'] ) ) { break; } $tag_ID = (int) $_REQUEST['tag_ID']; check_admin_referer( 'delete-tag_' . $tag_ID ); if ( ! current_user_can( 'delete_term', $tag_ID ) ) { wp_die( '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . '

      ' . __( 'Sorry, you are not allowed to delete this item.' ) . '

      ', 403 ); } wp_delete_term( $tag_ID, $taxonomy ); $location = add_query_arg( 'message', 2, $referer ); // When deleting a term, prevent the action from redirecting back to a term that no longer exists. $location = remove_query_arg( array( 'tag_ID', 'action' ), $location ); break; case 'bulk-delete': check_admin_referer( 'bulk-tags' ); if ( ! current_user_can( $tax->cap->delete_terms ) ) { wp_die( '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . '

      ' . __( 'Sorry, you are not allowed to delete these items.' ) . '

      ', 403 ); } $tags = (array) $_REQUEST['delete_tags']; foreach ( $tags as $tag_ID ) { wp_delete_term( $tag_ID, $taxonomy ); } $location = add_query_arg( 'message', 6, $referer ); break; case 'edit': if ( ! isset( $_REQUEST['tag_ID'] ) ) { break; } $term_id = (int) $_REQUEST['tag_ID']; $term = get_term( $term_id ); if ( ! $term instanceof WP_Term ) { wp_die( __( 'You attempted to edit an item that does not exist. Perhaps it was deleted?' ) ); } wp_redirect( sanitize_url( get_edit_term_link( $term_id, $taxonomy, $post_type ) ) ); exit; case 'editedtag': $tag_ID = (int) $_POST['tag_ID']; check_admin_referer( 'update-tag_' . $tag_ID ); if ( ! current_user_can( 'edit_term', $tag_ID ) ) { wp_die( '

      ' . __( 'You need a higher level of permission.' ) . '

      ' . '

      ' . __( 'Sorry, you are not allowed to edit this item.' ) . '

      ', 403 ); } $tag = get_term( $tag_ID, $taxonomy ); if ( ! $tag ) { wp_die( __( 'You attempted to edit an item that does not exist. Perhaps it was deleted?' ) ); } $ret = wp_update_term( $tag_ID, $taxonomy, $_POST ); if ( $ret && ! is_wp_error( $ret ) ) { $location = add_query_arg( 'message', 3, $referer ); } else { $location = add_query_arg( array( 'error' => true, 'message' => 5, ), $referer ); } break; default: if ( ! $wp_list_table->current_action() || ! isset( $_REQUEST['delete_tags'] ) ) { break; } check_admin_referer( 'bulk-tags' ); $screen = get_current_screen()->id; $tags = (array) $_REQUEST['delete_tags']; /** This action is documented in wp-admin/edit.php */ $location = apply_filters( "handle_bulk_actions-{$screen}", $location, $wp_list_table->current_action(), $tags ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores break; } if ( ! $location && ! empty( $_REQUEST['_wp_http_referer'] ) ) { $location = remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ); } if ( $location ) { if ( $pagenum > 1 ) { $location = add_query_arg( 'paged', $pagenum, $location ); // $pagenum takes care of $total_pages. } if ( 1 === $pagenum ) { $location = remove_query_arg( 'paged', $location ); } /** * Filters the taxonomy redirect destination URL. * * @since 4.6.0 * * @param string $location The destination URL. * @param WP_Taxonomy $tax The taxonomy object. */ wp_redirect( apply_filters( 'redirect_term_location', $location, $tax ) ); exit; } $wp_list_table->prepare_items(); $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); if ( $pagenum > $total_pages && $total_pages > 0 ) { wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } wp_enqueue_script( 'admin-tags' ); if ( current_user_can( $tax->cap->edit_terms ) ) { wp_enqueue_script( 'inline-edit-tax' ); } if ( 'category' === $taxonomy || 'link_category' === $taxonomy || 'post_tag' === $taxonomy ) { $help = ''; if ( 'category' === $taxonomy ) { $help = '

      ' . sprintf( /* translators: %s: URL to Writing Settings screen. */ __( 'You can use categories to define sections of your site and group related posts. The default category is “Uncategorized” until you change it in your writing settings.' ), 'options-writing.php' ) . '

      '; } elseif ( 'link_category' === $taxonomy ) { $help = '

      ' . __( 'You can create groups of links by using Link Categories. Link Category names must be unique and Link Categories are separate from the categories you use for posts.' ) . '

      '; } else { $help = '

      ' . __( 'You can assign keywords to your posts using tags. Unlike categories, tags have no hierarchy, meaning there is no relationship from one tag to another.' ) . '

      '; } if ( 'link_category' === $taxonomy ) { $help .= '

      ' . __( 'You can delete Link Categories in the Bulk Action pull-down, but that action does not delete the links within the category. Instead, it moves them to the default Link Category.' ) . '

      '; } else { $help .= '

      ' . __( 'What’s the difference between categories and tags? Normally, tags are ad-hoc keywords that identify important information in your post (names, subjects, etc) that may or may not recur in other posts, while categories are pre-determined sections. If you think of your site like a book, the categories are like the Table of Contents and the tags are like the terms in the index.' ) . '

      '; } get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $help, ) ); if ( 'category' === $taxonomy || 'post_tag' === $taxonomy ) { if ( 'category' === $taxonomy ) { $help = '

      ' . __( 'When adding a new category on this screen, you’ll fill in the following fields:' ) . '

      '; } else { $help = '

      ' . __( 'When adding a new tag on this screen, you’ll fill in the following fields:' ) . '

      '; } $help .= '
        ' . '
      • ' . __( 'Name — The name is how it appears on your site.' ) . '
      • '; $help .= '
      • ' . __( 'Slug — The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens.' ) . '
      • '; if ( 'category' === $taxonomy ) { $help .= '
      • ' . __( 'Parent — Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have child categories for Bebop and Big Band. Totally optional. To create a subcategory, just choose another category from the Parent dropdown.' ) . '
      • '; } $help .= '
      • ' . __( 'Description — The description is not prominent by default; however, some themes may display it.' ) . '
      • ' . '
      ' . '

      ' . __( 'You can change the display of this screen using the Screen Options tab to set how many items are displayed per screen and to display/hide columns in the table.' ) . '

      '; get_current_screen()->add_help_tab( array( 'id' => 'adding-terms', 'title' => 'category' === $taxonomy ? __( 'Adding Categories' ) : __( 'Adding Tags' ), 'content' => $help, ) ); } $help = '

      ' . __( 'For more information:' ) . '

      '; if ( 'category' === $taxonomy ) { $help .= '

      ' . __( 'Documentation on Categories' ) . '

      '; } elseif ( 'link_category' === $taxonomy ) { $help .= '

      ' . __( 'Documentation on Link Categories' ) . '

      '; } else { $help .= '

      ' . __( 'Documentation on Tags' ) . '

      '; } $help .= '

      ' . __( 'Support forums' ) . '

      '; get_current_screen()->set_help_sidebar( $help ); unset( $help ); } require_once ABSPATH . 'wp-admin/admin-header.php'; // Also used by the Edit Tag form. require_once ABSPATH . 'wp-admin/includes/edit-tag-messages.php'; if ( is_plugin_active( 'wpcat2tag-importer/wpcat2tag-importer.php' ) ) { $import_link = admin_url( 'admin.php?import=wpcat2tag' ); } else { $import_link = admin_url( 'import.php' ); } ?>

      '; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( wp_unslash( $_REQUEST['s'] ) ) . '' ); echo ''; } ?>
      'message', 'additional_classes' => array( $class ), 'dismissible' => true, ) ); $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'message', 'error' ), $_SERVER['REQUEST_URI'] ); } ?>
      search_box( $tax->labels->search_items, 'tag' ); ?>
      cap->edit_terms ); if ( $can_edit_terms ) { ?>
      0 ) ), '3.0.0', '{$taxonomy}_pre_add_form' ); } elseif ( 'link_category' === $taxonomy ) { /** * Fires before the link category form. * * @since 2.3.0 * @deprecated 3.0.0 Use {@see '{$taxonomy}_pre_add_form'} instead. * * @param object $arg Optional arguments cast to an object. */ do_action_deprecated( 'add_link_category_form_pre', array( (object) array( 'parent' => 0 ) ), '3.0.0', '{$taxonomy}_pre_add_form' ); } else { /** * Fires before the Add Tag form. * * @since 2.5.0 * @deprecated 3.0.0 Use {@see '{$taxonomy}_pre_add_form'} instead. * * @param string $taxonomy The taxonomy slug. */ do_action_deprecated( 'add_tag_form_pre', array( $taxonomy ), '3.0.0', '{$taxonomy}_pre_add_form' ); } /** * Fires before the Add Term form for all taxonomies. * * The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug. * * Possible hook names include: * * - `category_pre_add_form` * - `post_tag_pre_add_form` * * @since 3.0.0 * * @param string $taxonomy The taxonomy slug. */ do_action( "{$taxonomy}_pre_add_form", $taxonomy ); ?>

      labels->add_new_item; ?>

      >

      labels->name_field_description; ?>

      labels->slug_field_description; ?>

      0, 'hide_if_empty' => false, 'taxonomy' => $taxonomy, 'name' => 'parent', 'orderby' => 'name', 'hierarchical' => true, 'show_option_none' => __( 'None' ), ); /** * Filters the taxonomy parent drop-down on the Edit Term page. * * @since 3.7.0 * @since 4.2.0 Added `$context` parameter. * * @param array $dropdown_args { * An array of taxonomy parent drop-down arguments. * * @type int|bool $hide_empty Whether to hide terms not attached to any posts. Default 0. * @type bool $hide_if_empty Whether to hide the drop-down if no terms exist. Default false. * @type string $taxonomy The taxonomy slug. * @type string $name Value of the name attribute to use for the drop-down select element. * Default 'parent'. * @type string $orderby The field to order by. Default 'name'. * @type bool $hierarchical Whether the taxonomy is hierarchical. Default true. * @type string $show_option_none Label to display if there are no terms. Default 'None'. * } * @param string $taxonomy The taxonomy slug. * @param string $context Filter context. Accepts 'new' or 'edit'. */ $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy, 'new' ); $dropdown_args['aria_describedby'] = 'parent-description'; wp_dropdown_categories( $dropdown_args ); ?>

      labels->parent_field_description; ?>

      labels->desc_field_description; ?>

      labels->add_new_item, 'primary', 'submit', false ); ?>

      0 ) ), '3.0.0', '{$taxonomy}_add_form' ); } elseif ( 'link_category' === $taxonomy ) { /** * Fires at the end of the Edit Link form. * * @since 2.3.0 * @deprecated 3.0.0 Use {@see '{$taxonomy}_add_form'} instead. * * @param object $arg Optional arguments cast to an object. */ do_action_deprecated( 'edit_link_category_form', array( (object) array( 'parent' => 0 ) ), '3.0.0', '{$taxonomy}_add_form' ); } else { /** * Fires at the end of the Add Tag form. * * @since 2.7.0 * @deprecated 3.0.0 Use {@see '{$taxonomy}_add_form'} instead. * * @param string $taxonomy The taxonomy slug. */ do_action_deprecated( 'add_tag_form', array( $taxonomy ), '3.0.0', '{$taxonomy}_add_form' ); } /** * Fires at the end of the Add Term form for all taxonomies. * * The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug. * * Possible hook names include: * * - `category_add_form` * - `post_tag_add_form` * * @since 3.0.0 * * @param string $taxonomy The taxonomy slug. */ do_action( "{$taxonomy}_add_form", $taxonomy ); ?>
      views(); ?>
      display(); ?>

      ' . apply_filters( 'the_category', get_cat_name( get_option( 'default_category' ) ), '', '' ) . '' ); ?>

      category to tag converter.' ), esc_url( $import_link ) ); ?>

      tag to category converter.' ), esc_url( $import_link ) ); ?>

      inline_edit(); require_once ABSPATH . 'wp-admin/admin-footer.php'; PK!•GQ×QQerase-personal-data.phpnu„[µü¤add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'This screen is where you manage requests to erase personal data.' ) . '

      ' . '

      ' . __( 'Privacy Laws around the world require businesses and online services to delete, anonymize, or forget the data they collect about an individual. The rights those laws enshrine are sometimes called the "Right to be Forgotten".' ) . '

      ' . '

      ' . __( 'The tool associates data stored in WordPress with a supplied email address, including profile data and comments.' ) . '

      ' . '

      ' . __( 'Note: As this tool only gathers data from WordPress and participating plugins, you may need to do more to comply with erasure requests. For example, you are also responsible for ensuring that data collected by or stored with the 3rd party services your organization uses gets deleted.' ) . '

      ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'default-data', 'title' => __( 'Default Data' ), 'content' => '

      ' . __( 'WordPress collects (but never publishes) a limited amount of data from logged-in users but then deletes it or anonymizes it. That data can include:' ) . '

      ' . '

      ' . __( 'Profile Information — user email address, username, display name, nickname, first name, last name, description/bio, and registration date.' ) . '

      ' . '

      ' . __( 'Community Events Location — The IP Address of the user which is used for the Upcoming Community Events shown in the dashboard widget.' ) . '

      ' . '

      ' . __( 'Session Tokens — User login information, IP Addresses, Expiration Date, User Agent (Browser/OS), and Last Login.' ) . '

      ' . '

      ' . __( 'Comments — WordPress does not delete comments. The software does anonymize (but, again, never publishes) the associated Email Address, IP Address, and User Agent (Browser/OS).' ) . '

      ' . '

      ' . __( 'Media — A list of URLs for all media file uploads made by the user.' ) . '

      ', ) ); $privacy_policy_guide = '

      ' . sprintf( /* translators: %s: URL to Privacy Policy Guide screen. */ __( 'If you are not sure, check the plugin documentation or contact the plugin author to see if the plugin collects data and if it supports the Data Eraser tool. This information may be available in the Privacy Policy Guide.' ), admin_url( 'options-privacy.php?tab=policyguide' ) ) . '

      '; get_current_screen()->add_help_tab( array( 'id' => 'plugin-data', 'title' => __( 'Plugin Data' ), 'content' => '

      ' . __( 'Many plugins may collect or store personal data either in the WordPress database or remotely. Any Erase Personal Data request should delete data from plugins as well.' ) . '

      ' . $privacy_policy_guide . '

      ' . __( 'If you are a plugin author, you can learn more about how to add the Personal Data Eraser to a plugin.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Erase Personal Data' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); // Handle list table actions. _wp_personal_data_handle_actions(); // Cleans up failed and expired requests before displaying the list table. _wp_personal_data_cleanup_requests(); wp_enqueue_script( 'privacy-tools' ); add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'remove_personal_data_requests_per_page', ) ); $_list_table_args = array( 'plural' => 'privacy_requests', 'singular' => 'privacy_request', ); $requests_table = _get_list_table( 'WP_Privacy_Data_Removal_Requests_List_Table', $_list_table_args ); $requests_table->screen->set_screen_reader_content( array( 'heading_views' => __( 'Filter erase personal data list' ), 'heading_pagination' => __( 'Erase personal data list navigation' ), 'heading_list' => __( 'Erase personal data list' ), ) ); $requests_table->process_bulk_action(); $requests_table->prepare_items(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>



      views(); ?>
      search_box( __( 'Search Requests' ), 'requests' ); ?>
      display(); $requests_table->embed_scripts(); ?>

      license, the GPL.' ), __( 'https://wordpress.org/about/license/' ) ); ?>

      check out the WordPress Foundation trademark guidelines first.' ), 'https://wordpressfoundation.org/trademark-policy/' ); ?>

      plugins and themes there. If you get a plugin or theme from another source, make sure to ask them if it’s GPL first. If they do not respect the WordPress license, it is not recommended to use them.' ), $plugins_url, $themes_url, __( 'https://wordpress.org/about/license/' ) ); ?>

      PK!·Õ§¶ÈÈfont-library.phpnu„[µü¤' . __( 'You need a higher level of permission.' ) . '' . '

      ' . __( 'Sorry, you are not allowed to manage fonts on this site.' ) . '

      ', 403 ); } // Check if Gutenberg build files are available if ( ! function_exists( 'wp_font_library_wp_admin_render_page' ) ) { wp_die( '

      ' . __( 'Font Library is not available.' ) . '

      ' . '

      ' . __( 'The Font Library requires Gutenberg build files. Please run npm install to build the necessary files.' ) . '

      ', 503 ); } // Set the page title $title = _x( 'Fonts', 'Font Library admin page title' ); $js_required_message = __( 'The Fonts screen requires JavaScript. Please enable JavaScript in your browser settings to install and manage fonts.' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?>
      post_parent ) ) { break; } $post = get_post( $revision->post_parent ); if ( ! $post ) { break; } // Don't restore if revisions are disabled and this is not an autosave. if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { $redirect = 'edit.php?post_type=' . $post->post_type; break; } // Don't restore if the post is locked. if ( wp_check_post_lock( $post->ID ) ) { break; } check_admin_referer( "restore-post_{$revision->ID}" ); /* * Ensure the global $post remains the same after revision is restored. * Because wp_insert_post() and wp_transition_post_status() are called * during the process, plugins can unexpectedly modify $post. */ $backup_global_post = clone $post; wp_restore_post_revision( $revision->ID ); // Restore the global $post as it was before. $post = $backup_global_post; $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID, ), get_edit_post_link( $post->ID, 'url' ) ); break; case 'view': case 'edit': default: $revision = wp_get_post_revision( $revision_id ); if ( ! $revision ) { break; } $post = get_post( $revision->post_parent ); if ( ! $post ) { break; } if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'edit_post', $revision->post_parent ) ) { break; } // Bail if revisions are disabled and this is not an autosave. if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { $redirect = 'edit.php?post_type=' . $post->post_type; break; } $post_edit_link = get_edit_post_link(); $post_title = '' . _draft_or_post_title() . ''; /* translators: %s: Post title. */ $h1 = sprintf( __( 'Compare Revisions of “%s”' ), $post_title ); $return_to_post = '' . __( '← Go to editor' ) . ''; // Used in the HTML title tag. $title = __( 'Revisions' ); $redirect = false; break; } // Empty post_type means either malformed object found, or no valid parent was found. if ( ! $redirect && empty( $post->post_type ) ) { $redirect = 'edit.php'; } if ( ! empty( $redirect ) ) { wp_redirect( $redirect ); exit; } // This is so that the correct "Edit" menu item is selected. if ( ! empty( $post->post_type ) && 'post' !== $post->post_type ) { $parent_file = 'edit.php?post_type=' . $post->post_type; } else { $parent_file = 'edit.php'; } $submenu_file = $parent_file; wp_enqueue_script( 'revisions' ); wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) ); /* Revisions Help Tab */ $revisions_overview = '

      ' . __( 'This screen is used for managing your content revisions.' ) . '

      '; $revisions_overview .= '

      ' . __( 'Revisions are saved copies of your post or page, which are periodically created as you update your content. The red text on the left shows the content that was removed. The green text on the right shows the content that was added.' ) . '

      '; $revisions_overview .= '

      ' . __( 'From this screen you can review, compare, and restore revisions:' ) . '

      '; $revisions_overview .= '
      • ' . __( 'To navigate between revisions, drag the slider handle left or right or use the Previous or Next buttons.' ) . '
      • '; $revisions_overview .= '
      • ' . __( 'Compare two different revisions by selecting the “Compare any two revisions” box to the side.' ) . '
      • '; $revisions_overview .= '
      • ' . __( 'To restore a revision, click Restore This Revision.' ) . '
      '; get_current_screen()->add_help_tab( array( 'id' => 'revisions-overview', 'title' => __( 'Overview' ), 'content' => $revisions_overview, ) ); $revisions_sidebar = '

      ' . __( 'For more information:' ) . '

      '; $revisions_sidebar .= '

      ' . __( 'Revisions Management' ) . '

      '; $revisions_sidebar .= '

      ' . __( 'Support forums' ) . '

      '; get_current_screen()->set_help_sidebar( $revisions_sidebar ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      comments, 'comment_author', 'tinytext' ) ) { * echo "ok\n"; * } * * // Check the column. * if ( ! check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { * $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' "; * $q = $wpdb->query( $ddl ); * } * * $error_count = 0; * $tablename = $wpdb->links; * * if ( check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { * $res .= $tablename . ' - ok
      '; * } else { * $res .= 'There was a problem with ' . $tablename . '
      '; * ++$error_count; * } * * @package WordPress * @subpackage Plugin */ /** Load WordPress Bootstrap */ require_once dirname( __DIR__ ) . '/wp-load.php'; if ( ! function_exists( 'maybe_create_table' ) ) : /** * Creates a table in the database if it doesn't already exist. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $create_ddl SQL statement to create table. * @return bool True on success or if the table already exists. False on failure. */ function maybe_create_table( $table_name, $create_ddl ) { global $wpdb; foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { if ( $table === $table_name ) { return true; } } // Didn't find it, so try to create it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $create_ddl ); // We cannot directly tell whether this succeeded! foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { if ( $table === $table_name ) { return true; } } return false; } endif; if ( ! function_exists( 'maybe_add_column' ) ) : /** * Adds column to database table, if it doesn't already exist. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $column_name Table column name. * @param string $create_ddl SQL statement to add column. * @return bool True on success or if the column already exists. False on failure. */ function maybe_add_column( $table_name, $column_name, $create_ddl ) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return true; } } // Didn't find it, so try to create it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $create_ddl ); // We cannot directly tell whether this succeeded! // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return true; } } return false; } endif; /** * Drops column from database table, if it exists. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $column_name Table column name. * @param string $drop_ddl SQL statement to drop column. * @return bool True on success or if the column doesn't exist. False on failure. */ function maybe_drop_column( $table_name, $column_name, $drop_ddl ) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { // Found it, so try to drop it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $drop_ddl ); // We cannot directly tell whether this succeeded! // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return false; } } } } // Else didn't find it. return true; } /** * Checks that database table column matches the criteria. * * Uses the SQL DESC for retrieving the table info for the column. It will help * understand the parameters, if you do more research on what column information * is returned by the SQL statement. Pass in null to skip checking that criteria. * * Column names returned from DESC table are case sensitive and are as listed: * * - Field * - Type * - Null * - Key * - Default * - Extra * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $col_name Table column name. * @param string $col_type Table column type. * @param bool $is_null Optional. Check is null. * @param mixed $key Optional. Key info. * @param mixed $default_value Optional. Default value. * @param mixed $extra Optional. Extra value. * @return bool True, if matches. False, if not matching. */ function check_column( $table_name, $col_name, $col_type, $is_null = null, $key = null, $default_value = null, $extra = null ) { global $wpdb; $diffs = 0; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. $results = $wpdb->get_results( "DESC $table_name" ); foreach ( $results as $row ) { if ( $row->Field === $col_name ) { // Got our column, check the params. if ( ( null !== $col_type ) && ( $row->Type !== $col_type ) ) { ++$diffs; } if ( ( null !== $is_null ) && ( $row->Null !== $is_null ) ) { ++$diffs; } if ( ( null !== $key ) && ( $row->Key !== $key ) ) { ++$diffs; } if ( ( null !== $default_value ) && ( $row->Default !== $default_value ) ) { ++$diffs; } if ( ( null !== $extra ) && ( $row->Extra !== $extra ) ) { ++$diffs; } if ( $diffs > 0 ) { return false; } return true; } // End if found our column. } return false; } PK!"[å§CCtheme-editor.phpnu„[µü¤' . __( 'Sorry, you are not allowed to edit templates for this site.' ) . '

      ' ); } // Used in the HTML title tag. $title = __( 'Edit Themes' ); $parent_file = 'themes.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'You can use the theme file editor to edit the individual CSS and PHP files which make up your theme.' ) . '

      ' . '

      ' . __( 'Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme’s template files. Clicking once on any file name causes the file to appear in the large Editor box.' ) . '

      ' . '

      ' . __( 'For PHP files, you can use the documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.' ) . '

      ' . '

      ' . __( 'When using a keyboard to navigate:' ) . '

      ' . '
        ' . '
      • ' . __( 'In the editing area, the Tab key enters a tab character.' ) . '
      • ' . '
      • ' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '
      • ' . '
      • ' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '
      • ' . '
      ' . '

      ' . __( 'After typing in your edits, click Update File.' ) . '

      ' . '

      ' . __( 'Advice: Think very carefully about your site crashing if you are live-editing the theme currently in use.' ) . '

      ' . '

      ' . sprintf( /* translators: %s: Link to documentation on child themes. */ __( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.' ), __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) ) . '

      ' . ( is_network_admin() ? '

      ' . __( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '

      ' : '' ), ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Theme Development' ) . '

      ' . '

      ' . __( 'Documentation on Editing Themes' ) . '

      ' . '

      ' . __( 'Documentation on Editing Files' ) . '

      ' . '

      ' . __( 'Documentation on Template Tags' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); $action = ! empty( $_REQUEST['action'] ) ? sanitize_text_field( $_REQUEST['action'] ) : ''; $theme = ! empty( $_REQUEST['theme'] ) ? sanitize_text_field( $_REQUEST['theme'] ) : ''; $file = ! empty( $_REQUEST['file'] ) ? sanitize_text_field( $_REQUEST['file'] ) : ''; $error = ! empty( $_REQUEST['error'] ); if ( $theme ) { $stylesheet = $theme; } else { $stylesheet = get_stylesheet(); } $theme = wp_get_theme( $stylesheet ); if ( ! $theme->exists() ) { wp_die( __( 'The requested theme does not exist.' ) ); } if ( $theme->errors() && 'theme_no_stylesheet' === $theme->errors()->get_error_code() ) { wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); } $allowed_files = array(); $style_files = array(); $file_types = wp_get_theme_file_editable_extensions( $theme ); foreach ( $file_types as $type ) { switch ( $type ) { case 'php': $allowed_files += $theme->get_files( 'php', -1 ); break; case 'css': $style_files = $theme->get_files( 'css', -1 ); $allowed_files['style.css'] = $style_files['style.css']; $allowed_files += $style_files; break; default: $allowed_files += $theme->get_files( $type, -1 ); break; } } // Move functions.php and style.css to the top. if ( isset( $allowed_files['functions.php'] ) ) { $allowed_files = array( 'functions.php' => $allowed_files['functions.php'] ) + $allowed_files; } if ( isset( $allowed_files['style.css'] ) ) { $allowed_files = array( 'style.css' => $allowed_files['style.css'] ) + $allowed_files; } if ( empty( $file ) ) { $relative_file = 'style.css'; $file = $allowed_files['style.css']; } else { $relative_file = wp_unslash( $file ); $file = $theme->get_stylesheet_directory() . '/' . $relative_file; } validate_file_to_edit( $file, $allowed_files ); // Handle fallback editing of file when JavaScript is not available. $edit_error = null; $posted_content = null; if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) { $edit_result = wp_edit_theme_plugin_file( wp_unslash( $_POST ) ); if ( is_wp_error( $edit_result ) ) { $edit_error = $edit_result; if ( check_ajax_referer( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce', false ) && isset( $_POST['newcontent'] ) ) { $posted_content = wp_unslash( $_POST['newcontent'] ); } } else { wp_redirect( add_query_arg( array( 'a' => 1, // This means "success" for some reason. 'theme' => $stylesheet, 'file' => $relative_file, ), admin_url( 'theme-editor.php' ) ) ); exit; } } $settings = array( 'codeEditor' => wp_enqueue_code_editor( compact( 'file' ) ), ); wp_enqueue_script( 'wp-theme-plugin-editor' ); wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )', wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); wp_add_inline_script( 'wp-theme-plugin-editor', 'wp.themePluginEditor.themeOrPlugin = "theme";' ); require_once ABSPATH . 'wp-admin/admin-header.php'; update_recently_edited( $file ); if ( ! is_file( $file ) ) { $error = true; } $content = ''; if ( ! empty( $posted_content ) ) { $content = $posted_content; } elseif ( ! $error && filesize( $file ) > 0 ) { $f = fopen( $file, 'r' ); $content = fread( $f, filesize( $file ) ); if ( str_ends_with( $file, '.php' ) ) { $functions = wp_doc_link_parse( $content ); if ( ! empty( $functions ) ) { $docs_select = ''; } } $content = esc_textarea( $content ); } $file_show = array_search( $file, array_filter( $allowed_files ), true ); ?>

      'message', 'dismissible' => true, 'additional_classes' => array( 'updated' ), ) ); } elseif ( is_wp_error( $edit_error ) ) { $error_code = esc_html( $edit_error->get_error_message() ? $edit_error->get_error_message() : $edit_error->get_error_code() ); $message = '

      ' . __( 'There was an error while trying to update the file. You may need to fix something and try updating again.' ) . '

      ' . $error_code . '
      '; wp_admin_notice( $message, array( 'type' => 'error', 'id' => 'message', ) ); } if ( preg_match( '/\.css$/', $file ) ) { if ( ! wp_is_block_theme() && current_user_can( 'customize' ) ) { $message = '

      ' . __( 'Did you know?' ) . '

      ' . sprintf( /* translators: %s: Link to add custom CSS section in either the Customizer (classic themes) or Site Editor (block themes). */ __( 'There is no need to change your CSS here — you can edit and live preview CSS changes in the built-in CSS editor.' ), esc_url( add_query_arg( 'autofocus[section]', 'custom_css', admin_url( 'customize.php' ) ) ) ) . '

      '; wp_admin_notice( $message, array( 'type' => 'info', 'id' => 'message', ) ); } elseif ( wp_is_block_theme() && current_user_can( 'edit_theme_options' ) ) { $site_editor_url = admin_url( add_query_arg( urlencode_deep( array( 'p' => '/styles', 'section' => '/css', ) ), 'site-editor.php' ) ); $message = '

      ' . __( 'Did you know?' ) . '

      ' . sprintf( /* translators: %s: Link to add custom CSS section in either the Customizer (classic themes) or Site Editor (block themes). */ __( 'There is no need to change your CSS here — you can edit and live preview CSS changes in the built-in CSS editor.' ), esc_url( $site_editor_url ) ) . '

      '; wp_admin_notice( $message, array( 'type' => 'info', 'id' => 'message', ) ); } if ( file_exists( preg_replace( '/\.css$/', '.min.css', $file ) ) ) { $message = '

      ' . __( 'There is a minified version of this stylesheet.' ) . '

      ' . __( 'It is likely that this unminified stylesheet will not be served to visitors.' ) . '

      '; wp_admin_notice( $message, array( 'type' => 'warning', 'id' => 'wp-css-min-warning', ) ); } } ?>

      get( 'Name' ) === $theme->display( 'Name' ) ) { /* translators: %s: Theme name. */ printf( __( 'Editing %s (active)' ), '' . $theme->display( 'Name' ) . '' ); } else { /* translators: %s: Theme name. */ printf( __( 'Editing %s (inactive)' ), '' . $theme->display( 'Name' ) . '' ); } ?>

      ' . __( 'File: %s' ) . '', esc_html( $file_show ) ); ?>

      errors() ) { wp_admin_notice( '' . __( 'This theme is broken.' ) . ' ' . $theme->errors()->get_error_message(), array( 'additional_classes' => array( 'error' ), ) ); } ?>

        parent() ) : ?>
      • %s', self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ), $theme->parent()->display( 'Name' ) ) ); ?>
      array( 'error' ), ) ); else : ?>
      get_stylesheet() === get_template() ) : $message = ( is_writable( $file ) ) ? '' . __( 'Caution:' ) . ' ' : ''; $message .= __( 'This is a file in your current parent theme.' ); wp_admin_notice( $message, array( 'type' => 'warning', 'additional_classes' => array( 'inline' ), ) ); endif; ?>

      Changing File Permissions for more information.' ), __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ) ); ?>


      comment_ID ); ?>

      comment_post_ID > 0 ) : $comment_link = get_comment_link( $comment ); ?>

      'strong,em,link,block,del,ins,img,ul,ol,li,code,close' ); wp_editor( $comment->comment_content, 'content', array( 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings, ) ); wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>

      comment_approved ) { case '1': _e( 'Approved' ); break; case '0': _e( 'Pending' ); break; case 'spam': _e( 'Spam' ); break; } ?>


      comment_date ) ), /* translators: Publish box time format, see https://www.php.net/manual/datetime.format.php */ date_i18n( _x( 'H:i', 'publish box time format' ), strtotime( $comment->comment_date ) ) ); ?> ' . $submitted . '' ); ?>
      comment_post_ID; if ( current_user_can( 'edit_post', $post_id ) ) { $post_link = ""; $post_link .= esc_html( get_the_title( $post_id ) ) . ''; } else { $post_link = esc_html( get_the_title( $post_id ) ); } ?>
      ' . $post_link . '' ); ?>
      comment_parent ) { $parent = get_comment( $comment->comment_parent ); if ( $parent ) { $parent_display = sprintf( '%s', esc_url( get_comment_link( $parent ) ), esc_html( get_comment_author( $parent ) ) ); } } // The parent can only be changed when threaded comments are enabled. $comment_threading_enabled = get_option( 'thread_comments' ); if ( $comment_threading_enabled ) { $max_thread_depth = (int) get_option( 'thread_comments_depth' ); // Pending comments may be nested under pending parents, but approved comments require publicly visible parents. $parent_statuses = '1' === $comment->comment_approved ? 'approve' : array( 'approve', 'hold' ); // Limit the number of comments to keep memory usage and the size of the dropdown reasonable on busy posts. $post_comments = get_comments( array( 'post_id' => $comment->comment_post_ID, 'type' => 'comment', 'status' => $parent_statuses, 'orderby' => 'comment_date_gmt', 'order' => 'DESC', 'number' => 100, ) ); // Restore chronological order for display. $post_comments = array_reverse( $post_comments ); // Index the comments by ID and by parent, to compute depths and find descendants. $post_comments_by_id = array(); $comments_by_parent = array(); foreach ( $post_comments as $post_comment ) { $post_comments_by_id[ (int) $post_comment->comment_ID ] = $post_comment; $comments_by_parent[ (int) $post_comment->comment_parent ][] = (int) $post_comment->comment_ID; } // Walk the descendants level by level, which also gives the height of the subtree that moves with the comment. $comment_descendants = array(); $comment_subtree_height = 1; $comment_level = array( (int) $comment->comment_ID ); while ( $comment_level ) { $next_level = array(); foreach ( $comment_level as $level_comment_id ) { if ( isset( $comments_by_parent[ $level_comment_id ] ) ) { foreach ( $comments_by_parent[ $level_comment_id ] as $descendant_id ) { $comment_descendants[ $descendant_id ] = true; $next_level[] = $descendant_id; } } } if ( $next_level ) { ++$comment_subtree_height; } $comment_level = $next_level; } // Compute each comment's depth, since comments at the maximum threading depth cannot become a parent. $comment_depths = array(); foreach ( $post_comments as $post_comment ) { $depth = 1; $ancestor_id = (int) $post_comment->comment_parent; while ( $ancestor_id && isset( $post_comments_by_id[ $ancestor_id ] ) ) { ++$depth; $ancestor_id = (int) $post_comments_by_id[ $ancestor_id ]->comment_parent; } $comment_depths[ (int) $post_comment->comment_ID ] = $depth; } } ?>
      ' . $parent_display . '' ); ?>

      comment_ID&_wp_original_http_referer=" . urlencode( wp_get_referer() ), 'delete-comment_' . $comment->comment_ID ) . "'>" . ( ! EMPTY_TRASH_DAYS ? __( 'Delete Permanently' ) : __( 'Move to Trash' ) ) . "\n"; ?>
      ' . __( 'You need a higher level of permission.' ) . '' . '

      ' . __( 'Sorry, you are not allowed to edit comments.' ) . '

      ', 403 ); } $wp_list_table = _get_list_table( 'WP_Comments_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $doaction = $wp_list_table->current_action(); if ( $doaction ) { check_admin_referer( 'bulk-comments' ); if ( 'delete_all' === $doaction && ! empty( $_REQUEST['pagegen_timestamp'] ) ) { /** * @global wpdb $wpdb WordPress database abstraction object. */ global $wpdb; $comment_status = wp_unslash( $_REQUEST['comment_status'] ); $delete_time = wp_unslash( $_REQUEST['pagegen_timestamp'] ); $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $comment_status, $delete_time ) ); $doaction = 'delete'; } elseif ( isset( $_REQUEST['delete_comments'] ) ) { $comment_ids = $_REQUEST['delete_comments']; $doaction = $_REQUEST['action']; } elseif ( isset( $_REQUEST['ids'] ) ) { $comment_ids = array_map( 'absint', explode( ',', $_REQUEST['ids'] ) ); } elseif ( wp_get_referer() ) { wp_safe_redirect( wp_get_referer() ); exit; } $approved = 0; $unapproved = 0; $spammed = 0; $unspammed = 0; $trashed = 0; $untrashed = 0; $deleted = 0; $redirect_to = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'spammed', 'unspammed', 'approved', 'unapproved', 'ids', ), wp_get_referer() ); $redirect_to = add_query_arg( 'paged', $pagenum, $redirect_to ); wp_defer_comment_counting( true ); foreach ( $comment_ids as $comment_id ) { // Check the permissions on each. if ( ! current_user_can( 'edit_comment', $comment_id ) ) { continue; } switch ( $doaction ) { case 'approve': wp_set_comment_status( $comment_id, 'approve' ); ++$approved; break; case 'unapprove': wp_set_comment_status( $comment_id, 'hold' ); ++$unapproved; break; case 'spam': wp_spam_comment( $comment_id ); ++$spammed; break; case 'unspam': wp_unspam_comment( $comment_id ); ++$unspammed; break; case 'trash': wp_trash_comment( $comment_id ); ++$trashed; break; case 'untrash': wp_untrash_comment( $comment_id ); ++$untrashed; break; case 'delete': wp_delete_comment( $comment_id ); ++$deleted; break; } } if ( ! in_array( $doaction, array( 'approve', 'unapprove', 'spam', 'unspam', 'trash', 'delete' ), true ) ) { $screen = get_current_screen()->id; /** This action is documented in wp-admin/edit.php */ $redirect_to = apply_filters( "handle_bulk_actions-{$screen}", $redirect_to, $doaction, $comment_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } wp_defer_comment_counting( false ); if ( $approved ) { $redirect_to = add_query_arg( 'approved', $approved, $redirect_to ); } if ( $unapproved ) { $redirect_to = add_query_arg( 'unapproved', $unapproved, $redirect_to ); } if ( $spammed ) { $redirect_to = add_query_arg( 'spammed', $spammed, $redirect_to ); } if ( $unspammed ) { $redirect_to = add_query_arg( 'unspammed', $unspammed, $redirect_to ); } if ( $trashed ) { $redirect_to = add_query_arg( 'trashed', $trashed, $redirect_to ); } if ( $untrashed ) { $redirect_to = add_query_arg( 'untrashed', $untrashed, $redirect_to ); } if ( $deleted ) { $redirect_to = add_query_arg( 'deleted', $deleted, $redirect_to ); } if ( $trashed || $spammed ) { $redirect_to = add_query_arg( 'ids', implode( ',', $comment_ids ), $redirect_to ); } wp_safe_redirect( $redirect_to ); exit; } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } $wp_list_table->prepare_items(); wp_enqueue_script( 'admin-comments' ); enqueue_comment_hotkeys_js(); /** * @global int $post_id */ global $post_id; if ( $post_id ) { $comments_count = wp_count_comments( $post_id ); $draft_or_post_title = wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: 1: Comments count, 2: Post title. */ __( 'Comments (%1$s) on “%2$s”' ), number_format_i18n( $comments_count->moderated ), $draft_or_post_title ); } else { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Post title. */ __( 'Comments on “%s”' ), $draft_or_post_title ); } } else { $comments_count = wp_count_comments(); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Comments count. */ __( 'Comments (%s)' ), number_format_i18n( $comments_count->moderated ) ); } else { // Used in the HTML title tag. $title = __( 'Comments' ); } } add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the bulk actions.' ) . '

      ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'moderating-comments', 'title' => __( 'Moderating Comments' ), 'content' => '

      ' . __( 'A red bar on the left means the comment is waiting for you to moderate it.' ) . '

      ' . '

      ' . __( 'In the Author column, in addition to the author’s name, email address, and site URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '

      ' . '

      ' . __( 'In the Comment column, hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '

      ' . '

      ' . __( 'In the In response to column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows the number of approved comments that post has received. If there are pending comments, a red notification circle with the number of pending comments is displayed. Clicking the notification circle will filter the comments screen to show only pending comments on that post.' ) . '

      ' . '

      ' . __( 'In the Submitted on column, the date and time the comment was left on your site appears. Clicking on the date/time link will take you to that comment on your live site.' ) . '

      ' . '

      ' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Comments' ) . '

      ' . '

      ' . __( 'Documentation on Comment Spam' ) . '

      ' . '

      ' . __( 'Documentation on Keyboard Shortcuts' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter comments list' ), 'heading_pagination' => __( 'Comments list navigation' ), 'heading_list' => __( 'Comments list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      %2$s', get_edit_post_link( $post_id ), wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) ) ); } else { _e( 'Comments' ); } ?>

      %2$s', get_permalink( $post_id ), $post_type_object->labels->view_item ); } } if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) { echo ''; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( wp_unslash( $_REQUEST['s'] ) ) . '' ); echo ''; } ?>
      'moderated', 'additional_classes' => array( 'error' ), ) ); } } if ( isset( $_REQUEST['approved'] ) || isset( $_REQUEST['deleted'] ) || isset( $_REQUEST['trashed'] ) || isset( $_REQUEST['untrashed'] ) || isset( $_REQUEST['spammed'] ) || isset( $_REQUEST['unspammed'] ) || isset( $_REQUEST['same'] ) ) { $approved = (int) ( $_REQUEST['approved'] ?? 0 ); $deleted = (int) ( $_REQUEST['deleted'] ?? 0 ); $trashed = (int) ( $_REQUEST['trashed'] ?? 0 ); $untrashed = (int) ( $_REQUEST['untrashed'] ?? 0 ); $spammed = (int) ( $_REQUEST['spammed'] ?? 0 ); $unspammed = (int) ( $_REQUEST['unspammed'] ?? 0 ); $same = (int) ( $_REQUEST['same'] ?? 0 ); if ( $approved > 0 || $deleted > 0 || $trashed > 0 || $untrashed > 0 || $spammed > 0 || $unspammed > 0 || $same > 0 ) { if ( $approved > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment approved.', '%s comments approved.', $approved ), $approved ); } if ( $spammed > 0 ) { $ids = $_REQUEST['ids'] ?? 0; $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment marked as spam.', '%s comments marked as spam.', $spammed ), $spammed ) . sprintf( ' %2$s
      ', esc_url( wp_nonce_url( "edit-comments.php?doaction=undo&action=unspam&ids=$ids", 'bulk-comments' ) ), __( 'Undo' ) ); } if ( $unspammed > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment restored from the spam.', '%s comments restored from the spam.', $unspammed ), $unspammed ); } if ( $trashed > 0 ) { $ids = $_REQUEST['ids'] ?? 0; $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment moved to the Trash.', '%s comments moved to the Trash.', $trashed ), $trashed ) . sprintf( ' %2$s
      ', esc_url( wp_nonce_url( "edit-comments.php?doaction=undo&action=untrash&ids=$ids", 'bulk-comments' ) ), __( 'Undo' ) ); } if ( $untrashed > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment restored from the Trash.', '%s comments restored from the Trash.', $untrashed ), $untrashed ); } if ( $deleted > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment permanently deleted.', '%s comments permanently deleted.', $deleted ), $deleted ); } if ( $same > 0 ) { $comment = get_comment( $same ); if ( $comment ) { switch ( $comment->comment_approved ) { case '1': $messages[] = __( 'This comment is already approved.' ) . sprintf( ' %2$s', esc_url( admin_url( "comment.php?action=editcomment&c=$same" ) ), __( 'Edit comment' ) ); break; case 'trash': $messages[] = __( 'This comment is already in the Trash.' ) . sprintf( ' %2$s', esc_url( admin_url( 'edit-comments.php?comment_status=trash' ) ), __( 'View Trash' ) ); break; case 'spam': $messages[] = __( 'This comment is already marked as spam.' ) . sprintf( ' %2$s', esc_url( admin_url( "comment.php?action=editcomment&c=$same" ) ), __( 'Edit comment' ) ); break; } } } wp_admin_notice( implode( "
      \n", $messages ), array( 'id' => 'moderated', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } } ?> views(); ?>
      search_box( __( 'Search Comments' ), 'comment' ); ?> display(); ?>
      PK!pþèÕadmin-ajax.phpnu„[µü¤ $post ) ); // Flag that we're loading the block editor. $current_screen = get_current_screen(); $current_screen->is_block_editor( true ); // Default to is-fullscreen-mode to avoid jumps in the UI. add_filter( 'admin_body_class', static function ( $classes ) { return "$classes is-fullscreen-mode"; } ); /* * Emoji replacement is disabled for now, until it plays nicely with React. */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); /* * Block editor implements its own Options menu for toggling Document Panels. */ add_filter( 'screen_options_show_screen', '__return_false' ); wp_enqueue_script( 'heartbeat' ); wp_enqueue_script( 'wp-edit-post' ); $rest_path = rest_get_route_for_post( $post ); $active_theme = get_stylesheet(); $global_styles_endpoint_context = current_user_can( 'edit_theme_options' ) ? 'edit' : 'view'; $template_lookup_slug = 'page' === $post->post_type ? 'page' : 'single-' . $post->post_type; if ( ! empty( $post->post_name ) ) { $template_lookup_slug .= '-' . $post->post_name; } // Preload common data. $preload_paths = array( '/wp/v2/types?context=view', '/wp/v2/taxonomies?context=view', add_query_arg( 'context', 'edit', $rest_path ), sprintf( '/wp/v2/types/%s?context=edit', $post_type ), '/wp/v2/users/me', array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'page' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_block' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_template' ), 'OPTIONS' ), sprintf( '%s/autosaves?context=edit', $rest_path ), '/wp/v2/settings', array( '/wp/v2/settings', 'OPTIONS' ), '/wp/v2/global-styles/themes/' . $active_theme . '?context=view', '/wp/v2/global-styles/themes/' . $active_theme . '/variations?context=view', '/wp/v2/themes?context=edit&status=active', array( '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id(), 'OPTIONS' ), /* * Preload the global styles path with the correct context based on user caps. * NOTE: There is an equivalent conditional check in the client-side code to fetch * the global styles entity using the appropriate context value. * See the call to `canUser()`, under `useGlobalStylesUserConfig()` in `packages/edit-site/src/components/use-global-styles-user-config/index.js`. * Please ensure that the equivalent check is kept in sync with this preload path. */ '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id() . '?context=' . $global_styles_endpoint_context, // Used by getBlockPatternCategories in useBlockEditorSettings. '/wp/v2/block-patterns/categories', /** * The preloaded URL must exactly match the request the client makes, * including the field order. * @link https://github.com/WordPress/gutenberg/blob/trunk/packages/core-data/src/entities.js */ '/?_fields=' . implode( ',', array( 'description', 'gmt_offset', 'home', 'image_max_bit_depth', 'image_sizes', 'image_size_threshold', 'image_strip_meta', 'name', 'site_icon', 'site_icon_url', 'site_logo', 'timezone_string', 'url', 'page_for_posts', 'page_on_front', 'show_on_front', ) ), add_query_arg( 'slug', // @link https://github.com/WordPress/gutenberg/blob/e093fefd041eb6cc4a4e7f67b92ab54fd75c8858/packages/core-data/src/private-selectors.ts#L244-L254 $template_lookup_slug, '/wp/v2/templates/lookup' ), '/wp/v2/templates/lookup?slug=front-page', '/wp/v2/taxonomies?context=edit', array( rest_get_route_for_post_type_items( $post_type ), 'OPTIONS' ), ); if ( post_type_supports( $post_type, 'author' ) && $post->post_author > 0 ) { $preload_paths[] = sprintf( '/wp/v2/users/%d?context=view&_fields=id,name', (int) $post->post_author ); } block_editor_rest_api_preload( $preload_paths, $block_editor_context ); wp_add_inline_script( 'wp-blocks', sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); /* * Assign initial edits, if applicable. These are not initially assigned to the persisted post, * but should be included in its save payload. */ $initial_edits = array(); $is_new_post = false; if ( 'auto-draft' === $post->post_status ) { $is_new_post = true; // Override "(Auto Draft)" new post default title with empty string, or filtered value. if ( post_type_supports( $post->post_type, 'title' ) ) { $initial_edits['title'] = $post->post_title; } if ( post_type_supports( $post->post_type, 'editor' ) ) { $initial_edits['content'] = $post->post_content; } if ( post_type_supports( $post->post_type, 'excerpt' ) ) { $initial_edits['excerpt'] = $post->post_excerpt; } } // Preload server-registered block schemas. wp_add_inline_script( 'wp-blocks', 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ');' ); // Preload server-registered block bindings sources. $registered_sources = get_all_registered_block_bindings_sources(); if ( ! empty( $registered_sources ) ) { $filtered_sources = array(); foreach ( $registered_sources as $source ) { $filtered_sources[] = array( 'name' => $source->name, 'label' => $source->label, 'usesContext' => $source->uses_context, ); } $script = sprintf( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }', wp_json_encode( $filtered_sources, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-blocks', $script ); } // Get admin url for handling meta boxes. $meta_box_url = admin_url( 'post.php' ); $meta_box_url = add_query_arg( array( 'post' => $post->ID, 'action' => 'edit', 'meta-box-loader' => true, 'meta-box-loader-nonce' => wp_create_nonce( 'meta-box-loader' ), ), $meta_box_url ); wp_add_inline_script( 'wp-editor', sprintf( 'var _wpMetaBoxUrl = %s;', wp_json_encode( $meta_box_url, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'before' ); // Set Heartbeat interval to 10 seconds, used to refresh post locks. wp_add_inline_script( 'heartbeat', 'jQuery( function() { wp.heartbeat.interval( 10 ); } );', 'after' ); /* * Get all available templates for the post/page attributes meta-box. * The "Default template" array element should only be added if the array is * not empty so we do not trigger the template select element without any options * besides the default value. */ $available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); $available_templates = ! empty( $available_templates ) ? array_replace( array( /** This filter is documented in wp-admin/includes/meta-boxes.php */ '' => apply_filters( 'default_page_template_title', __( 'Default template' ), 'rest-api' ), ), $available_templates ) : $available_templates; // Lock settings. $user_id = wp_check_post_lock( $post->ID ); if ( $user_id ) { $locked = false; /** This filter is documented in wp-admin/includes/post.php */ if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { $locked = true; } $user_details = null; if ( $locked ) { $user = get_userdata( $user_id ); $user_details = array( 'name' => $user->display_name, ); if ( get_option( 'show_avatars' ) ) { $user_details['avatar'] = get_avatar_url( $user_id, array( 'size' => 128 ) ); } } $lock_details = array( 'isLocked' => $locked, 'user' => $user_details, ); } else { // Lock the post. $active_post_lock = wp_set_post_lock( $post->ID ); if ( $active_post_lock ) { $active_post_lock = esc_attr( implode( ':', $active_post_lock ) ); } $lock_details = array( 'isLocked' => false, 'activePostLock' => $active_post_lock, ); } /** * Filters the body placeholder text. * * @since 5.0.0 * @since 5.8.0 Changed the default placeholder text. * * @param string $text Placeholder text. Default 'Type / to choose a block'. * @param WP_Post $post Post object. */ $body_placeholder = apply_filters( 'write_your_story', __( 'Type / to choose a block' ), $post ); $editor_settings = array( 'availableTemplates' => $available_templates, 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), /** This filter is documented in wp-admin/edit-form-advanced.php */ 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title' ), $post ), 'bodyPlaceholder' => $body_placeholder, 'autosaveInterval' => AUTOSAVE_INTERVAL, 'richEditingEnabled' => user_can_richedit(), 'postLock' => $lock_details, 'postLockUtils' => array( 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), ), 'supportsLayout' => wp_theme_has_theme_json(), 'supportsTemplateMode' => current_theme_supports( 'block-templates' ), // Whether or not to load the 'postcustom' meta box is stored as a user meta // field so that we're not always loading its assets. 'enableCustomFields' => (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), ); // Add additional back-compat patterns registered by `current_screen` et al. $editor_settings['__experimentalAdditionalBlockPatterns'] = WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ); $editor_settings['__experimentalAdditionalBlockPatternCategories'] = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ); $autosave = wp_get_post_autosave( $post->ID ); if ( $autosave ) { if ( mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { $editor_settings['autosave'] = array( 'editLink' => get_edit_post_link( $autosave->ID ), ); } else { wp_delete_post_revision( $autosave->ID ); } } if ( ! empty( $post_type_object->template ) ) { $editor_settings['template'] = $post_type_object->template; $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; } // If there's no template set on a new post, use the post format, instead. if ( $is_new_post && ! isset( $editor_settings['template'] ) && 'post' === $post->post_type ) { $post_format = get_post_format( $post ); if ( in_array( $post_format, array( 'audio', 'gallery', 'image', 'quote', 'video' ), true ) ) { $editor_settings['template'] = array( array( "core/$post_format" ) ); } } if ( wp_is_block_theme() && $editor_settings['supportsTemplateMode'] ) { $editor_settings['defaultTemplatePartAreas'] = get_allowed_block_template_part_areas(); } /** * Scripts */ wp_enqueue_media( array( 'post' => $post->ID, ) ); wp_tinymce_inline_scripts(); wp_enqueue_editor(); /** * Styles */ wp_enqueue_style( 'wp-edit-post' ); /** * Fires after block assets have been enqueued for the editing interface. * * Call `add_action` on any hook before 'admin_enqueue_scripts'. * * In the function call you supply, simply use `wp_enqueue_script` and * `wp_enqueue_style` to add your functionality to the block editor. * * @since 5.0.0 */ do_action( 'enqueue_block_editor_assets' ); // In order to duplicate classic meta box behavior, we need to run the classic meta box actions. require_once ABSPATH . 'wp-admin/includes/meta-boxes.php'; register_and_do_post_meta_boxes( $post ); // Check if the Custom Fields meta box has been removed at some point. $core_meta_boxes = $wp_meta_boxes[ $current_screen->id ]['normal']['core']; if ( ! isset( $core_meta_boxes['postcustom'] ) || ! $core_meta_boxes['postcustom'] ) { unset( $editor_settings['enableCustomFields'] ); } $editor_settings = get_block_editor_settings( $editor_settings, $block_editor_context ); $init_script = <<post_type, $post->ID, wp_json_encode( $editor_settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), wp_json_encode( $initial_edits, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-edit-post', $script ); if ( (int) get_option( 'page_for_posts' ) === $post->ID ) { add_action( 'admin_enqueue_scripts', '_wp_block_editor_posts_page_notice' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      Classic Editor plugin.' ), esc_url( $plugin_activate_url ) ); } else { // If Classic Editor is not installed, provide a link to install it. $installed = false; $plugin_install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' ); $message = sprintf( /* translators: %s: Link to install the Classic Editor plugin. */ __( 'The block editor requires JavaScript. Please enable JavaScript in your browser settings, or install the Classic Editor plugin.' ), esc_url( $plugin_install_url ) ); } /** * Filters the message displayed in the block editor interface when JavaScript is * not enabled in the browser. * * @since 5.0.3 * @since 6.4.0 Added `$installed` parameter. * * @param string $message The message being displayed. * @param WP_Post $post The post being edited. * @param bool $installed Whether the classic editor is installed. */ $message = apply_filters( 'block_editor_no_javascript_message', $message, $post, $installed ); wp_admin_notice( $message, array( 'type' => 'error', ) ); ?>
      PK!Bƒ�Ó¼;¼; upload.phpnu„[µü¤%2$s', esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids=' . ( $_GET['ids'] ?? '' ), 'bulk-media' ) ), __( 'Undo' ) ); $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'trashed' ), $_SERVER['REQUEST_URI'] ); unset( $_GET['trashed'] ); } if ( ! empty( $_GET['untrashed'] ) && absint( $_GET['untrashed'] ) ) { $untrashed = absint( $_GET['untrashed'] ); if ( 1 === $untrashed ) { $message = __( 'Media file restored from the Trash.' ); } else { $message = sprintf( /* translators: %s: Number of media files. */ _n( '%s media file restored from the Trash.', '%s media files restored from the Trash.', $untrashed ), number_format_i18n( $untrashed ) ); } $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'untrashed' ), $_SERVER['REQUEST_URI'] ); unset( $_GET['untrashed'] ); } $messages[1] = __( 'Media file updated.' ); $messages[2] = __( 'Media file permanently deleted.' ); $messages[3] = __( 'Error saving media file.' ); $messages[4] = __( 'Media file moved to the Trash.' ) . sprintf( ' %2$s', esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids=' . ( $_GET['ids'] ?? '' ), 'bulk-media' ) ), __( 'Undo' ) ); $messages[5] = __( 'Media file restored from the Trash.' ); if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) { $message = $messages[ $_GET['message'] ]; $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'message' ), $_SERVER['REQUEST_URI'] ); } $modes = array( 'grid', 'list' ); if ( isset( $_GET['mode'] ) && in_array( $_GET['mode'], $modes, true ) ) { $mode = $_GET['mode']; update_user_option( get_current_user_id(), 'media_library_mode', $mode ); } else { $mode = get_user_option( 'media_library_mode', get_current_user_id() ) ? get_user_option( 'media_library_mode', get_current_user_id() ) : 'grid'; } if ( 'grid' === $mode ) { wp_enqueue_media(); wp_enqueue_script( 'media-grid' ); wp_enqueue_script( 'media' ); // Remove the error parameter added by deprecation of wp-admin/media.php. add_filter( 'removable_query_args', function () { return array( 'error' ); }, 10, 0 ); $query_string = $_GET; // Let JS handle this. unset( $query_string['s'] ); $query_vars = wp_edit_attachments_query_vars( $query_string ); $ignore = array( 'mode', 'post_type', 'post_status', 'posts_per_page' ); foreach ( $query_vars as $key => $value ) { if ( ! $value || in_array( $key, $ignore, true ) ) { unset( $query_vars[ $key ] ); } } wp_localize_script( 'media-grid', '_wpMediaGridSettings', array( 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ), 'queryVars' => (object) $query_vars, ) ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first.' ) . '

      ' . '

      ' . __( 'You can view your media in a simple visual grid or a list with columns. Switch between these views using the icons to the left above the media.' ) . '

      ' . '

      ' . __( 'To delete media items, click the Bulk select button at the top of the screen. Select any items you wish to delete, then click the Delete permanently button. Clicking the Cancel button takes you back to viewing your media.' ) . '

      ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'attachment-details', 'title' => __( 'Attachment Details' ), 'content' => '

      ' . __( 'Clicking an item will display an Attachment Details dialog, which allows you to preview media and make quick edits. Any changes you make to the attachment details will be automatically saved.' ) . '

      ' . '

      ' . __( 'Use the buttons at the top of the dialog, or alt/option plus the left or right arrow keys on your keyboard, to navigate between media items quickly.' ) . '

      ' . '

      ' . __( 'You can also delete individual items and access the extended edit screen from the details dialog.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Media Library' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); // Used in the HTML title tag. $title = __( 'Media Library' ); $parent_file = 'upload.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>


      'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } $js_required_message = sprintf( /* translators: %s: List view URL. */ __( 'The grid view for the Media Library requires JavaScript. Switch to the list view.' ), 'upload.php?mode=list' ); wp_admin_notice( $js_required_message, array( 'additional_classes' => array( 'error', 'hide-if-js' ), ) ); ?>
      get_pagenum(); // Handle bulk actions. $doaction = $wp_list_table->current_action(); if ( $doaction ) { check_admin_referer( 'bulk-media' ); $post_ids = array(); if ( 'delete_all' === $doaction ) { $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" ); $doaction = 'delete'; } elseif ( isset( $_REQUEST['media'] ) ) { $post_ids = $_REQUEST['media']; } elseif ( isset( $_REQUEST['ids'] ) ) { $post_ids = explode( ',', $_REQUEST['ids'] ); } $post_ids = array_map( 'intval', (array) $post_ids ); $location = 'upload.php'; $referer = wp_get_referer(); if ( $referer ) { if ( str_contains( $referer, 'upload.php' ) ) { $location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer ); } } switch ( $doaction ) { case 'detach': wp_media_attach_action( $_REQUEST['parent_post_id'], 'detach' ); break; case 'attach': wp_media_attach_action( $_REQUEST['found_post_id'] ); break; case 'trash': if ( empty( $post_ids ) ) { break; } foreach ( $post_ids as $post_id ) { if ( ! current_user_can( 'delete_post', $post_id ) ) { wp_die( __( 'Sorry, you are not allowed to move this item to the Trash.' ) ); } if ( ! wp_trash_post( $post_id ) ) { wp_die( __( 'Error in moving the item to Trash.' ) ); } } $location = add_query_arg( array( 'trashed' => count( $post_ids ), 'ids' => implode( ',', $post_ids ), ), $location ); break; case 'untrash': if ( empty( $post_ids ) ) { break; } foreach ( $post_ids as $post_id ) { if ( ! current_user_can( 'delete_post', $post_id ) ) { wp_die( __( 'Sorry, you are not allowed to restore this item from the Trash.' ) ); } if ( ! wp_untrash_post( $post_id ) ) { wp_die( __( 'Error in restoring the item from Trash.' ) ); } } $location = add_query_arg( 'untrashed', count( $post_ids ), $location ); break; case 'delete': if ( empty( $post_ids ) ) { break; } foreach ( $post_ids as $post_id_del ) { if ( ! current_user_can( 'delete_post', $post_id_del ) ) { wp_die( __( 'Sorry, you are not allowed to delete this item.' ) ); } if ( ! wp_delete_attachment( $post_id_del ) ) { wp_die( __( 'Error in deleting the attachment.' ) ); } } $location = add_query_arg( 'deleted', count( $post_ids ), $location ); break; default: $screen = get_current_screen()->id; /** This action is documented in wp-admin/edit.php */ $location = apply_filters( "handle_bulk_actions-{$screen}", $location, $doaction, $post_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } wp_redirect( $location ); exit; } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } $wp_list_table->prepare_items(); // Used in the HTML title tag. $title = __( 'Media Library' ); $parent_file = 'upload.php'; wp_enqueue_script( 'media' ); add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen.' ) . '

      ' . '

      ' . __( 'You can narrow the list by file type/status or by date using the dropdown menus above the media table.' ) . '

      ' . '

      ' . __( 'You can view your media in a simple visual grid or a list with columns. Switch between these views using the icons to the left above the media.' ) . '

      ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'actions-links', 'title' => __( 'Available Actions' ), 'content' => '

      ' . __( 'Hovering over a row reveals action links that allow you to manage media items. You can perform the following actions:' ) . '

      ' . '
        ' . '
      • ' . __( 'Edit takes you to a simple screen to edit that individual file’s metadata. You can also reach that screen by clicking on the media file name or thumbnail.' ) . '
      • ' . '
      • ' . __( 'Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached).' ) . '
      • ' . '
      • ' . __( 'View will take you to a public display page for that file.' ) . '
      • ' . '
      • ' . __( 'Copy URL copies the URL for the media file to your clipboard.' ) . '
      • ' . '
      • ' . __( 'Download file downloads the original media file to your device.' ) . '
      • ' . '
      ', ) ); get_current_screen()->add_help_tab( array( 'id' => 'attaching-files', 'title' => __( 'Attaching Files' ), 'content' => '

      ' . __( 'If a media file has not been attached to any content, you will see that in the Uploaded To column, and can click on Attach to launch a small popup that will allow you to search for existing content and attach the file.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Media Library' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter media items list' ), 'heading_pagination' => __( 'Media items list navigation' ), 'heading_list' => __( 'Media items list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      '; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . get_search_query() . '' ); echo ''; } ?>
      'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } ?>
      views(); ?> display(); ?>
      get_pagenum(); // Used in the HTML title tag. $title = __( 'Sites' ); $parent_file = 'sites.php'; add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'Add Site takes you to the screen for adding a new site to the network. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page.' ) . '

      ' . '

      ' . __( 'This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.' ) . '

      ' . '

      ' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '

      ' . '
      • ' . __( 'An Edit link to a separate Edit Site screen.' ) . '
      • ' . '
      • ' . __( 'Dashboard leads to the Dashboard for that site.' ) . '
      • ' . '
      • ' . __( 'Flag for Deletion, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '
      • ' . '
      • ' . __( 'Delete Permanently which is a permanent action after the confirmation screen.' ) . '
      • ' . '
      • ' . __( 'Visit to go to the front-end of the live site.' ) . '
      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Site Management' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); get_current_screen()->set_screen_reader_content( array( 'heading_pagination' => __( 'Sites list navigation' ), 'heading_list' => __( 'Sites list' ), ) ); $id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0; if ( isset( $_GET['action'] ) ) { /** This action is documented in wp-admin/network/edit.php */ do_action( 'wpmuadminedit' ); // A list of valid actions and their associated messaging for confirmation output. $manage_actions = array( /* translators: %s: Site URL. */ 'activateblog' => __( 'You are about to remove the deletion flag from the site %s.' ), /* translators: %s: Site URL. */ 'deactivateblog' => __( 'You are about to flag the site %s for deletion.' ), /* translators: %s: Site URL. */ 'unarchiveblog' => __( 'You are about to unarchive the site %s.' ), /* translators: %s: Site URL. */ 'archiveblog' => __( 'You are about to archive the site %s.' ), /* translators: %s: Site URL. */ 'unspamblog' => __( 'You are about to unspam the site %s.' ), /* translators: %s: Site URL. */ 'spamblog' => __( 'You are about to mark the site %s as spam.' ), /* translators: %s: Site URL. */ 'deleteblog' => __( 'You are about to delete the site %s.' ), /* translators: %s: Site URL. */ 'unmatureblog' => __( 'You are about to mark the site %s as mature.' ), /* translators: %s: Site URL. */ 'matureblog' => __( 'You are about to mark the site %s as not mature.' ), ); if ( 'confirm' === $_GET['action'] ) { // The action2 parameter contains the action being taken on the site. $site_action = $_GET['action2']; if ( ! array_key_exists( $site_action, $manage_actions ) ) { wp_die( __( 'The requested action is not valid.' ) ); } // The mature/unmature UI exists only as external code. Check the "confirm" nonce for backward compatibility. if ( 'matureblog' === $site_action || 'unmatureblog' === $site_action ) { check_admin_referer( 'confirm' ); } else { check_admin_referer( $site_action . '_' . $id ); } if ( ! headers_sent() ) { nocache_headers(); header( 'Content-Type: text/html; charset=utf-8' ); } if ( is_main_site( $id ) ) { wp_die( __( 'Sorry, you are not allowed to change the current site.' ) ); } $site_details = get_site( $id ); $site_address = untrailingslashit( $site_details->domain . $site_details->path ); $submit = __( 'Confirm' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      {$site_address}" ); ?>

      403 ) ); } $updated_action = 'not_deleted'; if ( 0 !== $id && ! is_main_site( $id ) && current_user_can( 'delete_site', $id ) ) { wpmu_delete_blog( $id, true ); $updated_action = 'delete'; } break; case 'delete_sites': check_admin_referer( 'ms-delete-sites' ); foreach ( (array) $_POST['site_ids'] as $site_id ) { $site_id = (int) $site_id; if ( is_main_site( $site_id ) ) { continue; } if ( ! current_user_can( 'delete_site', $site_id ) ) { $site = get_site( $site_id ); $site_address = untrailingslashit( $site->domain . $site->path ); wp_die( sprintf( /* translators: %s: Site URL. */ __( 'Sorry, you are not allowed to delete the site %s.' ), $site_address ), 403 ); } $updated_action = 'all_delete'; wpmu_delete_blog( $site_id, true ); } break; case 'allblogs': if ( isset( $_POST['action'] ) && isset( $_POST['allblogs'] ) ) { $doaction = $_POST['action']; foreach ( (array) $_POST['allblogs'] as $site_id ) { $site_id = (int) $site_id; if ( 0 !== $site_id && ! is_main_site( $site_id ) ) { switch ( $doaction ) { case 'delete': require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

        domain . $site->path ); ?>
      id, $redirect_to, $doaction, $blogs, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $redirect_to ); exit; } } else { // Process query defined by WP_MS_Site_List_Table::extra_table_nav(). $location = remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), add_query_arg( $_POST, network_admin_url( 'sites.php' ) ) ); wp_redirect( $location ); exit; } break; case 'archiveblog': case 'unarchiveblog': update_blog_status( $id, 'archived', ( 'archiveblog' === $_GET['action'] ) ? '1' : '0' ); break; case 'activateblog': update_blog_status( $id, 'deleted', '0' ); /** * Fires after a network site has its deletion flag removed. * * @since MU (3.0.0) * * @param int $id The ID of the reactivated site. */ do_action( 'activate_blog', $id ); break; case 'deactivateblog': /** * Fires before a network site is flagged for deletion. * * @since MU (3.0.0) * * @param int $id The ID of the site being flagged for deletion. */ do_action( 'deactivate_blog', $id ); update_blog_status( $id, 'deleted', '1' ); break; case 'unspamblog': case 'spamblog': update_blog_status( $id, 'spam', ( 'spamblog' === $_GET['action'] ) ? '1' : '0' ); break; case 'unmatureblog': case 'matureblog': update_blog_status( $id, 'mature', ( 'matureblog' === $_GET['action'] ) ? '1' : '0' ); break; } if ( empty( $updated_action ) && array_key_exists( $_GET['action'], $manage_actions ) ) { $updated_action = $_GET['action']; } if ( ! empty( $updated_action ) ) { wp_safe_redirect( add_query_arg( array( 'updated' => $updated_action ), wp_get_referer() ) ); exit; } } $msg = ''; if ( isset( $_GET['updated'] ) ) { $action = $_GET['updated']; switch ( $action ) { case 'all_notspam': $msg = __( 'Sites removed from spam.' ); break; case 'all_spam': $msg = __( 'Sites marked as spam.' ); break; case 'all_delete': $msg = __( 'Sites permanently deleted.' ); break; case 'delete': $msg = __( 'Site permanently deleted.' ); break; case 'not_deleted': $msg = __( 'Sorry, you are not allowed to delete that site.' ); break; case 'archiveblog': $msg = __( 'Site archived.' ); break; case 'unarchiveblog': $msg = __( 'Site unarchived.' ); break; case 'activateblog': $msg = __( 'Site deletion flag removed.' ); break; case 'deactivateblog': $msg = __( 'Site flagged for deletion.' ); break; case 'unspamblog': $msg = __( 'Site removed from spam.' ); break; case 'spamblog': $msg = __( 'Site marked as spam.' ); break; default: /** * Filters a specific, non-default, site-updated message in the Network admin. * * The dynamic portion of the hook name, `$action`, refers to the non-default * site update action. * * @since 3.1.0 * * @param string $msg The update message. Default 'Settings saved'. */ $msg = apply_filters( "network_sites_updated_message_{$action}", __( 'Settings saved.' ) ); break; } if ( ! empty( $msg ) ) { $msg = wp_get_admin_notice( $msg, array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } } $wp_list_table->prepare_items(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      '; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( $s ) . '' ); echo ''; } ?>
      views(); ?>
      display(); ?>
      PK!Òñ9T . .network/site-users.phpnu„[µü¤prepare_items(); get_current_screen()->add_help_tab( get_site_screen_help_tab_args() ); get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter site users list' ), 'heading_pagination' => __( 'Site users list navigation' ), 'heading_list' => __( 'Site users list' ), ) ); $_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] ); $referer = remove_query_arg( 'update', wp_get_referer() ); if ( ! empty( $_REQUEST['paged'] ) ) { $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer ); } $id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0; if ( ! $id ) { wp_die( __( 'Invalid site ID.' ) ); } $details = get_site( $id ); if ( ! $details ) { wp_die( __( 'The requested site does not exist.' ) ); } if ( ! can_edit_network( $details->site_id ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } $is_main_site = is_main_site( $id ); switch_to_blog( $id ); $action = $wp_list_table->current_action(); if ( $action ) { switch ( $action ) { case 'newuser': check_admin_referer( 'add-user', '_wpnonce_add-new-user' ); $user = $_POST['user']; if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) { $update = 'err_new'; } else { $password = wp_generate_password( 12, false ); $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); if ( false === $user_id ) { $update = 'err_new_dup'; } else { $result = add_user_to_blog( $id, $user_id, $_POST['new_role'] ); if ( is_wp_error( $result ) ) { $update = 'err_add_fail'; } else { $update = 'newuser'; /** * Fires after a user has been created via the network site-users.php page. * * @since 4.4.0 * * @param int $user_id ID of the newly created user. */ do_action( 'network_site_users_created_user', $user_id ); } } } break; case 'adduser': check_admin_referer( 'add-user', '_wpnonce_add-user' ); if ( ! empty( $_POST['newuser'] ) ) { $update = 'adduser'; $newuser = $_POST['newuser']; $user = get_user_by( 'login', $newuser ); if ( $user && $user->exists() ) { if ( ! is_user_member_of_blog( $user->ID, $id ) ) { $result = add_user_to_blog( $id, $user->ID, $_POST['new_role'] ); if ( is_wp_error( $result ) ) { $update = 'err_add_fail'; } } else { $update = 'err_add_member'; } } else { $update = 'err_add_notfound'; } } else { $update = 'err_add_notfound'; } break; case 'remove': if ( ! current_user_can( 'remove_users' ) ) { wp_die( __( 'Sorry, you are not allowed to remove users.' ), 403 ); } check_admin_referer( 'bulk-users' ); $update = 'remove'; if ( isset( $_REQUEST['users'] ) ) { $userids = $_REQUEST['users']; foreach ( $userids as $user_id ) { $user_id = (int) $user_id; remove_user_from_blog( $user_id, $id ); } } elseif ( isset( $_GET['user'] ) ) { remove_user_from_blog( $_GET['user'] ); } else { $update = 'err_remove'; } break; case 'promote': check_admin_referer( 'bulk-users' ); if ( ! current_user_can( 'promote_users' ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); } $editable_roles = get_editable_roles(); $role = $_REQUEST['new_role']; // Mock `none` as editable role. $editable_roles['none'] = array( 'name' => __( '— No role for this site —' ), ); if ( empty( $editable_roles[ $role ] ) ) { wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); } if ( 'none' === $role ) { $role = ''; } if ( isset( $_REQUEST['users'] ) ) { $userids = $_REQUEST['users']; $update = 'promote'; foreach ( $userids as $user_id ) { $user_id = (int) $user_id; if ( ! current_user_can( 'promote_user', $user_id ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); } // If the user doesn't already belong to the blog, bail. if ( ! is_user_member_of_blog( $user_id ) ) { wp_die( '

      ' . __( 'An error occurred.' ) . '

      ' . '

      ' . __( 'One of the selected users is not a member of this site.' ) . '

      ', 403 ); } $user = get_userdata( $user_id ); // If $role is empty, none will be set. $user->set_role( $role ); } } else { $update = 'err_promote'; } break; default: if ( ! isset( $_REQUEST['users'] ) ) { break; } check_admin_referer( 'bulk-users' ); $userids = $_REQUEST['users']; /** This action is documented in wp-admin/network/site-themes.php */ $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores $update = $action; break; } wp_safe_redirect( add_query_arg( 'update', $update, $referer ) ); exit; } restore_current_blog(); if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) { wp_safe_redirect( $referer ); exit; } add_screen_option( 'per_page' ); // Used in the HTML title tag. /* translators: %s: Site title. */ $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; /** * Filters whether to show the Add Existing User form on the Multisite Users screen. * * @since 3.1.0 * * @param bool $bool Whether to show the Add Existing User form. Default true. */ if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) { wp_enqueue_script( 'user-suggest' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      |

      $id, 'selected' => 'site-users', ) ); if ( isset( $_GET['update'] ) ) : $message = ''; $type = 'error'; switch ( $_GET['update'] ) { case 'adduser': $type = 'success'; $message = __( 'User added.' ); break; case 'err_add_member': $message = __( 'User is already a member of this site.' ); break; case 'err_add_fail': $message = __( 'User could not be added to this site.' ); break; case 'err_add_notfound': $message = __( 'Enter the username of an existing user.' ); break; case 'promote': $type = 'success'; $message = __( 'Changed roles.' ); break; case 'err_promote': $message = __( 'Select a user to change role.' ); break; case 'remove': $type = 'success'; $message = __( 'User removed from this site.' ); break; case 'err_remove': $message = __( 'Select a user to remove.' ); break; case 'newuser': $type = 'success'; $message = __( 'User created.' ); break; case 'err_new': $message = __( 'Enter the username and email.' ); break; case 'err_new_dup': $message = __( 'Duplicated username or email address.' ); break; } wp_admin_notice( $message, array( 'type' => $type, 'dismissible' => true, 'id' => 'message', ) ); endif; ?>
      search_box( __( 'Search Users' ), 'user' ); ?>
      views(); ?>
      display(); ?>

      'submit-add-existing-user' ) ); ?>

      'submit-add-user' ) ); ?>
      add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site’s options.' ) . '

      ' . '

      ' . __( 'Operational settings has fields for the network’s name and admin email.' ) . '

      ' . '

      ' . __( 'Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.' ) . '

      ' . '

      ' . __( 'New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what᾿s put in the first post, page, comment, comment author, and comment URL.' ) . '

      ' . '

      ' . __( 'Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).' ) . '

      ' . '

      ' . __( 'You can set the language, and WordPress will automatically download and install the translation files (available if your filesystem is writable).' ) . '

      ' . '

      ' . __( 'Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.' ) . '

      ' . '

      ' . __( 'Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Network Settings' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); if ( $_POST ) { /** This action is documented in wp-admin/network/edit.php */ do_action( 'wpmuadminedit' ); check_admin_referer( 'siteoptions' ); $checked_options = array( 'menu_items' => array(), 'registrationnotification' => 'no', 'upload_space_check_disabled' => 1, 'add_new_users' => 0, ); foreach ( $checked_options as $option_name => $option_unchecked_value ) { if ( ! isset( $_POST[ $option_name ] ) ) { $_POST[ $option_name ] = $option_unchecked_value; } } $options = array( 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name', 'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author', 'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'illegal_names', 'limited_email_domains', 'banned_email_domains', 'WPLANG', 'new_admin_email', 'first_comment_email', ); // Handle translation installation. if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) { $language = wp_download_language_pack( $_POST['WPLANG'] ); if ( $language ) { $_POST['WPLANG'] = $language; } } foreach ( $options as $option_name ) { if ( ! isset( $_POST[ $option_name ] ) ) { continue; } $value = wp_unslash( $_POST[ $option_name ] ); update_site_option( $option_name, $value ); } /** * Fires after the network options are updated. * * @since MU (3.0.0) */ do_action( 'update_wpmu_options' ); wp_redirect( add_query_arg( 'updated', 'true', network_admin_url( 'settings.php' ) ) ); exit; } require_once ABSPATH . 'wp-admin/admin-header.php'; if ( isset( $_GET['updated'] ) ) { wp_admin_notice( __( 'Settings saved.' ), array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } ?>

      __( 'Plugins' ) ) ); if ( $menu_items ) : ?>

      PK!S\{—_>_>network/themes.phpnu„[µü¤get_pagenum(); $action = $wp_list_table->current_action(); $s = $_REQUEST['s'] ?? ''; // Clean up request URI from temporary args for screen options/paging uri's to work as expected. $temp_args = array( 'enabled', 'disabled', 'deleted', 'error', 'enabled-auto-update', 'disabled-auto-update', ); $_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] ); $referer = remove_query_arg( $temp_args, wp_get_referer() ); if ( $action ) { switch ( $action ) { case 'enable': check_admin_referer( 'enable-theme_' . $_GET['theme'] ); WP_Theme::network_enable_theme( $_GET['theme'] ); if ( ! str_contains( $referer, '/network/themes.php' ) ) { wp_redirect( network_admin_url( 'themes.php?enabled=1' ) ); } else { wp_safe_redirect( add_query_arg( 'enabled', 1, $referer ) ); } exit; case 'disable': check_admin_referer( 'disable-theme_' . $_GET['theme'] ); WP_Theme::network_disable_theme( $_GET['theme'] ); wp_safe_redirect( add_query_arg( 'disabled', '1', $referer ) ); exit; case 'enable-selected': check_admin_referer( 'bulk-themes' ); $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } WP_Theme::network_enable_theme( (array) $themes ); wp_safe_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) ); exit; case 'disable-selected': check_admin_referer( 'bulk-themes' ); $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } WP_Theme::network_disable_theme( (array) $themes ); wp_safe_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) ); exit; case 'update-selected': check_admin_referer( 'bulk-themes' ); if ( isset( $_GET['themes'] ) ) { $themes = explode( ',', $_GET['themes'] ); } elseif ( isset( $_POST['checked'] ) ) { $themes = (array) $_POST['checked']; } else { $themes = array(); } // Used in the HTML title tag. $title = __( 'Update Themes' ); $parent_file = 'themes.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; echo '
      '; echo '

      ' . esc_html( $title ) . '

      '; $url = self_admin_url( 'update.php?action=update-selected-themes&themes=' . urlencode( implode( ',', $themes ) ) ); $url = wp_nonce_url( $url, 'bulk-update-themes' ); echo ""; echo '
      '; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; case 'delete-selected': if ( ! current_user_can( 'delete_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to delete themes for this site.' ) ); } check_admin_referer( 'bulk-themes' ); $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } $themes = array_diff( $themes, array( get_option( 'stylesheet' ), get_option( 'template' ) ) ); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'main', $referer ) ); exit; } $theme_info = array(); foreach ( $themes as $key => $theme ) { $theme_info[ $theme ] = wp_get_theme( $theme ); } require ABSPATH . 'wp-admin/update.php'; $parent_file = 'themes.php'; if ( ! isset( $_REQUEST['verify-delete'] ) ) { wp_enqueue_script( 'jquery' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $themes_to_delete = count( $themes ); ?>

      ' . __( 'Caution:' ) . ' ' . __( 'This theme may be active on other sites in the network.' ), array( 'additional_classes' => array( 'error' ), ) ); ?>

      ' . __( 'Caution:' ) . ' ' . __( 'These themes may be active on other sites in the network.' ), array( 'additional_classes' => array( 'error' ), ) ); ?>

        ' . sprintf( /* translators: 1: Theme name, 2: Theme author. */ _x( '%1$s by %2$s', 'theme' ), '' . $theme->display( 'Name' ) . '', '' . $theme->display( 'Author' ) . '' ) . ''; } ?>

      '; } wp_nonce_field( 'bulk-themes' ); if ( 1 === $themes_to_delete ) { submit_button( __( 'Yes, delete this theme' ), '', 'submit', false ); } else { submit_button( __( 'Yes, delete these themes' ), '', 'submit', false ); } ?>
      1, 'action' => 'delete-selected', 'checked' => $_REQUEST['checked'], '_wpnonce' => $_REQUEST['_wpnonce'], ), network_admin_url( 'themes.php' ) ) ) ); } $paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1; wp_redirect( add_query_arg( array( 'deleted' => count( $themes ), 'paged' => $paged, 's' => $s, ), network_admin_url( 'themes.php' ) ) ); exit; case 'enable-auto-update': case 'disable-auto-update': case 'enable-auto-update-selected': case 'disable-auto-update-selected': if ( ! ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) ) { wp_die( __( 'Sorry, you are not allowed to change themes automatic update settings.' ) ); } if ( 'enable-auto-update' === $action || 'disable-auto-update' === $action ) { check_admin_referer( 'updates' ); } else { if ( empty( $_POST['checked'] ) ) { // Nothing to do. wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } check_admin_referer( 'bulk-themes' ); } $auto_updates = (array) get_site_option( 'auto_update_themes', array() ); if ( 'enable-auto-update' === $action ) { $auto_updates[] = $_GET['theme']; $auto_updates = array_unique( $auto_updates ); $referer = add_query_arg( 'enabled-auto-update', 1, $referer ); } elseif ( 'disable-auto-update' === $action ) { $auto_updates = array_diff( $auto_updates, array( $_GET['theme'] ) ); $referer = add_query_arg( 'disabled-auto-update', 1, $referer ); } else { // Bulk enable/disable. $themes = (array) wp_unslash( $_POST['checked'] ); if ( 'enable-auto-update-selected' === $action ) { $auto_updates = array_merge( $auto_updates, $themes ); $auto_updates = array_unique( $auto_updates ); $referer = add_query_arg( 'enabled-auto-update', count( $themes ), $referer ); } else { $auto_updates = array_diff( $auto_updates, $themes ); $referer = add_query_arg( 'disabled-auto-update', count( $themes ), $referer ); } } $all_items = wp_get_themes(); // Remove themes that don't exist or have been deleted since the option was last updated. $auto_updates = array_intersect( $auto_updates, array_keys( $all_items ) ); update_site_option( 'auto_update_themes', $auto_updates ); wp_safe_redirect( $referer ); exit; default: $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } check_admin_referer( 'bulk-themes' ); /** This action is documented in wp-admin/network/site-themes.php */ $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $themes, 0 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $referer ); exit; } } $wp_list_table->prepare_items(); add_thickbox(); add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.' ) . '

      ' . '

      ' . __( 'If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site’s Appearance > Themes screen.' ) . '

      ' . '

      ' . __( 'Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes.' ) . '

      ', ) ); $help_sidebar_autoupdates = ''; if ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) { get_current_screen()->add_help_tab( array( 'id' => 'plugins-themes-auto-updates', 'title' => __( 'Auto-updates' ), 'content' => '

      ' . __( 'Auto-updates can be enabled or disabled for each individual theme. Themes with auto-updates enabled will display the estimated date of the next auto-update. Auto-updates depends on the WP-Cron task scheduling system.' ) . '

      ' . '

      ' . __( 'Please note: Third-party themes and plugins, or custom code, may override WordPress scheduling.' ) . '

      ', ) ); $help_sidebar_autoupdates = '

      ' . __( 'Documentation on Auto-updates' ) . '

      '; } get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Network Themes' ) . '

      ' . $help_sidebar_autoupdates . '

      ' . __( 'Support forums' ) . '

      ' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter themes list' ), 'heading_pagination' => __( 'Themes list navigation' ), 'heading_list' => __( 'Themes list' ), ) ); // Used in the HTML title tag. $title = __( 'Themes' ); $parent_file = 'themes.php'; wp_enqueue_script( 'updates' ); wp_enqueue_script( 'theme-preview' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      '; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( $s ) . '' ); echo ''; } ?>
      $type, 'dismissible' => true, 'id' => 'message', ) ); } ?>
      search_box( __( 'Search installed themes' ), 'theme' ); ?>
      views(); if ( 'broken' === $status ) { echo '

      ' . __( 'The following themes are installed but incomplete.' ) . '

      '; } ?>
      display(); ?>
      vvnetwork/theme-install.phpnu„[µü¤add_help_tab( get_site_screen_help_tab_args() ); get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); $id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0; if ( ! $id ) { wp_die( __( 'Invalid site ID.' ) ); } $details = get_site( $id ); if ( ! $details ) { wp_die( __( 'The requested site does not exist.' ) ); } if ( ! can_edit_network( $details->site_id ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } $is_main_site = is_main_site( $id ); if ( isset( $_REQUEST['action'] ) && 'update-site' === $_REQUEST['action'] && is_array( $_POST['option'] ) ) { check_admin_referer( 'edit-site' ); switch_to_blog( $id ); $skip_options = array( 'allowedthemes' ); // Don't update these options since they are handled elsewhere in the form. foreach ( (array) $_POST['option'] as $key => $val ) { $key = wp_unslash( $key ); $val = wp_unslash( $val ); if ( 0 === $key || is_array( $val ) || in_array( $key, $skip_options, true ) ) { continue; // Avoids "0 is a protected WP option and may not be modified" error when editing blog options. } update_option( $key, $val ); } /** * Fires after the site options are updated. * * @since 3.0.0 * @since 4.4.0 Added `$id` parameter. * * @param int $id The ID of the site being updated. */ do_action( 'wpmu_update_blog_options', $id ); restore_current_blog(); wp_redirect( add_query_arg( array( 'update' => 'updated', 'id' => $id, ), 'site-settings.php' ) ); exit; } if ( isset( $_GET['update'] ) ) { $messages = array(); if ( 'updated' === $_GET['update'] ) { $messages[] = __( 'Site options updated.' ); } } // Used in the HTML title tag. /* translators: %s: Site title. */ $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      |

      $id, 'selected' => 'site-settings', ) ); if ( ! empty( $messages ) ) { $notice_args = array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ); foreach ( $messages as $msg ) { wp_admin_notice( $msg, $notice_args ); } } ?>
      get_blog_prefix( $id ); $options = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM %i WHERE option_name NOT LIKE %s AND option_name NOT LIKE %s', "{$blog_prefix}options", $wpdb->esc_like( '_' ) . '%', '%' . $wpdb->esc_like( 'user_roles' ) ) ); foreach ( $options as $option ) { if ( 'default_role' === $option->option_name ) { $editblog_default_role = $option->option_value; } $disabled = false; $class = 'all-options'; if ( is_serialized( $option->option_value ) ) { if ( is_serialized_string( $option->option_value ) ) { $option->option_value = esc_html( maybe_unserialize( $option->option_value ) ); } else { $option->option_value = 'SERIALIZED DATA'; $disabled = true; $class = 'all-options disabled'; } } $ltr_fields = array( 'siteurl', 'home', 'admin_email', 'new_admin_email', 'mailserver_url', 'mailserver_login', 'mailserver_pass', 'ping_sites', 'permalink_structure', 'category_base', 'tag_base', 'upload_path', 'upload_url_path', ); if ( in_array( $option->option_name, $ltr_fields, true ) ) { $class .= ' ltr'; } if ( str_contains( $option->option_value, "\n" ) ) { ?> option_name, array( 'siteurl', 'home' ), true ) ) { ?>
      1 ) { $_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle arrays. // Used in the HTML title tag. $title = __( 'Users' ); $parent_file = 'users.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; echo '
      '; confirm_delete_users( $_POST['allusers'] ); echo '
      '; require_once ABSPATH . 'wp-admin/admin-footer.php'; } else { wp_redirect( network_admin_url( 'users.php' ) ); } exit; case 'allusers': if ( ! current_user_can( 'manage_network_users' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } if ( isset( $_POST['action'] ) && isset( $_POST['allusers'] ) ) { check_admin_referer( 'bulk-users-network' ); $doaction = $_POST['action']; $userfunction = ''; $allusers = (array) $_POST['allusers']; foreach ( $allusers as $user_id ) { if ( ! empty( $user_id ) ) { switch ( $doaction ) { case 'delete': if ( ! current_user_can( 'delete_users' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } // Used in the HTML title tag. $title = __( 'Users' ); $parent_file = 'users.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; echo '
      '; confirm_delete_users( $allusers ); echo '
      '; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; case 'spam': $user = get_userdata( $user_id ); if ( is_super_admin( $user->ID ) ) { wp_die( sprintf( /* translators: %s: User login. */ __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ), 403 ); } $userfunction = 'all_spam'; /** * Filters whether to propagate the blog status when a user is marked as spam. * * @since 7.0.0 * * @param bool $propagate Whether to propagate the blog status. Default false. * @param int $user_id User ID. */ if ( apply_filters( 'propagate_network_user_spam_to_blogs', false, $user_id ) ) { foreach ( get_blogs_of_user( $user_id, true ) as $details ) { // Assuming the main site is not a spam. if ( ! is_main_site( $details->userblog_id ) ) { update_blog_status( $details->userblog_id, 'spam', '1' ); } } } $user_data = $user->to_array(); $user_data['spam'] = '1'; wp_update_user( $user_data ); break; case 'notspam': $user = get_userdata( $user_id ); if ( is_super_admin( $user->ID ) ) { wp_die( sprintf( /* translators: %s: User login. */ __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ), 403 ); } $userfunction = 'all_notspam'; $blogs = get_blogs_of_user( $user_id, true ); /** This filter is documented in wp-admin/network/users.php */ if ( apply_filters( 'propagate_network_user_spam_to_blogs', false, $user_id ) ) { foreach ( get_blogs_of_user( $user_id, true ) as $details ) { if ( ! is_main_site( $details->userblog_id ) && get_current_network_id() === $details->site_id ) { // Assuming main site is never a spam and part of the current network. update_blog_status( $details->userblog_id, 'spam', '0' ); } } } $user_data = $user->to_array(); $user_data['spam'] = '0'; wp_update_user( $user_data ); break; } } } if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) { $sendback = wp_get_referer(); $user_ids = (array) $_POST['allusers']; /** This action is documented in wp-admin/network/site-themes.php */ $sendback = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $user_ids, 0 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $sendback ); exit; } wp_safe_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction, ), wp_get_referer() ) ); } else { $location = network_admin_url( 'users.php' ); if ( ! empty( $_REQUEST['paged'] ) ) { $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); } wp_redirect( $location ); } exit; case 'dodelete': check_admin_referer( 'ms-users-delete' ); if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } /* * Validate that every "reassign" choice has a real target before making * any changes. The confirmation form blocks this client-side, so this is * a defense-in-depth guard against an invalid reassignment (e.g. content * reassigned to the non-existent user "-1") when JavaScript is bypassed. * Bail out entirely so the deletion is all-or-nothing. */ if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) && ! empty( $_POST['delete'] ) ) { foreach ( $_POST['blog'] as $id => $blogs ) { foreach ( $blogs as $blogid => $reassign_user_id ) { if ( isset( $_POST['delete'][ $blogid ][ $id ] ) && 'reassign' === $_POST['delete'][ $blogid ][ $id ] && (int) $reassign_user_id < 1 ) { wp_redirect( add_query_arg( array( 'error' => 'missing_reassign' ), network_admin_url( 'users.php' ) ) ); exit; } } } } if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { foreach ( $_POST['blog'] as $id => $users ) { foreach ( $users as $blogid => $user_id ) { if ( ! current_user_can( 'delete_user', $id ) ) { continue; } if ( ! empty( $_POST['delete'] ) && 'reassign' === $_POST['delete'][ $blogid ][ $id ] ) { remove_user_from_blog( $id, $blogid, (int) $user_id ); } else { remove_user_from_blog( $id, $blogid ); } } } } $i = 0; if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) { foreach ( $_POST['user'] as $id ) { if ( ! current_user_can( 'delete_user', $id ) ) { continue; } wpmu_delete_user( $id ); ++$i; } } if ( 1 === $i ) { $deletefunction = 'delete'; } else { $deletefunction = 'all_delete'; } wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction, ), network_admin_url( 'users.php' ) ) ); exit; } } $wp_list_table = _get_list_table( 'WP_MS_Users_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $wp_list_table->prepare_items(); $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); if ( $pagenum > $total_pages && $total_pages > 0 ) { wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } // Used in the HTML title tag. $title = __( 'Users' ); $parent_file = 'users.php'; add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'This table shows all users across the network and the sites to which they are assigned.' ) . '

      ' . '

      ' . __( 'Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.' ) . '

      ' . '

      ' . __( 'You can also go to the user’s profile page by clicking on the individual username.' ) . '

      ' . '

      ' . __( 'You can sort the table by clicking on any of the table headings and switch between list and excerpt views by using the icons above the users list.' ) . '

      ' . '

      ' . __( 'The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.' ) . '

      ' . '

      ' . __( 'You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Network Users' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter users list' ), 'heading_pagination' => __( 'Users list navigation' ), 'heading_list' => __( 'Users list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( isset( $_REQUEST['updated'] ) && 'true' === $_REQUEST['updated'] && ! empty( $_REQUEST['action'] ) ) { $message = ''; switch ( $_REQUEST['action'] ) { case 'delete': $message = __( 'User deleted.' ); break; case 'all_spam': $message = __( 'Users marked as spam.' ); break; case 'all_notspam': $message = __( 'Users removed from spam.' ); break; case 'all_delete': $message = __( 'Users deleted.' ); break; case 'add': $message = __( 'User added.' ); break; } wp_admin_notice( $message, array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } if ( isset( $_REQUEST['error'] ) && 'missing_reassign' === $_REQUEST['error'] ) { wp_admin_notice( __( 'No users were deleted because no user was selected for content reassignment.' ), array( 'type' => 'error', 'dismissible' => true, 'id' => 'message', ) ); } ?>

      '; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( $usersearch ) . '' ); echo ''; } ?>
      views(); ?>
      search_box( __( 'Search Users' ), 'all-user' ); ?>
      display(); ?>
      PK!Þ33ÂÂnetwork/site-themes.phpnu„[µü¤add_help_tab( get_site_screen_help_tab_args() ); get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter site themes list' ), 'heading_pagination' => __( 'Site themes list navigation' ), 'heading_list' => __( 'Site themes list' ), ) ); $wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' ); $action = $wp_list_table->current_action(); $s = $_REQUEST['s'] ?? ''; // Clean up request URI from temporary args for screen options/paging uri's to work as expected. $temp_args = array( 'enabled', 'disabled', 'error' ); $_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] ); $referer = remove_query_arg( $temp_args, wp_get_referer() ); if ( ! empty( $_REQUEST['paged'] ) ) { $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer ); } $id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0; if ( ! $id ) { wp_die( __( 'Invalid site ID.' ) ); } $wp_list_table->prepare_items(); $details = get_site( $id ); if ( ! $details ) { wp_die( __( 'The requested site does not exist.' ) ); } if ( ! can_edit_network( $details->site_id ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } $is_main_site = is_main_site( $id ); if ( $action ) { switch_to_blog( $id ); $allowed_themes = get_option( 'allowedthemes' ); switch ( $action ) { case 'enable': check_admin_referer( 'enable-theme_' . $_GET['theme'] ); $theme = $_GET['theme']; $action = 'enabled'; $n = 1; if ( ! $allowed_themes ) { $allowed_themes = array( $theme => true ); } else { $allowed_themes[ $theme ] = true; } break; case 'disable': check_admin_referer( 'disable-theme_' . $_GET['theme'] ); $theme = $_GET['theme']; $action = 'disabled'; $n = 1; if ( ! $allowed_themes ) { $allowed_themes = array(); } else { unset( $allowed_themes[ $theme ] ); } break; case 'enable-selected': check_admin_referer( 'bulk-themes' ); if ( isset( $_POST['checked'] ) ) { $themes = (array) $_POST['checked']; $action = 'enabled'; $n = count( $themes ); foreach ( (array) $themes as $theme ) { $allowed_themes[ $theme ] = true; } } else { $action = 'error'; $n = 'none'; } break; case 'disable-selected': check_admin_referer( 'bulk-themes' ); if ( isset( $_POST['checked'] ) ) { $themes = (array) $_POST['checked']; $action = 'disabled'; $n = count( $themes ); foreach ( (array) $themes as $theme ) { unset( $allowed_themes[ $theme ] ); } } else { $action = 'error'; $n = 'none'; } break; default: if ( isset( $_POST['checked'] ) ) { check_admin_referer( 'bulk-themes' ); $themes = (array) $_POST['checked']; $n = count( $themes ); $screen = get_current_screen()->id; /** * Fires when a custom bulk action should be handled. * * The redirect link should be modified with success or failure feedback * from the action to be used to display feedback to the user. * * The dynamic portion of the hook name, `$screen`, refers to the current screen ID. * * @since 4.7.0 * * @param string $redirect_url The redirect URL. * @param string $action The action being taken. * @param array $items The items to take the action on. * @param int $site_id The site ID. */ $referer = apply_filters( "handle_network_bulk_actions-{$screen}", $referer, $action, $themes, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } else { $action = 'error'; $n = 'none'; } } update_option( 'allowedthemes', $allowed_themes, false ); restore_current_blog(); wp_safe_redirect( add_query_arg( array( 'id' => $id, $action => $n, ), $referer ) ); exit; } if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) { wp_safe_redirect( $referer ); exit; } add_thickbox(); add_screen_option( 'per_page' ); // Used in the HTML title tag. /* translators: %s: Site title. */ $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      |

      $id, 'selected' => 'site-themes', ) ); if ( isset( $_GET['enabled'] ) ) { $enabled = absint( $_GET['enabled'] ); if ( 1 === $enabled ) { $message = __( 'Theme enabled.' ); } else { /* translators: %s: Number of themes. */ $message = _n( '%s theme enabled.', '%s themes enabled.', $enabled ); } wp_admin_notice( sprintf( $message, number_format_i18n( $enabled ) ), array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } elseif ( isset( $_GET['disabled'] ) ) { $disabled = absint( $_GET['disabled'] ); if ( 1 === $disabled ) { $message = __( 'Theme disabled.' ); } else { /* translators: %s: Number of themes. */ $message = _n( '%s theme disabled.', '%s themes disabled.', $disabled ); } wp_admin_notice( sprintf( $message, number_format_i18n( $disabled ) ), array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } elseif ( isset( $_GET['error'] ) && 'none' === $_GET['error'] ) { wp_admin_notice( __( 'No theme selected.' ), array( 'type' => 'error', 'dismissible' => true, 'id' => 'message', ) ); } ?>

      search_box( __( 'Search installed themes' ), 'theme' ); ?>
      views(); ?>
      display(); ?>
      PK!•¡¿÷  network/plugin-editor.phpnu„[µü¤domain, $current_site->domain ) || 0 !== strcasecmp( $current_blog->path, $current_site->path ) ); /** * Filters whether to redirect the request to the Network Admin. * * @since 3.2.0 * * @param bool $redirect_network_admin_request Whether the request should be redirected. */ $redirect_network_admin_request = apply_filters( 'redirect_network_admin_request', $redirect_network_admin_request ); if ( $redirect_network_admin_request ) { wp_redirect( network_admin_url() ); exit; } unset( $redirect_network_admin_request ); PK!s¶<Ý÷÷network/setup.phpnu„[µü¤add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings.' ) . '

      ' . '

      ' . __( 'If the admin email for the new site does not exist in the database, a new user will also be created.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Site Management' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); if ( isset( $_REQUEST['action'] ) && 'add-site' === $_REQUEST['action'] ) { check_admin_referer( 'add-blog', '_wpnonce_add-blog' ); if ( ! is_array( $_POST['blog'] ) ) { wp_die( __( 'Cannot create an empty site.' ) ); } $blog = $_POST['blog']; $domain = ''; $blog['domain'] = trim( $blog['domain'] ); if ( preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) { $domain = strtolower( $blog['domain'] ); } // If not a subdomain installation, make sure the domain isn't a reserved word. if ( ! is_subdomain_install() ) { $subdirectory_reserved_names = get_subdirectory_reserved_names(); if ( in_array( $domain, $subdirectory_reserved_names, true ) ) { wp_die( sprintf( /* translators: %s: Reserved names list. */ __( 'The following words are reserved for use by WordPress functions and cannot be used as site names: %s' ), '' . implode( ', ', $subdirectory_reserved_names ) . '' ) ); } } $title = $blog['title']; $meta = array( 'public' => 1, ); // Handle translation installation for the new site. if ( isset( $_POST['WPLANG'] ) ) { if ( '' === $_POST['WPLANG'] ) { $meta['WPLANG'] = ''; // en_US } elseif ( in_array( $_POST['WPLANG'], get_available_languages(), true ) ) { $meta['WPLANG'] = $_POST['WPLANG']; } elseif ( current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) { $language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) ); if ( $language ) { $meta['WPLANG'] = $language; } } } if ( empty( $title ) ) { wp_die( __( 'Missing site title.' ) ); } if ( empty( $domain ) ) { wp_die( __( 'Missing or invalid site address.' ) ); } if ( isset( $blog['email'] ) && '' === trim( $blog['email'] ) ) { wp_die( __( 'Missing email address.' ) ); } $email = sanitize_email( $blog['email'] ); if ( ! is_email( $email ) ) { wp_die( __( 'Invalid email address.' ) ); } if ( is_subdomain_install() ) { $newdomain = $domain . '.' . preg_replace( '|^www\.|', '', get_network()->domain ); $path = get_network()->path; } else { $newdomain = get_network()->domain; $path = get_network()->path . $domain . '/'; } $password = 'N/A'; $user_id = email_exists( $email ); if ( ! $user_id ) { // Create a new user with a random password. /** * Fires immediately before a new user is created via the network site-new.php page. * * @since 4.5.0 * * @param string $email Email of the non-existent user. */ do_action( 'pre_network_site_new_created_user', $email ); $user_id = username_exists( $domain ); if ( $user_id ) { wp_die( __( 'The domain or path entered conflicts with an existing username.' ) ); } $password = wp_generate_password( 12, false ); $user_id = wpmu_create_user( $domain, $password, $email ); if ( false === $user_id ) { wp_die( __( 'There was an error creating the user.' ) ); } /** * Fires after a new user has been created via the network site-new.php page. * * @since 4.4.0 * * @param int $user_id ID of the newly created user. */ do_action( 'network_site_new_created_user', $user_id ); } $wpdb->hide_errors(); $id = wpmu_create_blog( $newdomain, $path, $title, $user_id, $meta, get_current_network_id() ); $wpdb->show_errors(); if ( ! is_wp_error( $id ) ) { if ( ! is_super_admin( $user_id ) && ! get_user_option( 'primary_blog', $user_id ) ) { update_user_option( $user_id, 'primary_blog', $id, true ); } wpmu_new_site_admin_notification( $id, $user_id ); wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) ); wp_redirect( add_query_arg( array( 'update' => 'added', 'id' => $id, ), 'site-new.php' ) ); exit; } else { wp_die( $id->get_error_message() ); } } if ( isset( $_GET['update'] ) ) { $messages = array(); if ( 'added' === $_GET['update'] ) { $messages[] = sprintf( /* translators: 1: Dashboard URL, 2: Network admin edit URL. */ __( 'Site added. Visit Dashboard or Edit Site' ), esc_url( get_admin_url( absint( $_GET['id'] ) ) ), network_admin_url( 'site-info.php?id=' . absint( $_GET['id'] ) ) ); } } // Used in the HTML title tag. $title = __( 'Add Site' ); $parent_file = 'sites.php'; wp_enqueue_script( 'user-suggest' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      'success', 'dismissible' => true, 'id' => 'message', ); foreach ( $messages as $msg ) { wp_admin_notice( $msg, $notice_args ); } } ?>

      %s', $update_data['counts']['total'], number_format_i18n( $update_data['counts']['total'] ) ) ), $cap, 'update-core.php', ); } else { $submenu['index.php'][10] = array( __( 'Updates' ), $cap, 'update-core.php' ); } unset( $cap ); $submenu['index.php'][15] = array( __( 'Upgrade Network' ), 'upgrade_network', 'upgrade.php' ); $menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' ); /* translators: Sites menu item. */ $menu[5] = array( __( 'Sites' ), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'dashicons-admin-multisite' ); $submenu['sites.php'][5] = array( __( 'All Sites' ), 'manage_sites', 'sites.php' ); $submenu['sites.php'][10] = array( __( 'Add Site' ), 'create_sites', 'site-new.php' ); $menu[10] = array( __( 'Users' ), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' ); $submenu['users.php'][5] = array( __( 'All Users' ), 'manage_network_users', 'users.php' ); $submenu['users.php'][10] = array( __( 'Add User' ), 'create_users', 'user-new.php' ); if ( current_user_can( 'update_themes' ) && $update_data['counts']['themes'] ) { $menu[15] = array( sprintf( /* translators: %s: Number of available theme updates. */ __( 'Themes %s' ), sprintf( '%s', $update_data['counts']['themes'], number_format_i18n( $update_data['counts']['themes'] ) ) ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance', ); } else { $menu[15] = array( __( 'Themes' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' ); } $submenu['themes.php'][5] = array( __( 'Installed Themes' ), 'manage_network_themes', 'themes.php' ); $submenu['themes.php'][10] = array( __( 'Add Theme' ), 'install_themes', 'theme-install.php' ); $submenu['themes.php'][15] = array( __( 'Theme File Editor' ), 'edit_themes', 'theme-editor.php' ); if ( current_user_can( 'update_plugins' ) && $update_data['counts']['plugins'] ) { $menu[20] = array( sprintf( /* translators: %s: Number of available plugin updates. */ __( 'Plugins %s' ), sprintf( '%s', $update_data['counts']['plugins'], number_format_i18n( $update_data['counts']['plugins'] ) ) ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins', ); } else { $menu[20] = array( __( 'Plugins' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' ); } $submenu['plugins.php'][5] = array( __( 'Installed Plugins' ), 'manage_network_plugins', 'plugins.php' ); $submenu['plugins.php'][10] = array( __( 'Add Plugin' ), 'install_plugins', 'plugin-install.php' ); $submenu['plugins.php'][15] = array( __( 'Plugin File Editor' ), 'edit_plugins', 'plugin-editor.php' ); $menu[25] = array( __( 'Settings' ), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' ); if ( defined( 'MULTISITE' ) && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) { $submenu['settings.php'][5] = array( __( 'Network Settings' ), 'manage_network_options', 'settings.php' ); $submenu['settings.php'][10] = array( __( 'Network Setup' ), 'setup_network', 'setup.php' ); } unset( $update_data ); $menu[99] = array( '', 'exist', 'separator-last', '', 'wp-menu-separator' ); require_once ABSPATH . 'wp-admin/includes/menu.php'; PK!s òïÂÂnetwork/update.phpnu„[µü¤add_help_tab( get_site_screen_help_tab_args() ); get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); $id = isset( $_REQUEST['id'] ) ? (int) $_REQUEST['id'] : 0; if ( ! $id ) { wp_die( __( 'Invalid site ID.' ) ); } $details = get_site( $id ); if ( ! $details ) { wp_die( __( 'The requested site does not exist.' ) ); } if ( ! can_edit_network( $details->site_id ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } $parsed_scheme = parse_url( $details->siteurl, PHP_URL_SCHEME ); $is_main_site = is_main_site( $id ); if ( isset( $_REQUEST['action'] ) && 'update-site' === $_REQUEST['action'] ) { check_admin_referer( 'edit-site' ); switch_to_blog( $id ); // Rewrite rules can't be flushed during switch to blog. delete_option( 'rewrite_rules' ); $blog_data = wp_unslash( $_POST['blog'] ); $blog_data['scheme'] = $parsed_scheme; if ( $is_main_site ) { // On the network's main site, don't allow the domain or path to change. $blog_data['domain'] = $details->domain; $blog_data['path'] = $details->path; } else { // For any other site, the scheme, domain, and path can all be changed. We first // need to ensure a scheme has been provided, otherwise fallback to the existing. $new_url_scheme = parse_url( $blog_data['url'], PHP_URL_SCHEME ); if ( ! $new_url_scheme ) { $blog_data['url'] = esc_url( $parsed_scheme . '://' . $blog_data['url'] ); } $update_parsed_url = parse_url( $blog_data['url'] ); // If a path is not provided, use the default of `/`. if ( ! isset( $update_parsed_url['path'] ) ) { $update_parsed_url['path'] = '/'; } $blog_data['scheme'] = $update_parsed_url['scheme']; // Make sure to not lose the port if it was provided. $blog_data['domain'] = $update_parsed_url['host']; if ( isset( $update_parsed_url['port'] ) ) { $blog_data['domain'] .= ':' . $update_parsed_url['port']; } $blog_data['path'] = $update_parsed_url['path']; } $existing_details = get_site( $id ); $blog_data_checkboxes = array( 'public', 'archived', 'spam', 'mature', 'deleted' ); foreach ( $blog_data_checkboxes as $c ) { if ( ! in_array( (int) $existing_details->$c, array( 0, 1 ), true ) ) { $blog_data[ $c ] = $existing_details->$c; } else { $blog_data[ $c ] = isset( $_POST['blog'][ $c ] ) ? 1 : 0; } } update_blog_details( $id, $blog_data ); // Maybe update home and siteurl options. $new_details = get_site( $id ); $old_home_url = trailingslashit( esc_url( get_option( 'home' ) ) ); $old_home_parsed = parse_url( $old_home_url ); $old_home_host = $old_home_parsed['host'] . ( isset( $old_home_parsed['port'] ) ? ':' . $old_home_parsed['port'] : '' ); if ( $old_home_host === $existing_details->domain && $old_home_parsed['path'] === $existing_details->path ) { $new_home_url = untrailingslashit( sanitize_url( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) ); update_option( 'home', $new_home_url ); } $old_site_url = trailingslashit( esc_url( get_option( 'siteurl' ) ) ); $old_site_parsed = parse_url( $old_site_url ); $old_site_host = $old_site_parsed['host'] . ( isset( $old_site_parsed['port'] ) ? ':' . $old_site_parsed['port'] : '' ); if ( $old_site_host === $existing_details->domain && $old_site_parsed['path'] === $existing_details->path ) { $new_site_url = untrailingslashit( sanitize_url( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) ); update_option( 'siteurl', $new_site_url ); } restore_current_blog(); wp_redirect( add_query_arg( array( 'update' => 'updated', 'id' => $id, ), 'site-info.php' ) ); exit; } if ( isset( $_GET['update'] ) ) { $messages = array(); if ( 'updated' === $_GET['update'] ) { $messages[] = __( 'Site info updated.' ); } } // Used in the HTML title tag. /* translators: %s: Site title. */ $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      |

      $id, 'selected' => 'site-info', ) ); if ( ! empty( $messages ) ) { $notice_args = array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ); foreach ( $messages as $msg ) { wp_admin_notice( $msg, $notice_args ); } } ?>
      _x( 'Public', 'site' ) ); if ( ! $is_main_site ) { $attribute_fields['archived'] = __( 'Archived' ); $attribute_fields['spam'] = _x( 'Spam', 'site' ); $attribute_fields['deleted'] = __( 'Flagged for Deletion' ); } $attribute_fields['mature'] = __( 'Mature' ); ?>
      add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied.' ) . '

      ' . '

      ' . __( 'If a version update to core has not happened, clicking this button will not affect anything.' ) . '

      ' . '

      ' . __( 'If this process fails for any reason, users logging in to their sites will force the same update.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Upgrade Network' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( ! current_user_can( 'upgrade_network' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } echo '
      '; echo '

      ' . __( 'Upgrade Network' ) . '

      '; $action = $_GET['action'] ?? 'show'; switch ( $action ) { case 'upgrade': $n = ( isset( $_GET['n'] ) ) ? (int) $_GET['n'] : 0; if ( $n < 5 ) { update_site_option( 'wpmu_upgrade_site', $wp_db_version ); } $site_ids = get_sites( array( 'spam' => 0, 'deleted' => 0, 'archived' => 0, 'network_id' => get_current_network_id(), 'number' => 5, 'offset' => $n, 'fields' => 'ids', 'order' => 'DESC', 'orderby' => 'id', 'update_site_meta_cache' => false, ) ); if ( empty( $site_ids ) ) { echo '

      ' . __( 'All done!' ) . '

      '; break; } echo '
        '; foreach ( (array) $site_ids as $site_id ) { switch_to_blog( $site_id ); $siteurl = site_url(); $upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' ); restore_current_blog(); echo "
      • $siteurl
      • "; $response = wp_remote_get( $upgrade_url, array( 'timeout' => 120, 'httpversion' => '1.1', 'sslverify' => false, ) ); if ( is_wp_error( $response ) ) { wp_die( sprintf( /* translators: 1: Site URL, 2: Server error message. */ __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s' ), $siteurl, '' . $response->get_error_message() . '' ) ); } /** * Fires after the Multisite DB upgrade for each site is complete. * * @since MU (3.0.0) * * @param array $response The upgrade response array. */ do_action( 'after_mu_upgrade', $response ); /** * Fires after each site has been upgraded. * * @since MU (3.0.0) * * @param int $site_id The Site ID. */ do_action( 'wpmu_upgrade_site', $site_id ); } echo '
      '; ?>

      PK!½Ëý_ _ network/index.phpnu„[µü¤' . __( 'Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network.' ) . '

      '; $overview .= '

      ' . __( 'From here you can:' ) . '

      '; $overview .= '
      • ' . __( 'Add and manage sites or users' ) . '
      • '; $overview .= '
      • ' . __( 'Install and activate themes or plugins' ) . '
      • '; $overview .= '
      • ' . __( 'Update your network' ) . '
      • '; $overview .= '
      • ' . __( 'Modify global network settings' ) . '
      '; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $overview, ) ); $quick_tasks = '

      ' . __( 'The Right Now widget on this screen provides current user and site counts on your network.' ) . '

      '; $quick_tasks .= '
      • ' . __( 'To add a new user, click Create a New User.' ) . '
      • '; $quick_tasks .= '
      • ' . __( 'To add a new site, click Create a New Site.' ) . '
      '; $quick_tasks .= '

      ' . __( 'To search for a user or site, use the search boxes.' ) . '

      '; $quick_tasks .= '
      • ' . __( 'To search for a user, enter an email address or username. Use a wildcard to search for a partial username, such as user*.' ) . '
      • '; $quick_tasks .= '
      • ' . __( 'To search for a site, enter the path or domain.' ) . '
      '; get_current_screen()->add_help_tab( array( 'id' => 'quick-tasks', 'title' => __( 'Quick Tasks' ), 'content' => $quick_tasks, ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on the Network Admin' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); wp_dashboard_setup(); wp_enqueue_script( 'dashboard' ); wp_enqueue_script( 'plugin-install' ); add_thickbox(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

      ' . __( 'Add User will set up a new user account on the network and send that person an email with username and password.' ) . '

      ' . '

      ' . __( 'Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.' ) . '

      ', ) ); get_current_screen()->set_help_sidebar( '

      ' . __( 'For more information:' ) . '

      ' . '

      ' . __( 'Documentation on Network Users' ) . '

      ' . '

      ' . __( 'Support forums' ) . '

      ' ); if ( isset( $_REQUEST['action'] ) && 'add-user' === $_REQUEST['action'] ) { check_admin_referer( 'add-user', '_wpnonce_add-user' ); if ( ! current_user_can( 'manage_network_users' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } if ( ! is_array( $_POST['user'] ) ) { wp_die( __( 'Cannot create an empty user.' ) ); } $user = wp_unslash( $_POST['user'] ); $user_details = wpmu_validate_user_signup( $user['username'], $user['email'] ); if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) { $add_user_errors = $user_details['errors']; } else { $password = wp_generate_password( 12, false ); $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, sanitize_email( $user['email'] ) ); if ( ! $user_id ) { $add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) ); } else { /** * Fires after a new user has been created via the network user-new.php page. * * @since 4.4.0 * * @param int $user_id ID of the newly created user. */ do_action( 'network_user_new_created_user', $user_id ); wp_redirect( add_query_arg( array( 'update' => 'added', 'user_id' => $user_id, ), 'user-new.php' ) ); exit; } } } $message = ''; if ( isset( $_GET['update'] ) ) { if ( 'added' === $_GET['update'] ) { $edit_link = ''; if ( isset( $_GET['user_id'] ) ) { $user_id_new = absint( $_GET['user_id'] ); if ( $user_id_new ) { $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) ); } } $message = __( 'User added.' ); if ( $edit_link ) { $message .= sprintf( ' %s', $edit_link, __( 'Edit user' ) ); } } } // Used in the HTML title tag. $title = __( 'Add User' ); $parent_file = 'users.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

      'success', 'dismissible' => true, 'id' => 'message', ) ); } if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) { $error_messages = ''; foreach ( $add_user_errors->get_error_messages() as $error ) { $error_messages .= "

      $error

      "; } wp_admin_notice( $error_messages, array( 'type' => 'error', 'dismissible' => true, 'id' => 'message', 'paragraph_wrap' => false, ) ); } ?>

      i¶’äÂuser/freedoms.phpnu„[µü¤PK!bB³ÄÄ ,Äms-admin.phpnu„[µü¤PK!h_UU,Åupgrade-functions.phpnu„[µü¤PK!åˆQÛWÛWÆÆoptions-permalink.phpnu„[µü¤PK!”o|(³ ³ æload-styles.phpnu„[µü¤PK!™_u”ßß Ø*my-sites.phpnu„[µü¤PK!W­¸ØØ ó=ms-edit.phpnu„[µü¤PK!c(ÏïÇGÇG ?install.phpnu„[µü¤PK!߇Tì9V9V‡css/about.min.cssnu„[µü¤PK!•×q~ ~ ‚Ýcss/color-picker.min.cssnu„[µü¤PK!˜{0N++Hêcss/code-editor.cssnu„[µü¤PK!÷Ç�J­J­¶ðcss/themes.cssnu„[µü¤PK!8zQ‡  >žcss/wp-tooltip-rtl.cssnu„[µü¤PK!‰Ý.àSHSH…ªcss/customize-nav-menus.min.cssnu„[µü¤PK!(„8F¼;¼;'ócss/admin-menu.min.cssnu„[µü¤PK!…³'¦êœêœ )/css/edit.cssnu„[µü¤PK!·‘â7[7[OÌcss/dashboard-rtl.min.cssnu„[µü¤PK!TIl‡‡Ï'css/farbtastic-rtl.cssnu„[µü¤PK!zÝw$‡$‡œ*css/themes.min.cssnu„[µü¤PK!.¡)\×ײcss/deprecated-media.cssnu„[µü¤PK!]K¼ßEßE!Ìcss/widgets-rtl.cssnu„[µü¤PK!: >:OOCcss/color-picker.cssnu„[µü¤PK!÷85äììÖ!css/wp-tooltip-rtl.min.cssnu„[µü¤PK!àvݪuu +css/color-picker-rtl.cssnu„[µü¤PK!)��$¹¹É:css/view-transitions.cssnu„[µü¤PK!Aø­Â��áO css/edit-rtl.cssnu„[µü¤PK! ŒXXXX:í css/customize-nav-menus.cssnu„[µü¤PK!¦nôÑèèÝEcss/wp-tooltip.min.cssnu„[µü¤PK!ç�rì Ocss/farbtastic-rtl.min.cssnu„[µü¤PK!Ç«æÀ`"`"oQcss/revisions.min.cssnu„[µü¤PK!.tcss/colors/coffee/coffee/HVTQvYjuqBaSrlpLx.mp2nu„[µü¤PK!Z1;;rtcss/colors/coffee/colors.scssnu„[µü¤PK!¨:o+d+dúucss/colors/coffee/colors.cssnu„[µü¤PK!V ÛÙ}V}V$qÚcss/colors/coffee/colors-rtl.min.cssnu„[µü¤PK!œüÝ|V|V B1css/colors/coffee/colors.min.cssnu„[µü¤PK!!í¶,d,d ˆcss/colors/coffee/colors-rtl.cssnu„[µü¤PK!µ†èï ï Šìcss/colors/_tokens.scssnu„[µü¤PK!ü-ÃÆXXÀ css/colors/colors/.htaccessnu„[µü¤PK!»�óÚÚ'ccss/colors/colors/3gp_6ab0eb26f3e1f.zipnu„[µü¤PK!Å FÇuu”$css/colors/light/colors.scssnu„[µü¤PK!HÉ�ƒ b bU(css/colors/light/colors.cssnu„[µü¤PK!Ÿ%®”8T8T#¬Šcss/colors/light/colors-rtl.min.cssnu„[µü¤PK!cw¨7T7T7ßcss/colors/light/colors.min.cssnu„[µü¤PK!s¾¨¿ b b½3css/colors/light/colors-rtl.cssnu„[µü¤PK!‰¿dd–css/colors/modern/colors.scssnu„[µü¤PK!¡;VñccÊ—css/colors/modern/colors.cssnu„[µü¤PK!xo E0U0U$*ûcss/colors/modern/colors-rtl.min.cssnu„[µü¤PK!GZÊŽ/U/U ®Pcss/colors/modern/colors.min.cssnu„[µü¤PK!aù3Gcc -¦css/colors/modern/colors-rtl.cssnu„[µü¤PK!9kª6Y[Y[’ css/colors/_admin.scssnu„[µü¤PK!Ä~2ÄA A 1ecss/colors/_variables.scssnu„[µü¤PK!yþ·Å&&$¼ocss/colors/sunrise/colors-vendor.cssnu„[µü¤PK!(Qú  6‚css/colors/sunrise/colors.scssnu„[µü¤PK!‹ƒ‹¾dd�ƒcss/colors/sunrise/colors.cssnu„[µü¤PK!%‹¥YqVqV%ûçcss/colors/sunrise/colors-rtl.min.cssnu„[µü¤PK!s¾é>pVpV!Á>css/colors/sunrise/colors.min.cssnu„[µü¤PK!$ƒµ© d d!‚•css/colors/sunrise/colors-rtl.cssnu„[µü¤PK!¢PöÚŠŠóùcss/colors/blue/colors.scssnu„[µü¤PK!º%Ž6c6cÈûcss/colors/blue/colors.cssnu„[µü¤PK!ǦÝê¢U¢U"H_css/colors/blue/colors-rtl.min.cssnu„[µü¤PK!C“¡U¡U<µcss/colors/blue/colors.min.cssnu„[µü¤PK!ò¦�¯7c7c+ css/colors/blue/colors-rtl.cssnu„[µü¤PK!÷r©“ “ °ncss/colors/_mixins.scssnu„[µü¤PK! î(VV Š{css/colors/ectoplasm/colors.scssnu„[µü¤PK!N�WÄùbùb0}css/colors/ectoplasm/colors.cssnu„[µü¤PK!E7&0]U]U'xàcss/colors/ectoplasm/colors-rtl.min.cssnu„[µü¤PK!–ç‰\U\U#,6css/colors/ectoplasm/colors.min.cssnu„[µü¤PK!``ßúbúb#Û‹css/colors/ectoplasm/colors-rtl.cssnu„[µü¤PK!pÚÖñQQ(ïcss/colors/ocean/colors.scssnu„[µü¤PK!2Úí{c{cÅðcss/colors/ocean/colors.cssnu„[µü¤PK!L²I"ßUßU#‹Tcss/colors/ocean/colors-rtl.min.cssnu„[µü¤PK!AUçâÞUÞU½ªcss/colors/ocean/colors.min.cssnu„[µü¤PK!ŠmfÍ|c|cêcss/colors/ocean/colors-rtl.cssnu„[µü¤PK!áûË˵dcss/colors/midnight/colors.scssnu„[µü¤PK!•¶®øÜÜ,Ïfcss/colors/midnight/block-patterns/.htaccessnu„[µü¤PK!)î"Ü’Ü’,hcss/colors/midnight/block-patterns/index.phpnu„[µü¤PK! çYÍcÍc?ûcss/colors/midnight/colors.cssnu„[µü¤PK!•Ѝ³×U×U&Z_css/colors/midnight/colors-rtl.min.cssnu„[µü¤PK!C‰€ÖUÖU"‡µcss/colors/midnight/colors.min.cssnu„[µü¤PK!›÷KòÎcÎc"¯ css/colors/midnight/colors-rtl.cssnu„[µü¤PK!LK û>œ>œÏocss/forms-rtl.cssnu„[µü¤PK!?¸‰q(·(·N css/list-tables.cssnu„[µü¤PK!”Íñmà)à)¹Ãcss/revisions.cssnu„[µü¤PK!…ÖC*Úícss/site-health-rtl.min.cssnu„[µü¤PK!ppŠ4þþ%css/deprecated-media-rtl.cssnu„[µü¤PK!þ$�?øøocss/install-rtl.min.cssnu„[µü¤PK!iý/Ç55®2css/customize-widgets-rtl.cssnu„[µü¤PK!^Šâl"l"Øg!css/revisions-rtl.min.cssnu„[µü¤PK!¸\‹î q q�Š!css/media-rtl.cssnu„[µü¤PK!å.Cë¸v¸vÚû!css/dashboard.cssnu„[µü¤PK!çoéccÓr"css/farbtastic.cssnu„[µü¤PK!öç|¼¼ xu"css/l10n.cssnu„[µü¤PK!Y³Ú9ì9ì"p‡"css/customize-controls-rtl.min.cssnu„[µü¤PK!WeÖ_êêûs#css/wp-admin.min.cssnu„[µü¤PK!±âßRR)v#css/code-editor-rtl.cssnu„[µü¤PK!Fߦõ4õ4Â|#css/customize-widgets.cssnu„[µü¤PK!Zàh€ € ²#css/l10n.min.cssnu„[µü¤PK!¨ß:toto À¾#css/about.cssnu„[µü¤PK!ÊÐÍúúq.$css/site-health.min.cssnu„[µü¤PK!I�•�(�(!²C$css/customize-widgets-rtl.min.cssnu„[µü¤PK!Ô++“l$css/customize-controls.cssnu„[µü¤PK!û3 c†X†Xˆ%css/customize-nav-menus-rtl.cssnu„[µü¤PK!¡äK`"`" Ýà%css/login.cssnu„[µü¤PK!'E�2>>z&css/site-health.cssnu„[µü¤PK!²™¥S | |û&css/edit-rtl.min.cssnu„[µü¤PK!Ñ÷¾·úú_™&css/install.min.cssnu„[µü¤PK!ò·„ßà”à”œ®&css/list-tables.min.cssnu„[µü¤PK!w¼)wììÃC'css/customize-controls.min.cssnu„[µü¤PK!Œ°)äÀÀ0(css/view-transitions.min.cssnu„[µü¤PK!Jð…9:y:y+1(css/forms-rtl.min.cssnu„[µü¤PK!ö6‡š^H^H#ªª(css/customize-nav-menus-rtl.min.cssnu„[µü¤PK!µLgj„­„­[ó(css/themes-rtl.cssnu„[µü¤PK!˜wdŽË;Ë;!¡)css/admin-menu-rtl.min.cssnu„[µü¤PK!i˜ƒÊóÊó6Ý)css/common-rtl.min.cssnu„[µü¤PK!t¬a.÷7÷7FÑ*css/nav-menus-rtl.min.cssnu„[µü¤PK!eÚ)yÜ܆ +css/install-rtl.cssnu„[µü¤PK!úOj¤� � ¥#+css/color-picker-rtl.min.cssnu„[µü¤PK!MÅH8V8Vr0+css/about-rtl.min.cssnu„[µü¤PK!/õns››ï†+css/code-editor.min.cssnu„[µü¤PK!z Yœœ ÑŒ+css/forms.cssnu„[µü¤PK!.ù‰"‰"+),css/login-rtl.cssnu„[µü¤PK!æj’×v×võK,css/dashboard-rtl.cssnu„[µü¤PK!FtÇ{Ž(Ž(Ã,css/customize-widgets.min.cssnu„[µü¤PK!¦ý3~yy ìë,css/deprecated-media-rtl.min.cssnu„[µü¤PK!ß¹Òî‹‹µ-css/wp-admin.cssnu„[µü¤PK! g Õ;‡;‡€-css/themes-rtl.min.cssnu„[µü¤PK!Ñ78¤‹I‹I‹-css/admin-menu.cssnu„[µü¤PK!6<Ü7Ü7ÎÔ-css/nav-menus.min.cssnu„[µü¤PK!¶#O²ÐYÐYï .css/media-rtl.min.cssnu„[µü¤PK!LxìÚ Ú g.css/wp-tooltip.cssnu„[µü¤PK!çòU{-{-  s.comment.phpnu„[µü¤PK!ûæ7¡ ¡ Ö .link-parse-opml.phpnu„[µü¤PK!•¢/öº º º«.tools.phpnu„[µü¤PK!)?I†_(_(­¹.authorize-application.phpnu„[µü¤PK!ÿ\rSNNUâ.images/about-release-badge.svgnu„[µü¤PK!a¯ž§ñê.images/w-logo-white.pngnu„[µü¤PK!ÑQ½mmK/images/post-formats.pngnu„[µü¤PK!Ëę̀¨ÿ/images/bubble_bg-2x.gifnu„[µü¤PK!i“:×ÎÎî /images/media-button-music.gifnu„[µü¤PK!œ?E¥0¥0 /images/menu-vs-2x.pngnu„[µü¤PK!]…¿¢rróƒ1images/list-2x.pngnu„[µü¤PK!’˜†XXs‰1images/loading.gifnu„[µü¤PK!v¥µõ �1images/yes.pngnu„[µü¤PK!) ǰ ° f‘1images/wordpress-logo.pngnu„[µü¤PK! Âã)gg_›1images/wordpress-logo-white.svgnu„[µü¤PK!�ÊaÄxx ¢1images/se.pngnu„[µü¤PK!ò}äjýýÊ¢1images/align-right.pngnu„[µü¤PK!« ™ŸŸ ¥1images/wheel.pngnu„[µü¤PK!;}DDý$ý$ì¼1images/contribute-code.svgnu„[µü¤PK!˜^8–ðð3â1images/imgedit-icons-2x.pngnu„[µü¤PK!åoBÔÔ n2images/about-header-freedoms.svgnu„[µü¤PK!,}³) ) ’2images/w-logo-blue.pngnu„[µü¤PK!Ê®,µHH2images/spinner.gifnu„[µü¤PK!¬œÁpp‹ 2images/spinner-2x.gifnu„[µü¤PK!L›‡ˆ‘ˆ‘@>2images/about-texture.pngnu„[µü¤PK!Ië{ZrrÐ3images/about-header-credits.svgnu„[µü¤PK!lKï¯ÑÖ3images/menu.pngnu„[µü¤PK!"ËÕ**¿ê3images/align-left.pngnu„[µü¤PK!òt‹±  .í3images/dashboard-background.svgnu„[µü¤PK!«_n®hh�ú3images/marker.pngnu„[µü¤PK!@ÒË‘ò"ò"6ü3images/contribute-no-code.svgnu„[µü¤PK![w}G• • u4images/freedom-4.svgnu„[µü¤PK!×HÀ’……N,4images/media-button-video.gifnu„[µü¤PK!àfÒþ«"«" -4images/wpspin_light-2x.gifnu„[µü¤PK!Ü7^n’ ’ P4images/post-formats-vs.pngnu„[µü¤PK!0±˜ÔEÔEñY4images/contribute-main.svgnu„[µü¤PK!–6µµ 4images/xit.gifnu„[µü¤PK!n´Óêœêœ¡4images/browser-rtl.pngnu„[µü¤PK!(Ñ£yy2>5images/align-none-2x.pngnu„[µü¤PK!Vo™·77ó>5images/sort.gifnu„[µü¤PK!Ç4{ˆ¡¡i?5images/align-none.pngnu„[µü¤PK!5Ô " U UOA5images/icons32-2x.pngnu„[µü¤PK!F SÈÈž–5images/media-button-image.gifnu„[µü¤PK!ßÎ~[ŽŽ³—5images/bubble_bg.gifnu„[µü¤PK!<_nfúú$…™5images/about-header-get-involved.svgnu„[µü¤PK!àô‘}——Ó�5images/resize-2x.gifnu„[µü¤PK!¡ )± ± ®ž5images/about-header-default.svgnu„[µü¤PK!Úþùî@@®ª5images/resize.gifnu„[µü¤PK!•¶®øÜÜ/«5images/widgets/.htaccessnu„[µü¤PK!×1ëûtûtS¬5images/widgets/index.phpnu„[µü¤PK!°ÏÝöWW–!6images/icons32.pngnu„[µü¤PK!Æ>åm@Â@ /A6themes.phpnu„[µü¤PK!ºÿÿà  ©7link-manager.phpnu„[µü¤PK!!N´»(»(ò7site-health.phpnu„[µü¤PK!J¹ïYû^û^ì=7theme-install.phpnu„[µü¤PK!%È%ÿ••,(�7includes/class-walker-nav-menu-checklist.phpnu„[µü¤PK!¤®ð¿ð¿´7includes/nav-menu.phpnu„[µü¤PK!¦éLž-ž-Nt8includes/bookmark.phpnu„[µü¤PK!»AÜbb1¢8includes/admin-filters.phpnu„[µü¤PK!¬Aðaa(ÝÁ8includes/class-wp-ajax-upgrader-skin.phpnu„[µü¤PK!�æ ¡))–Ò8includes/meta-boxes.phpnu„[µü¤PK!gäCC'Ø9includes/class-file-upload-upgrader.phpnu„[µü¤PK!û²@!ÙÙ' è9includes/class-wp-list-table-compat.phpnu„[µü¤PK!ÿy×H×H&Ðî9includes/class-wp-community-events.phpnu„[µü¤PK!.•0Ńƒ ý7:includes/class-wp-debug-data.phpnu„[µü¤PK!ïÒæ¤W W ÐM;includes/class-wp-importer.phpnu„[µü¤PK!åå0ö…ö…un;includes/template.phpnu„[µü¤PK!�À_X—K—K&°ô<includes/class-wp-users-list-table.phpnu„[µü¤PK!ZbÙrPTPT&�@=includes/class-wp-terms-list-table.phpnu„[µü¤PK!(XC¨ý€ý€,C•=includes/class-wp-privacy-policy-content.phpnu„[µü¤PK!_‡Â ²²œ>includes/schema.phpnu„[µü¤PK!&JzŠŠ=îÈ>includes/class-wp-privacy-data-export-requests-list-table.phpnu„[µü¤PK!ÚS⬮2®2'åà>includes/class-theme-installer-skin.phpnu„[µü¤PK!"†Yñ$ñ$ê?includes/comment.phpnu„[µü¤PK!äºø ää,9?includes/class-walker-category-checklist.phpnu„[µü¤PK!²+ȾΠΠ'_M?includes/class-plugin-upgrader-skin.phpnu„[µü¤PK!«ûý±˜˜#„Z?includes/class-wp-upgrader-skin.phpnu„[µü¤PK!@€üñ¨<¨<)ov?includes/class-language-pack-upgrader.phpnu„[µü¤PK!ùÙüÿx€x€p³?includes/file.phpnu„[µü¤PK!ò$9!bb)4Aincludes/theme-install.phpnu„[µü¤PK!C>¤³dd%ÕOAincludes/class-wp-filesystem-base.phpnu„[µü¤PK!-ÖEÚÏÏ@´Aincludes/options.phpnu„[µü¤PK!åmè'™™SÅAincludes/plugin-install.phpnu„[µü¤PK!£H€Û2)2)±^Bincludes/widgets.phpnu„[µü¤PK!¶ž.Ú7Ú7''ˆBincludes/class-walker-nav-menu-edit.phpnu„[µü¤PK!P^Ä.\.\)XÀBincludes/class-wp-ms-sites-list-table.phpnu„[µü¤PK! ÙÙßCincludes/import.phpnu„[µü¤PK! W-"``!û6Cincludes/class-wp-site-health.phpnu„[µü¤PK!ÊYEYY¬7Eincludes/class-wp-site-icon.phpnu„[µü¤PK! á,,­¹­¹TQEincludes/theme.phpnu„[µü¤PK!œ”›gZgZC Fincludes/ajax-actions.phpnu„[µü¤PK!ŽwAfÅÅ$óeHincludes/class-wp-upgrader-skins.phpnu„[µü¤PK!C°¶§Œ§Œ lHincludes/ms.phpnu„[µü¤PK!²° :v:v*òøHincludes/class-wp-ms-themes-list-table.phpnu„[µü¤PK!s]�ññ'†oIincludes/class-wp-internal-pointers.phpnu„[µü¤PK!ÙÚ¿M^a^a'Î�Iincludes/class-wp-filesystem-ftpext.phpnu„[µü¤PK! Ïi÷i]i]ƒãIincludes/user.phpnu„[µü¤PK!]´7±Õ±Õ-AJincludes/media.phpnu„[µü¤PK!㻾’¾’ Lincludes/class-wp-screen.phpnu„[µü¤PK!¬$£Æ%%6*ªLincludes/class-wp-application-passwords-list-table.phpnu„[µü¤PK!‘:à'PP&µÅLincludes/class-theme-upgrader-skin.phpnu„[µü¤PK!–£ss¬s¬[ÖLincludes/image-edit.phpnu„[µü¤PK!vÌõD!!ƒMincludes/class-ftp-sockets.phpnu„[µü¤PK!üñ)èÑñÑñ'‚¤Mincludes/class-wp-automatic-updater.phpnu„[µü¤PK! Í•�88.ª–Nincludes/class-wp-site-health-auto-updates.phpnu„[µü¤PK!óµlä6 6 . ÏNincludes/class-language-pack-upgrader-skin.phpnu„[µü¤PK!’¸×d×d%�ÚNincludes/class-wp-filesystem-ssh2.phpnu„[µü¤PK!|ßÐJÖ9Ö9,É?Oincludes/class-wp-privacy-requests-table.phpnu„[µü¤PK!»Âó^;^; ûyOincludes/class-core-upgrader.phpnu„[µü¤PK!ÈŸÅØØ©µOincludes/dashboard.phpnu„[µü¤PK!—ñ+k,,ÇÉPincludes/admin.phpnu„[µü¤PK!Á ÂÈ{’`includes/class-wp-privacy-data-removal-requests-list-table.phpnu„[µü¤PK!ÈLtÐ#!#! «`includes/taxonomy.phpnu„[µü¤PK!ÁoEòöTöT$sÌ`includes/class-custom-background.phpnu„[µü¤PK!÷È„<‡<‡)½!aincludes/class-wp-comments-list-table.phpnu„[µü¤PK!¥à�w'w'&R©aincludes/class-wp-links-list-table.phpnu„[µü¤PK!¸;`‚||Ñaincludes/noop.phpnu„[µü¤PK!F,r¢ÈÈÜÕaincludes/credits.phpnu„[µü¤PK!ÜÌÁL(+(+ èìaincludes/translation-install.phpnu„[µü¤PK!g¼6 ăă`bincludes/privacy-tools.phpnu„[µü¤PK!;*æFžižinœbincludes/network.phpnu„[µü¤PK!ʲð’ý°ý°Pcincludes/image.phpnu„[µü¤PK!Ó¯ŠLôaôa/�·cincludes/class-wp-plugin-install-list-table.phpnu„[µü¤PK!̇3LÆÆâdincludes/edit-tag-messages.phpnu„[µü¤PK!ÕîÓ1kµkµödincludes/misc.phpnu„[µü¤PK!ׇ¯m„O„O+¢Õdincludes/class-wp-filesystem-ftpsockets.phpnu„[µü¤PK!î¿£þºº�%eincludes/ms-deprecated.phpnu„[µü¤PK!¿§‚ëd d +…4eincludes/class-bulk-theme-upgrader-skin.phpnu„[µü¤PK!Çîçõ@õ@D?eincludes/revision.phpnu„[µü¤PK!Í�5?YÖYÖ ~€eincludes/class-wp-list-table.phpnu„[µü¤PK!•¶®øÜÜ'Wfincludes/midnight/.htaccessnu„[µü¤PK!¾.*9ÀÆÀÆNXfincludes/midnight/index.phpnu„[µü¤PK!Œè`  ,Ygincludes/class-bulk-plugin-upgrader-skin.phpnu„[µü¤PK!–q„ ÎjÎjÓ)gincludes/class-ftp.phpnu„[µü¤PK!«50×njs/postbox.jsnu„[µü¤PK!n×Qi' ' }ˆnjs/tags.min.jsnu„[µü¤PK!2jv�llâ”njs/set-post-thumbnail.min.jsnu„[µü¤PK!›‡‹!µµ š—njs/updates.jsnu„[µü¤PK!`.ö33VMpjs/editor.min.jsnu„[µü¤PK!¸Å¿Á&& ³€pjs/common.jsnu„[µü¤PK!¨ægÃŒŒ”qjs/password-strength-meter.jsnu„[µü¤PK!†«Dõää î¤qjs/xfn.jsnu„[µü¤PK!Tu‚„áƒáƒ ¨qjs/customize-controls.jsnu„[µü¤PK!:4»ùJJ4,vjs/site-health.min.jsnu„[µü¤PK!‘FBôÅÅÃEvjs/site-icon.jsnu„[µü¤PK!l;íñOOÇ`vjs/password-toggle.min.jsnu„[µü¤PK!�éqÞªkªk_dvjs/dashboard.jsnu„[µü¤PK!Óźµ µ HÐvjs/inline-edit-tax.min.jsnu„[µü¤PK!§0ÆFÜvjs/svg-painter.min.jsnu„[µü¤PK!ÊZ”@f@fªâvjs/theme-plugin-editor.jsnu„[µü¤PK!¡g}hEE3Iwjs/privacy-tools.min.jsnu„[µü¤PK!ZÌD;½;½¿]wjs/updates.min.jsnu„[µü¤PK!G3˜Jçç;xjs/custom-header.jsnu„[µü¤PK!NAFÅÖ½Ö½e#xjs/customize-nav-menus.jsnu„[µü¤PK!ÂaÛöö„áyjs/accordion.min.jsnu„[µü¤PK!Õ{ºX¤¤½äyjs/auth-app.jsnu„[µü¤PK!ø`%ðÄPÄPŸûyjs/inline-edit-post.jsnu„[µü¤PK!Ä¡NrÐ Ð ©Lzjs/application-passwords.min.jsnu„[µü¤PK!3L–@×K×KÈXzjs/post.min.jsnu„[µü¤PK! ‚¼�ŸŸ ݤzjs/tags.jsnu„[µü¤PK! >iZýý¶Ãzjs/user-suggest.jsnu„[µü¤PK!þ«k¾u u õÌzjs/accordion.jsnu„[µü¤PK!k‡ñä ä ©Øzjs/site-icon.min.jsnu„[µü¤PK![ù©©Ðâzjs/farbtastic.jsnu„[µü¤PK!yt�qfqf¹{js/common.min.jsnu„[µü¤PK!;AKÛcc!jh{js/password-strength-meter.min.jsnu„[µü¤PK!½Ãøßÿ¯ÿ¯ m{js/editor.jsnu„[µü¤PK!Èå^¶¶Y|js/custom-background.min.jsnu„[µü¤PK!�É'f›<›<Z"|js/edit-comments.min.jsnu„[µü¤PK!ß:Ø8686<_|js/site-health.jsnu„[µü¤PK!Ú·ßA1A1µ•|js/widgets.min.jsnu„[µü¤PK!4UE®®7Ç|js/plugin-install.jsnu„[µü¤PK!åÐ8ÓÊÊ )ã|js/xfn.min.jsnu„[µü¤PK!â–g”§§0å|js/language-chooser.min.jsnu„[µü¤PK!DY‰× × !ç|js/code-editor.min.jsnu„[µü¤PK!E~ú3›<›<=õ|js/image-edit.min.jsnu„[µü¤PK!øGw   2}js/link.jsnu„[µü¤PK!ªÉ_E}js/media-gallery.jsnu„[µü¤PK!­W�.ll¹J}js/set-post-thumbnail.jsnu„[µü¤PK!Í*ß§§ mN}js/gallery.jsnu„[µü¤PK!r?\7úúQd}js/word-count.min.jsnu„[µü¤PK!˜2S˜+F+F�j}js/code-editor.jsnu„[µü¤PK!-³uuû°}js/inline-edit-tax.jsnu„[µü¤PK!¿3“‹‹µÏ}js/tags-suggest.jsnu„[µü¤PK!£„hi  ‚æ}js/link.min.jsnu„[µü¤PK!8å_É ‰ Ïï}js/media-upload.jsnu„[µü¤PK!p™Ô r%r%šý}js/inline-edit-post.min.jsnu„[µü¤PK!Mªz™ô™ôV#~js/nav-menu.jsnu„[µü¤PK!ã˜Ã;;-js/password-toggle.jsnu„[µü¤PK!aãMýèŸèŸ­js/image-edit.jsnu„[µü¤PK!ôl‹4‹4Õ½js/editor-expand.min.jsnu„[µü¤PK!!'«7�¼�¼§òjs/customize-nav-menus.min.jsnu„[µü¤PK!òvòM""„¯€js/dashboard.min.jsnu„[µü¤PK!A^[_úúÎÑ€js/application-passwords.jsnu„[µü¤PK!l1®iië€js/postbox.min.jsnu„[µü¤PK!°3ø„+„+½�js/tags-box.jsnu„[µü¤PK!  #uû”û”1�js/edit-comments.jsnu„[µü¤PK!“Ë÷wH/H/½Æ�js/theme-plugin-editor.min.jsnu„[µü¤PK!×<£Ôn¦n¦Rö�js/editor-expand.jsnu„[µü¤PK!¯Œ@?:Z:Z �‚js/widgets.jsnu„[µü¤PK!™:oWc c z÷‚js/plugin-install.min.jsnu„[µü¤PK!`¢x  %ƒjs/tags-box.min.jsnu„[µü¤PK!�Ñý3Š+Š+l ƒjs/privacy-tools.jsnu„[µü¤PK!ؤ¤99ƒjs/user-suggest.min.jsnu„[µü¤PK!'�8¤‡ ‡ #<ƒjs/media.min.jsnu„[µü¤PK!ƒî°¢k¢kéEƒjs/theme.min.jsnu„[µü¤PK!r…y$$ʱƒjs/auth-app.min.jsnu„[µü¤PK!š Š°zz0ºƒjs/language-chooser.jsnu„[µü¤PK!ï–o¸š·š·ð½ƒjs/customize-controls.min.jsnu„[µü¤PK!%À/äêêÖu…js/user-profile.min.jsnu„[µü¤PK!v—!“AxAx•…js/nav-menu.min.jsnu„[µü¤PK!ÚY^!!‰ †js/comment.min.jsnu„[µü¤PK!éèrßñFñFë†js/user-profile.jsnu„[µü¤PK!<�‡€€]†js/media-upload.min.jsnu„[µü¤PK!_Ws>ž ž äa†js/color-picker.min.jsnu„[µü¤PK!wÆÎ±ccÈo†js/media-gallery.min.jsnu„[µü¤PK!’€ ·¡m¡mrr†js/customize-widgets.min.jsnu„[µü¤PK!pîš[áGáG^à†js/revisions.min.jsnu„[µü¤PK!¥ñÆ5k k ‚(‡js/custom-background.jsnu„[µü¤PK!ê%ÜÝÝ46‡js/tags-suggest.min.jsnu„[µü¤PK!ôml[\[\W?‡js/iris.min.jsnu„[µü¤PK!/ó÷mm ð›‡js/media.jsnu„[µü¤PK!ÖØYDÝݘ¶‡js/widgets/text-widgets.min.jsnu„[µü¤PK!­˜í^ll Ã͇js/widgets/media-video-widget.jsnu„[µü¤PK!öYõ ¶¶&é‡js/widgets/media-gallery-widget.min.jsnu„[µü¤PK!´rŽ Ž $‹ø‡js/widgets/media-video-widget.min.jsnu„[µü¤PK!'žÒp§p§mˆjs/widgets/media-widgets.jsnu„[µü¤PK!ä¼Ô¯�F�F(«ˆjs/widgets/text-widgets.jsnu„[µü¤PK!8vÅ\\ óñˆjs/widgets/media-image-widget.jsnu„[µü¤PK!¦!ü§§$Ÿ‰js/widgets/media-audio-widget.min.jsnu„[µü¤PK!¿ö¬l¡7¡7š ‰js/widgets/media-widgets.min.jsnu„[µü¤PK!€´Œ�‹=‹=!ŠE‰js/widgets/custom-html-widgets.jsnu„[µü¤PK!•¶®øÜÜfƒ‰js/widgets/maint/.htaccessnu„[µü¤PK!¤õË·þ·þŒ„‰js/widgets/maint/index.phpnu„[µü¤PK!ÀiöŒÎÎ%�ƒŠjs/widgets/custom-html-widgets.min.jsnu„[µü¤PK!æE³1¼¼ °™Šjs/widgets/media-audio-widget.jsnu„[µü¤PK!¯áãL L )¼ªŠjs/widgets/core-media-image-widget.min.jsnu„[µü¤PK!|yN¯èè$a·Šjs/widgets/media-image-widget.min.jsnu„[µü¤PK!ÑJIr(r("�¿Šjs/widgets/media-gallery-widget.jsnu„[µü¤PK!­$E+.ž.ž aèŠjs/post.jsnu„[µü¤PK!"{(&(&Ɇ‹js/color-picker.jsnu„[µü¤PK!uy¥M$I$I 3­‹about.phpnu„[µü¤PK!Ü7K^xx �ö‹plugins.phpnu„[µü¤PK!%4UãnŒoptions-connectors.phpnu„[µü¤PK!Ecel330uŒmoderation.phpnu„[µü¤PK!œ«®wØØ¡vŒadmin-functions.phpnu„[µü¤PK!o´�·2‡2 ¼xŒadmin.phpnu„[µü¤PK!ûøÁ>ßß|«Œmaint/repair.phpnu„[µü¤PK!•¶®øÜܛɌmaint/temp/.htaccessnu„[µü¤PK!u0!3†3†»ÊŒmaint/temp/index.phpnu„[µü¤PK!6½uœ2Q�load-scripts.phpnu„[µü¤PK!A1NIååˆY�admin-post.phpnu„[µü¤PK!fǑРР«a�privacy.phpnu„[µü¤PK!ÝÞÌó� � ¶k�link.phpnu„[µü¤PK!µE€„L„L{w�widgets-form.phpnu„[µü¤PK!Dö T,, ?Ä�export.phpnu„[µü¤PK!U RE zð�profile.phpnu„[µü¤PK!ô²æuD'D'Ðñ�menu-header.phpnu„[µü¤PK!Þöë›ÖFÖFSŽmenu.phpnu„[µü¤PK!î6ƒ33 a`Župdate.phpnu„[µü¤PK!`±*z´z´¡“Župdate-core.phpnu„[µü¤PK!Òz‰ZH�contribute.phpnu„[µü¤PK!i1ûE*E*°^�post.phpnu„[µü¤PK!3\§¢Ö'Ö'-‰�options-reading.phpnu„[µü¤PK!m.R†t£t£ F±�user-edit.phpnu„[µü¤PK!Y[Üðð÷T�options-media.phpnu„[µü¤PK!i®%ÁD$D$(o�admin-header.phpnu„[µü¤PK!vÔ'`öö ¬“�upgrade.phpnu„[µü¤PK!|bò)¦¦ ݬ�link-add.phpnu„[µü¤PK!®nË ¢)¢)¿°�edit-tag-form.phpnu„[µü¤PK!H‡¯FF¢Ú�setup-config.phpnu„[µü¤PK!l¤TTssê ‘widgets-form-blocks.phpnu„[µü¤PK!^°ï¸¸ ¤5‘index.phpnu„[µü¤PK!Ø¡íuËË•T‘edit-link-form.phpnu„[µü¤PK!~R�RTT¢m‘media-upload.phpnu„[µü¤PK!?3“¯X`X` 6|‘user-new.phpnu„[µü¤PK!ØòL×× ÊÜ‘ms-users.phpnu„[µü¤PK!ÿ¹lo-- ÝÝ‘credits.phpnu„[µü¤PK!t(Íf¦ ¦ Eî‘press-this.phpnu„[µü¤PK!}|Šff)ø‘options-head.phpnu„[µü¤PK!¸®#Ä““ Ïú‘network.phpnu„[µü¤PK!`i#�’export-personal-data.phpnu„[µü¤PK!Uý¶B-B- é/’customize.phpnu„[µü¤PK!Eê_îWîW h]’edit-tags.phpnu„[µü¤PK!•GQ×QQ“µ’erase-personal-data.phpnu„[µü¤PK!£�«ÞÞ +Ó’freedoms.phpnu„[µü¤PK!·Õ§¶ÈÈEå’font-library.phpnu„[µü¤PK!ºj°ÌÌ Më’revision.phpnu„[µü¤PK!U±f11U“install-helper.phpnu„[µü¤PK!"[å§CCÈ“theme-editor.phpnu„[µü¤PK!_±œ6œ6‡a“edit-form-comment.phpnu„[µü¤PK!MŒ3Ç”8”8h˜“edit-comments.phpnu„[µü¤PK!pþèÕ=Ñ“admin-ajax.phpnu„[µü¤PK!Ÿôkâ¨<¨<•å“edit-form-blocks.phpnu„[µü¤PK!Bƒ�Ó¼;¼; �"”upload.phpnu„[µü¤PK!(ÙÞÙÙ w^”ms-themes.phpnu„[µü¤PK!Ãôaåå�_”ms-options.phpnu„[µü¤PK!×ó®Æü8ü8°`”network/sites.phpnu„[µü¤PK!Òñ9T . .í™”network/site-users.phpnu„[µü¤PK!›é´WW>È”network/settings.phpnu„[µü¤PK!S\{—_>_>�•network/themes.phpnu„[µü¤PK!.Íó>vv1^•network/theme-install.phpnu„[µü¤PK!ÒçÌW__ð_•network/site-settings.phpnu„[µü¤PK!¡�Ÿïyy˜w•network/plugin-install.phpnu„[µü¤PK! wøFQ.Q.[y•network/users.phpnu„[µü¤PK!Þ33ÂÂí§•network/site-themes.phpnu„[µü¤PK!•¡¿÷  ö•network/plugin-editor.phpnu„[µü¤PK!spónnIÄ•network/edit.phpnu„[µü¤PK!æõõ÷Ç•network/about.phpnu„[µü¤PK!©ðVïùù-É•network/plugins.phpnu„[µü¤PK!P¾h iÊ•network/admin.phpnu„[µü¤PK!s¶<Ý÷÷ªÎ•network/setup.phpnu„[µü¤PK!î¤ òùùâÏ•network/privacy.phpnu„[µü¤PK!aËS°O&O&Ñ•network/site-new.phpnu„[µü¤PK!Þ]Z}þþ±÷•network/profile.phpnu„[µü¤PK!}†=¶··òø•network/menu.phpnu„[µü¤PK!s òïÂÂé –network/update.phpnu„[µü¤PK!4í�åýýí –network/update-core.phpnu„[µü¤PK!váÌ«ÿÿ1–network/contribute.phpnu„[µü¤PK!éw…,ýýv–network/user-edit.phpnu„[µü¤PK!ùóŽÃmm¸–network/site-info.phpnu„[µü¤PK!84B_j0–network/upgrade.phpnu„[µü¤PK!½Ëý_ _ ÌC–network/index.phpnu„[µü¤PK!YË�=lllO–network/user-new.phpnu„[µü¤PK!$FŽ^ùùd–network/credits.phpnu„[µü¤PK!÷®ÑdûûXe–network/freedoms.phpnu„[µü¤PK!ëÔJò—f–network/theme-editor.phpnu„[µü¤PK``âÎçg–