' . sprintf( /* translators: %s: URL to Widgets screen. */ __( 'You can add links here to be displayed on your site, usually using Widgets. By default, links to several sites in the WordPress community are included as examples.' ), 'widgets.php' ) . '
' . '' . __( 'Links may be separated into Link Categories; these are different than the categories used on your posts.' ) . '
' . '' . __( 'You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'deleting-links', 'title' => __( 'Deleting Links' ), 'content' => '' . __( 'If you delete a link, it will be removed permanently, as Links do not have a Trash function yet.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Managing Links' ) . '
' . '' . __( 'Support forums' ) . '
' ); get_current_screen()->set_screen_reader_content( array( 'heading_list' => __( 'Links list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( ! current_user_can( 'manage_links' ) ) { wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) ); } ?>'; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '' . esc_html( wp_unslash( $_REQUEST['s'] ) ) . '' ); echo ''; } ?>
'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'deleted' ), $_SERVER['REQUEST_URI'] ); } ?>
' . __( 'Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink.' ) . '
' . '' . __( 'This screen allows you to choose your permalink structure. You can choose from common settings or create custom URL structures.' ) . '
' . '' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'permalink-settings', 'title' => __( 'Permalink Settings' ), 'content' => '' . __( 'Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure.' ) . '
' . '' . sprintf(
/* translators: %s: Percent sign (%). */
__( 'If you pick an option other than Plain, your general URL path with structure tags (terms surrounded by %s) will also appear in the custom structure field and your path can be further modified there.' ),
'%'
) . '
' . sprintf(
/* translators: 1: %category%, 2: %tag% */
__( 'When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %1$s or %2$s.' ),
'%category%',
'%tag%'
) . '
' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'custom-structures', 'title' => __( 'Custom Structures' ), 'content' => '' . __( 'The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be /topics/uncategorized instead of /category/uncategorized.' ) . '
' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '
', ) ); $help_sidebar_content = '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Permalinks Settings' ) . '
' . '' . __( 'Documentation on Using Permalinks' ) . '
'; if ( $is_nginx ) { $help_sidebar_content .= '' . __( 'Documentation on Nginx configuration.' ) . '
'; } $help_sidebar_content .= '' . __( 'Support forums' ) . '
'; get_current_screen()->set_help_sidebar( $help_sidebar_content ); unset( $help_sidebar_content ); $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); $permalink_structure = get_option( 'permalink_structure' ); $index_php_prefix = ''; $blog_prefix = ''; if ( ! got_url_rewrite() ) { $index_php_prefix = '/index.php'; } /* * In a subdirectory configuration of multisite, the `/blog` prefix is used by * default on the main site to avoid collisions with other sites created on that * network. If the `permalink_structure` option has been changed to remove this * base prefix, WordPress core can no longer account for the possible collision. */ if ( is_multisite() && ! is_subdomain_install() && is_main_site() && str_starts_with( $permalink_structure, '/blog/' ) ) { $blog_prefix = '/blog'; } $category_base = get_option( 'category_base' ); $tag_base = get_option( 'tag_base' ); $structure_updated = false; $htaccess_update_required = false; if ( isset( $_POST['permalink_structure'] ) || isset( $_POST['category_base'] ) ) { check_admin_referer( 'update-permalink' ); if ( isset( $_POST['permalink_structure'] ) ) { if ( isset( $_POST['selection'] ) && 'custom' !== $_POST['selection'] ) { $permalink_structure = $_POST['selection']; } else { $permalink_structure = $_POST['permalink_structure']; } if ( ! empty( $permalink_structure ) ) { $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) ); if ( $index_php_prefix && $blog_prefix ) { $permalink_structure = $index_php_prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure ); } else { $permalink_structure = $blog_prefix . $permalink_structure; } } $permalink_structure = sanitize_option( 'permalink_structure', $permalink_structure ); $wp_rewrite->set_permalink_structure( $permalink_structure ); $structure_updated = true; } if ( isset( $_POST['category_base'] ) ) { $category_base = $_POST['category_base']; if ( ! empty( $category_base ) ) { $category_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $category_base ) ); } $wp_rewrite->set_category_base( $category_base ); } if ( isset( $_POST['tag_base'] ) ) { $tag_base = $_POST['tag_base']; if ( ! empty( $tag_base ) ) { $tag_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $tag_base ) ); } $wp_rewrite->set_tag_base( $tag_base ); } } if ( $iis7_permalinks ) { if ( ( ! file_exists( $home_path . 'web.config' ) && win_is_writable( $home_path ) ) || win_is_writable( $home_path . 'web.config' ) ) { $writable = true; } else { $writable = false; } } elseif ( $is_nginx || $is_caddy ) { $writable = false; } else { if ( ( ! file_exists( $home_path . '.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path . '.htaccess' ) ) { $writable = true; } else { $writable = false; $existing_rules = array_filter( extract_from_markers( $home_path . '.htaccess', 'WordPress' ) ); $new_rules = array_filter( explode( "\n", $wp_rewrite->mod_rewrite_rules() ) ); $htaccess_update_required = ( $new_rules !== $existing_rules ); } } $using_index_permalinks = $wp_rewrite->using_index_permalinks(); if ( $structure_updated ) { $message = __( 'Permalink structure updated.' ); if ( ! is_multisite() && $permalink_structure && ! $using_index_permalinks ) { if ( $iis7_permalinks ) { if ( ! $writable ) { $message = sprintf( /* translators: %s: web.config */ __( 'You should update your %s file now.' ), 'web.config'
);
} else {
$message = sprintf(
/* translators: %s: web.config */
__( 'Permalink structure updated. Remove write access on %s file now!' ),
'web.config'
);
}
} elseif ( ! $is_nginx && ! $is_caddy && $htaccess_update_required && ! $writable ) {
$message = sprintf(
/* translators: %s: .htaccess */
__( 'You should update your %s file now.' ),
'.htaccess'
);
}
}
if ( ! get_settings_errors() ) {
add_settings_error( 'general', 'settings_updated', $message, 'success' );
}
set_transient( 'settings_errors', get_settings_errors(), 30 ); // 30 seconds.
wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) );
exit;
}
flush_rewrite_rules();
require_once ABSPATH . 'wp-admin/admin-header.php';
?>
Error: Your %1$s file is not writable, so updating it automatically was not possible. This is the URL rewrite rule you should have in your %1$s file. Click in the field and press %3$s (or %4$s on Mac) to select all. Then insert this rule inside of the %5$s element in %1$s file.' ),
'web.config',
__( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ),
'Ctrl + A',
'⌘ + A',
'/<configuration>/<system.webServer>/<rewrite>/<rules>'
);
?>
web.config' ); ?>
Error: The root directory of your site is not writable, so creating a file automatically was not possible. This is the URL rewrite rule you should have in your %2$s file. Create a new file called %2$s in the root directory of your site. Click in the field and press %3$s (or %4$s on Mac) to select all. Then insert this code into the %2$s file.' ),
__( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ),
'web.config',
'Ctrl + A',
'⌘ + A'
);
?>
web.config' ); ?>
Error: Your %1$s file is not writable, so updating it automatically was not possible. These are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s (or %4$s on Mac) to select all.' ),
'.htaccess',
__( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ),
'Ctrl + A',
'⌘ + A'
);
?>
' . __( 'You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:' ) . '
' . '- ' .
'
- ' . __( 'Drag and drop your files into the area below. Multiple files are allowed.' ) . ' ' . '
- ' . __( 'Clicking Select Files opens a navigation window showing you files in your operating system. Selecting Open after clicking on the file you want activates a progress bar on the uploader screen.' ) . ' ' . '
- ' . __( 'Revert to the Browser Uploader by clicking the link below the drag and drop box.' ) . ' ' . '
' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Uploading Media Files' ) . '
' . '' . __( 'Support forums' ) . '
' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $form_class = 'wp-upload-form media-upload-form type-form validate'; if ( get_user_setting( 'uploader' ) || isset( $_GET['browser-uploader'] ) ) { $form_class .= ' html-uploader'; } ?>' . __( '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.' ) . ' ' . '
' . __( '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 .= "
- ' . $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'; } ?> ' . __( 'Add User' ) . ''; } ?>'; } elseif ( str_starts_with( $item[6], 'data:image/svg+xml;base64,' ) ) { $img = '
'; // The value is base64-encoded data, so esc_attr() is used here instead of esc_url(). $img_style = ' style="background-image:url(\'' . esc_attr( $item[6] ) . '\')"'; $img_class = ' svg'; } elseif ( str_starts_with( $item[6], 'dashicons-' ) ) { $img = '
'; $img_class = ' dashicons-before ' . sanitize_html_class( $item[6] ); } } $title = wptexturize( $item[0] ); // Hide separators from screen readers. if ( $is_separator ) { $aria_hidden = ' aria-hidden="true"'; } echo "\n\t
' . __( 'You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links.' ) . '
' . '' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '
', ) ); /** This filter is documented in wp-admin/options.php */ if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { get_current_screen()->add_help_tab( array( 'id' => 'options-postemail', 'title' => __( 'Post Via Email' ), 'content' => '' . __( 'Post via email settings allow you to send your WordPress installation an email with the content of your post. You must set up a secret email account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.' ) . '
', ) ); } /** This filter is documented in wp-admin/options-writing.php */ if ( apply_filters( 'enable_update_services_configuration', true ) ) { get_current_screen()->add_help_tab( array( 'id' => 'options-services', 'title' => __( 'Update Services' ), 'content' => '' . __( 'If desired, WordPress will automatically alert various services of your new posts.' ) . '
', ) ); } get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Writing Settings' ) . '
' . '' . __( 'Support forums' ) . '
' ); wp_enqueue_script( 'user-profile' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>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 toggle 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'; ?>' . sprintf( /* translators: %s: https://wordpress.org/plugins/ */ __( 'Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress Plugin Directory are compatible with the license WordPress uses.' ), __( 'https://wordpress.org/plugins/' ) ) . '
' . '' . __( 'You can find new plugins to install by searching or browsing the directory right here in your own Plugins section.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'adding-plugins', 'title' => __( 'Adding Plugins' ), 'content' => '' . __( 'If you know what you are looking for, Search is your best bet. The Search screen has options to search the WordPress Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag.' ) . '
' . '' . __( 'If you just want to get an idea of what’s available, you can browse Featured and Popular plugins by using the links above the plugins list. These sections rotate regularly.' ) . '
' . '' . __( 'You can also browse a user’s favorite plugins, by using the Favorites link above the plugins list and entering their WordPress.org username.' ) . '
' . '' . __( 'If you want to install a plugin that you’ve downloaded elsewhere, click the Upload Plugin button above the plugins list. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Installing Plugins' ) . '
' . '' . __( 'Support forums' ) . '
' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter plugins list' ), 'heading_pagination' => __( 'Plugins list navigation' ), 'heading_list' => __( 'Plugins list' ), ) ); /** * WordPress Administration Template Header. */ require_once ABSPATH . 'wp-admin/admin-header.php'; WP_Plugin_Dependencies::initialize(); WP_Plugin_Dependencies::display_admin_notice_for_unmet_dependencies(); WP_Plugin_Dependencies::display_admin_notice_for_circular_dependencies(); ?>%s%s', ( 'upload' === $tab ) ? self_admin_url( 'plugin-install.php' ) : self_admin_url( 'plugin-install.php?tab=upload' ), __( 'Upload Plugin' ), __( 'Browse Plugins' ) ); } ?>
' . __( 'This screen shows an individual user all of their sites in this network, and also allows that user to set a primary site. They can use the links under each site to visit either the front end or the dashboard for that site.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on My Sites' ) . '
' . '' . __( 'Support forums' ) . '
' ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( $updated ) { wp_admin_notice( '' . __( 'Settings saved.' ) . '', array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } ?>%s', esc_url( $sign_up_url ), esc_html__( 'Add New Site' ) ); } if ( empty( $blogs ) ) : wp_admin_notice( '' . __( 'You must be a member of at least one site to use this page.' ) . '', array( 'type' => 'error', 'dismissible' => true, ) ); ?>
' . __( 'You need a higher level of permission.' ) . '
' . '' . __( 'Sorry, you are not allowed to create posts as this user.' ) . '
', 403 ); } $post = get_default_post_to_edit( $post_type, true ); $post_ID = $post->ID; /** This filter is documented in wp-admin/post.php */ if ( apply_filters( 'replace_editor', false, $post ) !== true ) { if ( use_block_editor_for_post( $post ) ) { require ABSPATH . 'wp-admin/edit-form-blocks.php'; } else { wp_enqueue_script( 'autosave' ); require ABSPATH . 'wp-admin/edit-form-advanced.php'; } } else { // Flag that we're not loading the block editor. $current_screen = get_current_screen(); $current_screen->is_block_editor( false ); } require_once ABSPATH . 'wp-admin/admin-footer.php'; PK \o|( load-styles.phpnu [ get_etag( $load ); if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $etag ) { header( "$protocol 304 Not Modified" ); exit; } foreach ( $load as $handle ) { if ( ! array_key_exists( $handle, $wp_styles->registered ) ) { continue; } $style = $wp_styles->registered[ $handle ]; if ( empty( $style->src ) ) { continue; } $path = ABSPATH . $style->src; if ( $rtl && ! empty( $style->extra['rtl'] ) ) { // All default styles have fully independent RTL files. $path = str_replace( '.min.css', '-rtl.min.css', $path ); } $content = get_file( $path ) . "\n"; // Note: str_starts_with() is not used here, as wp-includes/compat.php is not loaded in this file. if ( 0 === strpos( $style->src, '/' . WPINC . '/css/' ) ) { $content = str_replace( '../images/', '../' . WPINC . '/images/', $content ); $content = str_replace( '../js/tinymce/', '../' . WPINC . '/js/tinymce/', $content ); $content = str_replace( '../fonts/', '../' . WPINC . '/fonts/', $content ); $out .= $content; } else { $out .= str_replace( '../images/', 'images/', $content ); } } header( "Etag: $etag" ); header( 'Content-Type: text/css; charset=UTF-8' ); header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expires_offset ) . ' GMT' ); header( "Cache-Control: public, max-age=$expires_offset" ); echo $out; exit; PK \bʏQ Q erase-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(); ?>
%s', sprintf( '', esc_attr( $button_unique_id ), esc_attr( $error_description_id ), __( 'Dismiss' ) ), sprintf( /* translators: %s: Name of the file that failed to upload. */ __( '“%s” has failed to upload.' ), esc_html( $_FILES['async-upload']['name'] ) ), esc_html( $id->get_error_message() ) ); wp_admin_notice( $message, array( 'id' => $error_description_id, 'additional_classes' => array( 'error-div', 'error' ), 'paragraph_wrap' => false, ) ); $speak_message = sprintf( /* translators: %s: Name of the file that failed to upload. */ __( '%s has failed to upload.' ), $_FILES['async-upload']['name'] ); echo '\n"; exit; } if ( $_REQUEST['short'] ) { // Short form response - attachment ID only. echo $id; } else { // Long form response - big chunk of HTML. $type = $_REQUEST['type']; /** * Filters the returned ID of an uploaded attachment. * * The dynamic portion of the hook name, `$type`, refers to the attachment type. * * Possible hook names include: * * - `async_upload_audio` * - `async_upload_file` * - `async_upload_image` * - `async_upload_video` * * @since 2.5.0 * * @param int $id Uploaded attachment ID. */ echo apply_filters( "async_upload_{$type}", $id ); } PK \ ms-upgrade-network.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(); ?>
' . esc_html( $app_name ) . '' ); ?>
ID, true ); $blogs_count = count( $blogs ); if ( $blogs_count > 1 ) { ?>the %2$s site in this installation that you have permissions on.', 'This will grant access to all %2$s sites in this installation that you have permissions on.', $blogs_count ); if ( is_super_admin() ) { /* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */ $message = _n( 'This will grant access to the %2$s site on the network as you have Super Admin rights.', 'This will grant access to all %2$s sites on the network as you have Super Admin rights.', $blogs_count ); } printf( $message, admin_url( 'my-sites.php' ), number_format_i18n( $blogs_count ) ); ?>
' . __( 'Be sure to save this in a safe location. You will not be able to retrieve it.' ) . '
'; $args = array( 'type' => 'success', 'additional_classes' => array( 'notice-alt', 'below-h2' ), 'paragraph_wrap' => false, ); wp_admin_notice( $message, $args ); /** * Fires in the Authorize Application Password new password section in the no-JS version. * * In most cases, this should be used in combination with the {@see 'wp_application_passwords_approve_app_request_success'} * action to ensure that both the JS and no-JS variants are handled. * * @since 5.6.0 * @since 5.6.1 Corrected action name and signature. * * @param string $new_password The newly generated application password. * @param array $request The array of request data. All arguments are optional and may be empty. * @param WP_User $user The user authorizing the application. */ do_action( 'wp_authorize_application_password_form_approved_no_js', $new_password, $request, $user ); else : ?>' . __( 'This screen lists links to plugins to import data from blogging/content management platforms. Choose the platform you want to import from, and click Install Now when you are prompted in the popup window. If your platform is not listed, click the link to search the plugin directory for other importer plugins to see if there is one for your platform.' ) . '
' . '' . __( 'In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Import' ) . '
' . '' . __( 'Support forums' ) . '
' ); if ( current_user_can( 'install_plugins' ) ) { // List of popular importer plugins from the WordPress.org API. $popular_importers = wp_get_popular_importers(); } else { $popular_importers = array(); } // Detect and redirect invalid importers like 'movabletype', which is registered as 'mt'. if ( ! empty( $_GET['invalid'] ) && isset( $popular_importers[ $_GET['invalid'] ] ) ) { $importer_id = $popular_importers[ $_GET['invalid'] ]['importer-id']; if ( $importer_id !== $_GET['invalid'] ) { // Prevent redirect loops. wp_redirect( admin_url( 'admin.php?import=' . $importer_id ) ); exit; } unset( $importer_id ); } add_thickbox(); wp_enqueue_script( 'plugin-install' ); wp_enqueue_script( 'updates' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $parent_file = 'tools.php'; ?>' . __( 'No importers are available.' ) . '
'; // TODO: Make more helpful. } else { uasort( $importers, '_usort_by_first_member' ); ?>| {$data[0]} {$action} | {$data[1]} |