If you have any suggestions, ideas, or comments, or if you (gasp!) found a bug, join us in the Support Forums.
-
WordPress has a robust plugin API that makes extending the code easy. If you are a developer interested in utilizing this, see the plugin documentation in the Codex. You shouldn’t modify any of the core code.
+
WordPress has a robust plugin API that makes extending the code easy. If you are a developer interested in utilizing this, see the Plugin Developer Handbook. You shouldn’t modify any of the core code.
Share the Love
diff --git a/wp-activate.php b/wp-activate.php
index bfd5620..0f6181a 100644
--- a/wp-activate.php
+++ b/wp-activate.php
@@ -32,13 +32,17 @@ $wp_query->is_404 = false;
do_action( 'activate_header' );
/**
- * Adds an action hook specific to this page that fires on wp_head
+ * Adds an action hook specific to this page.
+ *
+ * Fires on {@see 'wp_head'}.
*
* @since MU
*/
function do_activate_header() {
- /**
- * Fires before the Site Activation page is loaded, but on the wp_head action.
+ /**
+ * Fires before the Site Activation page is loaded.
+ *
+ * Fires on the {@see 'wp_head'} action.
*
* @since 3.0.0
*/
@@ -88,22 +92,37 @@ get_header( 'wp-activate' );
$result = wpmu_activate_signup( $key );
if ( is_wp_error($result) ) {
if ( 'already_active' == $result->get_error_code() || 'blog_taken' == $result->get_error_code() ) {
- $signup = $result->get_error_data();
+ $signup = $result->get_error_data();
?>
';
if ( $signup->domain . $signup->path == '' ) {
- printf( __('Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() );
+ printf(
+ /* translators: 1: login URL, 2: username, 3: user email, 4: lost password URL */
+ __( 'Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ),
+ network_site_url( 'wp-login.php', 'login' ),
+ $signup->user_login,
+ $signup->user_email,
+ wp_lostpassword_url()
+ );
} else {
- printf( __('Your site at %2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() );
+ printf(
+ /* translators: 1: site URL, 2: site domain, 3: username, 4: user email, 5: lost password URL */
+ __( 'Your site at %2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ),
+ 'http://' . $signup->domain,
+ $signup->domain,
+ $signup->user_login,
+ $signup->user_email,
+ wp_lostpassword_url()
+ );
}
echo '';
} else {
?>
-
+
+
- customizer.' ),
- esc_url( $customize_url )
- );
- } else {
- _e( 'Preview mobile, tablet, and desktop views directly in the customizer.' );
- }
+
+
+
-
-
-
- Site Identity section of the customizer.' ),
- esc_url( add_query_arg( array( 'autofocus' => array( 'section' => 'title_tagline' ) ), $customize_url ) )
- );
- } else {
- _e( 'The Twenty Fifteen and Twenty Sixteen themes have been updated to support custom logos, which can be found in the Site Identity section of the customizer.' );
- }
- ?>
comprehensive framework for rendering parts of the preview without rewriting your PHP code in JavaScript.' ),
- 'https://make.wordpress.org/core/2016/02/16/selective-refresh-in-the-customizer/'
+ /* translators: %s: https://make.wordpress.org/core/2016/07/06/resource-hints-in-4-6/ */
+ __( 'Resource hints help browsers decide which resources to fetch and preprocess. WordPress 4.6 adds them automatically for your styles and scripts making your site even faster.' ),
+ 'https://make.wordpress.org/core/2016/07/06/resource-hints-in-4-6/'
);
- if ( current_user_can( 'customize' ) && current_user_can( 'edit_theme_options' ) ) {
- if ( current_theme_supports( 'menus' ) && ! current_theme_supports( 'customize-selective-refresh-widgets' ) ) {
- printf(
- /* translators: %s: URL to Menus section of the customizer */
- ' ' . __( 'See it in action with Menus.' ),
- esc_url( add_query_arg( array( 'autofocus' => array( 'panel' => 'nav_menus' ) ), $customize_url ) )
- );
- } elseif ( current_theme_supports( 'customize-selective-refresh-widgets' ) ) { // If widgets are supported, menus are also because of the menus widget.
- printf(
- /* translators: 1: URL to Menus section of the customizer, 2: URL to Widgets section of the customizer */
- ' ' . __( 'See it in action with Menus or Widgets.' ),
- esc_url( add_query_arg( array( 'autofocus' => array( 'panel' => 'nav_menus' ) ), $customize_url ) ),
- esc_url( add_query_arg( array( 'autofocus' => array( 'panel' => 'widgets' ) ), $customize_url ) )
- );
- }
- }
?>
-
+
+
+
+
+
WP_Term_Query', 'WP_Post_Type' );
+ ?>
It’s really cool.' ),
- 'https://make.wordpress.org/core/2016/03/12/performance-improvements-for-images-in-wordpress-4-5/'
+ /* translators: 1: WP_Term_Query, 2: WP_Post_Type */
+ __( 'A new %1$s class adds flexibility to query term information while a new %2$s object makes interacting with post types more predictable.' ),
+ 'WP_Term_Query',
+ 'WP_Post_Type'
);
?>
+
+
+
+
+
+
has been expanded to support types, descriptions, and REST API visibility.' ),
+ 'https://make.wordpress.org/core/2016/07/08/enhancing-register_meta-in-4-6/'
+ );
+ ?>
API for enforcing validation constraints. Likewise, customizer controls now support notifications, which are used to display validation errors instead of failing silently.' ); ?>
-
+
directly overridden by themes via the template hierarchy.' ),
- 'https://make.wordpress.org/core/2016/03/11/embeds-changes-in-wordpress-4-5/'
+ /* translators: 1: WP_Site_Query, 2: WP_Network_Query */
+ __( 'Cached and comprehensive site queries improve your network admin experience. The addition of %1$s and %2$s help craft advanced queries with less effort.' ),
+ 'WP_Site_Query',
+ 'WP_Network_Query'
);
?>
@@ -28,7 +33,7 @@ if ( !defined('ABSPATH') )
WordPress.' ), __( 'https://wordpress.org/' ) );
/**
- * Filter the "Thank you" text displayed in the admin footer.
+ * Filters the "Thank you" text displayed in the admin footer.
*
* @since 2.8.0
*
@@ -40,7 +45,7 @@ if ( !defined('ABSPATH') )
render_screen_meta();
if ( is_network_admin() ) {
/**
- * Print network admin screen notices.
+ * Prints network admin screen notices.
*
* @since 3.1.0
*/
do_action( 'network_admin_notices' );
} elseif ( is_user_admin() ) {
/**
- * Print user admin screen notices.
+ * Prints user admin screen notices.
*
* @since 3.1.0
*/
do_action( 'user_admin_notices' );
} else {
/**
- * Print admin screen notices.
+ * Prints admin screen notices.
*
* @since 3.1.0
*/
@@ -251,7 +251,7 @@ if ( is_network_admin() ) {
}
/**
- * Print generic admin screen notices.
+ * Prints generic admin screen notices.
*
* @since 3.1.0
*/
diff --git a/wp-admin/admin.php b/wp-admin/admin.php
index a54ca21..ad341c8 100644
--- a/wp-admin/admin.php
+++ b/wp-admin/admin.php
@@ -48,7 +48,7 @@ if ( get_option('db_upgraded') ) {
exit;
/**
- * Filter whether to attempt to perform the multisite DB upgrade routine.
+ * Filters whether to attempt to perform the multisite DB upgrade routine.
*
* In single site, the user would be redirected to wp-admin/upgrade.php.
* In multisite, the DB upgrade routine is automatically fired, but only
@@ -138,21 +138,7 @@ else
require(ABSPATH . 'wp-admin/menu.php');
if ( current_user_can( 'manage_options' ) ) {
- /**
- * Filter the maximum memory limit available for administration screens.
- *
- * This only applies to administrators, who may require more memory for tasks like updates.
- * Memory limits when processing images (uploaded or edited by users of any role) are
- * handled separately.
- *
- * The WP_MAX_MEMORY_LIMIT constant specifically defines the maximum memory limit available
- * when in the administration back end. The default is 256M, or 256 megabytes of memory.
- *
- * @since 3.0.0
- *
- * @param string 'WP_MAX_MEMORY_LIMIT' The maximum WordPress memory limit. Default 256M.
- */
- @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
+ wp_raise_memory_limit( 'admin' );
}
/**
@@ -161,7 +147,7 @@ if ( current_user_can( 'manage_options' ) ) {
* Note, this does not just run on user-facing admin screens.
* It runs on admin-ajax.php and admin-post.php as well.
*
- * This is roughly analogous to the more general 'init' hook, which fires earlier.
+ * This is roughly analogous to the more general {@see 'init'} hook, which fires earlier.
*
* @since 2.5.0
*/
@@ -175,7 +161,7 @@ if ( isset($plugin_page) ) {
if ( ! $page_hook = get_plugin_page_hook($plugin_page, $the_parent) ) {
$page_hook = get_plugin_page_hook($plugin_page, $plugin_page);
- // Backwards compatibility for plugins using add_management_page().
+ // Back-compat for plugins using add_management_page().
if ( empty( $page_hook ) && 'edit.php' == $pagenow && '' != get_plugin_page_hook($plugin_page, 'tools.php') ) {
// There could be plugin specific params on the URL, so we need the whole query string
if ( !empty($_SERVER[ 'QUERY_STRING' ]) )
@@ -271,8 +257,9 @@ if ( isset($plugin_page) ) {
$importer = $_GET['import'];
- if ( ! current_user_can('import') )
- wp_die(__('You are not allowed to import.'));
+ if ( ! current_user_can( 'import' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to import content.' ) );
+ }
if ( validate_file($importer) ) {
wp_redirect( admin_url( 'import.php?invalid=' . $importer ) );
diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php
index 371a65d..4022b52 100644
--- a/wp-admin/async-upload.php
+++ b/wp-admin/async-upload.php
@@ -45,7 +45,7 @@ if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action']
}
if ( ! current_user_can( 'upload_files' ) ) {
- wp_die( __( 'You do not have permission to upload files.' ) );
+ wp_die( __( 'Sorry, you are not allowed to upload files.' ) );
}
// just fetch the detail form for that attachment
@@ -54,7 +54,7 @@ if ( isset($_REQUEST['attachment_id']) && ($id = intval($_REQUEST['attachment_id
if ( 'attachment' != $post->post_type )
wp_die( __( 'Unknown post type.' ) );
if ( ! current_user_can( 'edit_post', $id ) )
- wp_die( __( 'You are not allowed to edit this item.' ) );
+ wp_die( __( 'Sorry, you are not allowed to edit this item.' ) );
switch ( $_REQUEST['fetch'] ) {
case 3 :
@@ -105,7 +105,7 @@ if ( $_REQUEST['short'] ) {
$type = $_REQUEST['type'];
/**
- * Filter the returned ID of an uploaded attachment.
+ * Filters the returned ID of an uploaded attachment.
*
* The dynamic portion of the hook name, `$type`, refers to the attachment type,
* such as 'image', 'audio', 'video', 'file', etc.
diff --git a/wp-admin/comment.php b/wp-admin/comment.php
index ba700ba..aa2e054 100644
--- a/wp-admin/comment.php
+++ b/wp-admin/comment.php
@@ -61,7 +61,7 @@ case 'editcomment' :
comment_footer_die( __( 'Invalid comment ID.' ) . sprintf(' ' . __('Go back') . '.', 'javascript:history.go(-1)') );
if ( !current_user_can( 'edit_comment', $comment_id ) )
- comment_footer_die( __('You are not allowed to edit this comment.') );
+ comment_footer_die( __('Sorry, you are not allowed to edit this comment.') );
if ( 'trash' == $comment->comment_approved )
comment_footer_die( __('This comment is in the Trash. Please move it out of the Trash if you want to edit it.') );
@@ -197,7 +197,7 @@ if ( $comment->comment_approved != '0' ) { // if not unapproved
' . __('Go back') . '.', 'edit-comments.php') );
if ( !current_user_can( 'edit_comment', $comment->comment_ID ) )
- comment_footer_die( __('You are not allowed to edit comments on this post.') );
+ comment_footer_die( __('Sorry, you are not allowed to edit comments on this post.') );
if ( '' != wp_get_referer() && ! $noredir && false === strpos(wp_get_referer(), 'comment.php') )
$redir = wp_get_referer();
@@ -313,7 +313,7 @@ case 'editedcomment' :
$location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id;
/**
- * Filter the URI the user is redirected to after editing a comment in the admin.
+ * Filters the URI the user is redirected to after editing a comment in the admin.
*
* @since 2.1.0
*
diff --git a/wp-admin/credits.php b/wp-admin/credits.php
index 3b29c03..3f5afc9 100644
--- a/wp-admin/credits.php
+++ b/wp-admin/credits.php
@@ -20,7 +20,7 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
name, get_taxonomies( array( 'show_ui' => true ) ) ) ) {
- wp_die( __( 'You are not allowed to manage these items.' ) );
+ wp_die( __( 'Sorry, you are not allowed to manage these items.' ) );
}
if ( ! current_user_can( $tax->cap->manage_terms ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to manage these items.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to manage these items.' ) . '
',
403
);
}
@@ -71,7 +71,7 @@ case 'add-tag':
if ( ! current_user_can( $tax->cap->edit_terms ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to add this item.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to add this item.' ) . '
',
403
);
}
@@ -111,7 +111,7 @@ case 'delete':
if ( ! current_user_can( $tax->cap->delete_terms ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to delete this item.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to delete this item.' ) . '
',
403
);
}
@@ -128,7 +128,7 @@ case 'bulk-delete':
if ( ! current_user_can( $tax->cap->delete_terms ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to delete these items.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to delete these items.' ) . '
',
403
);
}
@@ -171,7 +171,7 @@ case 'editedtag':
if ( ! current_user_can( $tax->cap->edit_terms ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to edit this item.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to edit this item.' ) . '
- ' . __( 'Note:' ) . ' ';
- printf(
- /* translators: %s: default category */
- __( 'Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s.' ),
- /** This filter is documented in wp-includes/category-template.php */
- '' . apply_filters( 'the_category', get_cat_name( get_option( 'default_category') ) ) . ''
- );
- ?>
-
-
-
category to tag converter.' ), esc_url( $import_link ) ) ?>
-
-
-
-
-
tag to category converter.' ), esc_url( $import_link ) ) ;?>
+ ' . __( 'Note:' ) . ' ';
+ printf(
+ /* translators: %s: default category */
+ __( 'Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s.' ),
+ /** This filter is documented in wp-includes/category-template.php */
+ '' . apply_filters( 'the_category', get_cat_name( get_option( 'default_category') ) ) . ''
+ );
+ ?>
+
+
+
category to tag converter.' ), esc_url( $import_link ) ) ?>
+
+
+
+
+
tag to category converter.' ), esc_url( $import_link ) ) ;?>
+
+
+
+
+
+
diff --git a/wp-admin/edit.php b/wp-admin/edit.php
index 27d8f68..59cb4f1 100644
--- a/wp-admin/edit.php
+++ b/wp-admin/edit.php
@@ -10,10 +10,10 @@
require_once( dirname( __FILE__ ) . '/admin.php' );
if ( ! $typenow )
- wp_die( __( 'Invalid post type' ) );
+ wp_die( __( 'Invalid post type.' ) );
if ( ! in_array( $typenow, get_post_types( array( 'show_ui' => true ) ) ) ) {
- wp_die( __( 'You are not allowed to edit posts in this post type.' ) );
+ wp_die( __( 'Sorry, you are not allowed to edit posts in this post type.' ) );
}
if ( 'attachment' === $typenow ) {
@@ -23,8 +23,8 @@ if ( 'attachment' === $typenow ) {
}
/**
- * @global string $post_type
- * @global object $post_type_object
+ * @global string $post_type
+ * @global WP_Post_Type $post_type_object
*/
global $post_type, $post_type_object;
@@ -32,12 +32,12 @@ $post_type = $typenow;
$post_type_object = get_post_type_object( $post_type );
if ( ! $post_type_object )
- wp_die( __( 'Invalid post type' ) );
+ wp_die( __( 'Invalid post type.' ) );
if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to edit posts in this post type.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to edit posts in this post type.' ) . '
',
403
);
}
@@ -103,7 +103,7 @@ if ( $doaction ) {
foreach ( (array) $post_ids as $post_id ) {
if ( !current_user_can( 'delete_post', $post_id) )
- wp_die( __('You are not allowed to move this item to the Trash.') );
+ wp_die( __('Sorry, you are not allowed to move this item to the Trash.') );
if ( wp_check_post_lock( $post_id ) ) {
$locked++;
@@ -122,7 +122,7 @@ if ( $doaction ) {
$untrashed = 0;
foreach ( (array) $post_ids as $post_id ) {
if ( !current_user_can( 'delete_post', $post_id) )
- wp_die( __('You are not allowed to restore this item from the Trash.') );
+ wp_die( __('Sorry, you are not allowed to restore this item from the Trash.') );
if ( !wp_untrash_post($post_id) )
wp_die( __('Error in restoring from Trash.') );
@@ -137,7 +137,7 @@ if ( $doaction ) {
$post_del = get_post($post_id);
if ( !current_user_can( 'delete_post', $post_id ) )
- wp_die( __('You are not allowed to delete this item.') );
+ wp_die( __('Sorry, you are not allowed to delete this item.') );
if ( $post_del->post_type == 'attachment' ) {
if ( ! wp_delete_attachment($post_id) )
@@ -194,7 +194,7 @@ if ( 'post' == $post_type ) {
'
' . __('You can customize the display of this screen’s contents in a number of ways:') . '
' .
'
' .
'
' . __('You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab.') . '
' .
- '
' . __('You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts.') . '
' .
+ '
' . __( 'You can filter the list of posts by post status using the text links above the posts list to only show posts with that status. The default view is to show all posts.' ) . '
' .
'
' . __('You can view posts in a simple title list or with an excerpt using the Screen Options tab.') . '
' .
'
' . __('You can refine the list to show only posts in a specific category or from a specific month by using the dropdown menus above the posts list. Click the Filter button after making your selection. You also can refine the list by clicking on the post author, category or tag in the posts list.') . '
' .
'
'
@@ -283,7 +283,7 @@ $bulk_messages['page'] = array(
);
/**
- * Filter the bulk action updated messages.
+ * Filters the bulk action updated messages.
*
* By default, custom post types use the messages for the 'post' post type.
*
diff --git a/wp-admin/export.php b/wp-admin/export.php
index 5ce4e34..ebf5a91 100644
--- a/wp-admin/export.php
+++ b/wp-admin/export.php
@@ -10,7 +10,7 @@
require_once( dirname( __FILE__ ) . '/admin.php' );
if ( !current_user_can('export') )
- wp_die(__('You do not have sufficient permissions to export the content of this site.'));
+ wp_die(__('Sorry, you are not allowed to export the content of this site.'));
/** Load WordPress export API */
require_once( ABSPATH . 'wp-admin/includes/export.php' );
@@ -103,7 +103,7 @@ if ( isset( $_GET['download'] ) ) {
}
/**
- * Filter the export args.
+ * Filters the export args.
*
* @since 3.5.0
*
diff --git a/wp-admin/freedoms.php b/wp-admin/freedoms.php
index 440f085..b47465d 100644
--- a/wp-admin/freedoms.php
+++ b/wp-admin/freedoms.php
@@ -19,7 +19,7 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
-
+
@@ -47,7 +47,7 @@ $themes_url = current_user_can( 'switch_themes' ) ? admin_url( 'themes.php' ) :
printf( __( 'Every plugin and theme in WordPress.org’s directory is 100%% GPL or a similarly free and compatible license, so you can feel safe finding plugins and themes there. If you get a plugin or theme from another source, make sure to ask them if it’s GPL first. If they don’t respect the WordPress license, we don’t recommend them.' ), $plugins_url, $themes_url, 'https://wordpress.org/about/license/' ); ?>
-
Free Software Foundation.' ); ?>
+
Free Software Foundation.' ); ?>
diff --git a/wp-admin/images/browser-rtl.png b/wp-admin/images/browser-rtl.png
new file mode 100644
index 0000000..a4d3695
Binary files /dev/null and b/wp-admin/images/browser-rtl.png differ
diff --git a/wp-admin/import.php b/wp-admin/import.php
index a1ce80e..5183766 100644
--- a/wp-admin/import.php
+++ b/wp-admin/import.php
@@ -11,8 +11,9 @@ define('WP_LOAD_IMPORTERS', true);
/** Load WordPress Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
-if ( !current_user_can('import') )
- wp_die(__('You do not have sufficient permissions to import content in this site.'));
+if ( ! current_user_can( 'import' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to import content.' ) );
+}
$title = __('Import');
@@ -29,10 +30,12 @@ get_current_screen()->set_help_sidebar(
'
get_views();
/**
- * Filter the list of available list table views.
+ * Filters the list of available list table views.
*
* The dynamic portion of the hook name, `$this->screen->id`, refers
* to the ID of the current screen, usually a string.
@@ -432,13 +432,13 @@ class WP_List_Table {
* @access protected
*
* @param string $which The location of the bulk actions: 'top' or 'bottom'.
- * This is designated as optional for backwards-compatibility.
+ * This is designated as optional for backward compatibility.
*/
protected function bulk_actions( $which = '' ) {
if ( is_null( $this->_actions ) ) {
$no_new_actions = $this->_actions = $this->get_bulk_actions();
/**
- * Filter the list table Bulk Actions drop-down.
+ * Filters the list table Bulk Actions drop-down.
*
* The dynamic portion of the hook name, `$this->screen->id`, refers
* to the ID of the current screen, usually a string.
@@ -541,7 +541,7 @@ class WP_List_Table {
global $wpdb, $wp_locale;
/**
- * Filter whether to remove the 'Months' drop-down from the post list table.
+ * Filters whether to remove the 'Months' drop-down from the post list table.
*
* @since 4.2.0
*
@@ -568,7 +568,7 @@ class WP_List_Table {
", $post_type ) );
/**
- * Filter the 'Months' drop-down results.
+ * Filters the 'Months' drop-down results.
*
* @since 3.7.0
*
@@ -721,7 +721,7 @@ class WP_List_Table {
$per_page = $default;
/**
- * Filter the number of items to be displayed on each page of the list table.
+ * Filters the number of items to be displayed on each page of the list table.
*
* The dynamic hook name, $option, refers to the `per_page` option depending
* on the type of list table in use. Possible values include: 'edit_comments_per_page',
@@ -763,15 +763,16 @@ class WP_List_Table {
$output = '' . sprintf( _n( '%s item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '';
$current = $this->get_pagenum();
+ $removable_query_args = wp_removable_query_args();
$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
- $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
+ $current_url = remove_query_arg( $removable_query_args, $current_url );
$page_links = array();
$total_pages_before = '';
- $total_pages_after = '';
+ $total_pages_after = '';
$disable_first = $disable_last = $disable_prev = $disable_next = false;
@@ -812,9 +813,9 @@ class WP_List_Table {
if ( 'bottom' === $which ) {
$html_current_page = $current;
- $total_pages_before = '' . __( 'Current Page' ) . '';
+ $total_pages_before = '' . __( 'Current Page' ) . '';
} else {
- $html_current_page = sprintf( "%s",
+ $html_current_page = sprintf( "%s",
'',
$current,
strlen( $total_pages )
@@ -951,7 +952,7 @@ class WP_List_Table {
}
/**
- * Filter the name of the primary column for the current list table.
+ * Filters the name of the primary column for the current list table.
*
* @since 4.3.0
*
@@ -993,7 +994,7 @@ class WP_List_Table {
$sortable_columns = $this->get_sortable_columns();
/**
- * Filter the list table sortable columns for a specific screen.
+ * Filters the list table sortable columns for a specific screen.
*
* The dynamic portion of the hook name, `$this->screen->id`, refers
* to the ID of the current screen, usually a string.
diff --git a/wp-admin/includes/class-wp-media-list-table.php b/wp-admin/includes/class-wp-media-list-table.php
index 98deaac..170ec5a 100644
--- a/wp-admin/includes/class-wp-media-list-table.php
+++ b/wp-admin/includes/class-wp-media-list-table.php
@@ -282,7 +282,7 @@ class WP_Media_List_Table extends WP_List_Table {
$taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' );
/**
- * Filter the taxonomy columns for attachments in the Media list table.
+ * Filters the taxonomy columns for attachments in the Media list table.
*
* @since 3.5.0
*
@@ -312,7 +312,7 @@ class WP_Media_List_Table extends WP_List_Table {
/* translators: column name */
$posts_columns['date'] = _x( 'Date', 'column name' );
/**
- * Filter the Media list table columns.
+ * Filters the Media list table columns.
*
* @since 2.5.0
*
@@ -395,7 +395,7 @@ class WP_Media_List_Table extends WP_List_Table {
ID );
- echo wp_basename( $file );
+ echo esc_html( wp_basename( $file ) );
?>
post_parent );
$parent_type = get_post_type_object( $parent->post_type );
+
+ if ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) {
?>
-
- show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { ?>
-
-
+ post_parent ) ) {
+?>
+
-
- $post->post_parent,
@@ -493,7 +495,7 @@ class WP_Media_List_Table extends WP_List_Table {
'_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] )
), 'upload.php' );
printf(
- '%s',
+ ' %s',
$detach_url,
/* translators: %s: title of the post the attachment is attached to */
esc_attr( sprintf( __( 'Detach from “%s”' ), $title ) ),
@@ -501,11 +503,11 @@ class WP_Media_List_Table extends WP_List_Table {
);
endif;
} else {
- _e( '(Unattached)' ); ?>
+ _e( '(Unattached)' ); ?>
post_parent );
printf(
- '%s',
+ ' %s',
$post->ID,
/* translators: %s: attachment title */
esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $title ) ),
@@ -657,7 +659,7 @@ class WP_Media_List_Table extends WP_List_Table {
if ( current_user_can( 'delete_post', $post->ID ) ) {
if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
$actions['trash'] = sprintf(
- '%s',
+ '%s',
wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ),
/* translators: %s: attachment title */
esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ),
@@ -666,7 +668,7 @@ class WP_Media_List_Table extends WP_List_Table {
} else {
$delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
$actions['delete'] = sprintf(
- '%s',
+ '%s',
wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ),
$delete_ays,
/* translators: %s: attachment title */
@@ -685,7 +687,7 @@ class WP_Media_List_Table extends WP_List_Table {
if ( current_user_can( 'edit_post', $post->ID ) ) {
$actions['attach'] = sprintf(
- '%s',
+ '%s',
$post->ID,
/* translators: %s: attachment title */
esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $att_title ) ),
@@ -706,7 +708,7 @@ class WP_Media_List_Table extends WP_List_Table {
if ( current_user_can( 'delete_post', $post->ID ) ) {
if ( $this->is_trash ) {
$actions['untrash'] = sprintf(
- '%s',
+ '%s',
wp_nonce_url( "post.php?action=untrash&post=$post->ID", 'untrash-post_' . $post->ID ),
/* translators: %s: attachment title */
esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $att_title ) ),
@@ -714,7 +716,7 @@ class WP_Media_List_Table extends WP_List_Table {
);
} elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
$actions['trash'] = sprintf(
- '%s',
+ '%s',
wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ),
/* translators: %s: attachment title */
esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ),
@@ -724,7 +726,7 @@ class WP_Media_List_Table extends WP_List_Table {
if ( $this->is_trash || ! EMPTY_TRASH_DAYS || ! MEDIA_TRASH ) {
$delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : '';
$actions['delete'] = sprintf(
- '%s',
+ '%s',
wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ),
$delete_ays,
/* translators: %s: attachment title */
@@ -745,7 +747,7 @@ class WP_Media_List_Table extends WP_List_Table {
}
/**
- * Filter the action links for each attachment in the Media list table.
+ * Filters the action links for each attachment in the Media list table.
*
* @since 2.8.0
*
diff --git a/wp-admin/includes/class-wp-ms-sites-list-table.php b/wp-admin/includes/class-wp-ms-sites-list-table.php
index 9dd1d38..9ce3ffe 100644
--- a/wp-admin/includes/class-wp-ms-sites-list-table.php
+++ b/wp-admin/includes/class-wp-ms-sites-list-table.php
@@ -59,6 +59,9 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
}
/**
+ * Prepares the list of sites for display.
+ *
+ * @since 3.1.0
*
* @global string $s
* @global string $mode
@@ -67,8 +70,6 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
public function prepare_items() {
global $s, $mode, $wpdb;
- $current_site = get_current_site();
-
if ( ! empty( $_REQUEST['mode'] ) ) {
$mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list';
set_user_setting( 'sites_list_mode', $mode );
@@ -83,7 +84,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
$s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST[ 's' ] ) ) : '';
$wild = '';
if ( false !== strpos($s, '*') ) {
- $wild = '%';
+ $wild = '*';
$s = trim($s, '*');
}
@@ -98,7 +99,11 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
$_GET['order'] = $_REQUEST['order'] = 'DESC';
}
- $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ";
+ $args = array(
+ 'number' => intval( $per_page ),
+ 'offset' => intval( ( $pagenum - 1 ) * $per_page ),
+ 'network_id' => get_current_network_id(),
+ );
if ( empty($s) ) {
// Nothing to do.
@@ -107,67 +112,75 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) ||
preg_match( '/^[0-9]{1,3}\.$/', $s ) ) {
// IPv4 address
- $sql = $wpdb->prepare( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s", $wpdb->esc_like( $s ) . $wild );
+ $sql = $wpdb->prepare( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s", $wpdb->esc_like( $s ) . ( ! empty( $wild ) ? '%' : '' ) );
$reg_blog_ids = $wpdb->get_col( $sql );
- if ( !$reg_blog_ids )
- $reg_blog_ids = array( 0 );
-
- $query = "SELECT *
- FROM {$wpdb->blogs}
- WHERE site_id = '{$wpdb->siteid}'
- AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")";
+ if ( $reg_blog_ids ) {
+ $args['site__in'] = $reg_blog_ids;
+ }
+ } elseif ( is_numeric( $s ) && empty( $wild ) ) {
+ $args['ID'] = $s;
} else {
- if ( is_numeric($s) && empty( $wild ) ) {
- $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.blog_id = %s )", $s );
- } elseif ( is_subdomain_install() ) {
- $blog_s = str_replace( '.' . $current_site->domain, '', $s );
- $blog_s = $wpdb->esc_like( $blog_s ) . $wild . $wpdb->esc_like( '.' . $current_site->domain );
- $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.domain LIKE %s ) ", $blog_s );
- } else {
- if ( $s != trim('/', $current_site->path) ) {
- $blog_s = $wpdb->esc_like( $current_site->path . $s ) . $wild . $wpdb->esc_like( '/' );
- } else {
- $blog_s = $wpdb->esc_like( $s );
- }
- $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.path LIKE %s )", $blog_s );
+ $args['search'] = $s;
+
+ if ( ! is_subdomain_install() ) {
+ $args['search_columns'] = array( 'path' );
}
}
$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : '';
- if ( $order_by === 'registered' ) {
- $query .= ' ORDER BY registered ';
- } elseif ( $order_by === 'lastupdated' ) {
- $query .= ' ORDER BY last_updated ';
- } elseif ( $order_by === 'blogname' ) {
+ if ( 'registered' === $order_by ) {
+ // registered is a valid field name.
+ } elseif ( 'lastupdated' === $order_by ) {
+ $order_by = 'last_updated';
+ } elseif ( 'blogname' === $order_by ) {
if ( is_subdomain_install() ) {
- $query .= ' ORDER BY domain ';
+ $order_by = 'domain';
} else {
- $query .= ' ORDER BY path ';
+ $order_by = 'path';
}
- } elseif ( $order_by === 'blog_id' ) {
- $query .= ' ORDER BY blog_id ';
+ } elseif ( 'blog_id' === $order_by ) {
+ $order_by = 'id';
+ } elseif ( ! $order_by ) {
+ $order_by = false;
+ }
+
+ $args['orderby'] = $order_by;
+
+ if ( $order_by ) {
+ $args['order'] = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC";
+ }
+
+ if ( wp_is_large_network() ) {
+ $args['no_found_rows'] = true;
} else {
- $order_by = null;
+ $args['no_found_rows'] = false;
}
- if ( isset( $order_by ) ) {
- $order = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC";
- $query .= $order;
+ /**
+ * Filters the arguments for the site query in the sites list table.
+ *
+ * @since 4.6.0
+ *
+ * @param array $args An array of get_sites() arguments.
+ */
+ $args = apply_filters( 'ms_sites_list_table_query_args', $args );
+
+ $_sites = get_sites( $args );
+ if ( is_array( $_sites ) ) {
+ update_site_cache( $_sites );
+
+ $this->items = array_slice( $_sites, 0, $per_page );
}
- // Don't do an unbounded count on large networks
- if ( ! wp_is_large_network() )
- $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) );
-
- $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page );
- $this->items = $wpdb->get_results( $query, ARRAY_A );
-
- if ( wp_is_large_network() )
- $total = count($this->items);
+ $total_sites = get_sites( array_merge( $args, array(
+ 'count' => true,
+ 'offset' => 0,
+ 'number' => 0,
+ ) ) );
$this->set_pagination_args( array(
- 'total_items' => $total,
+ 'total_items' => $total_sites,
'per_page' => $per_page,
) );
}
@@ -224,7 +237,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
}
/**
- * Filter the displayed site columns in Sites list table.
+ * Filters the displayed site columns in Sites list table.
*
* @since MU
*
@@ -445,6 +458,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
*/
public function display_rows() {
foreach ( $this->items as $blog ) {
+ $blog = $blog->to_array();
$class = '';
reset( $this->status_list );
@@ -531,7 +545,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
$actions['visit'] = "" . __( 'Visit' ) . '';
/**
- * Filter the action links displayed for each site in the Sites list table.
+ * Filters the action links displayed for each site in the Sites list table.
*
* The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by
* default for each site. The site's status determines whether to show the
diff --git a/wp-admin/includes/class-wp-ms-themes-list-table.php b/wp-admin/includes/class-wp-ms-themes-list-table.php
index 825c047..d35956c 100644
--- a/wp-admin/includes/class-wp-ms-themes-list-table.php
+++ b/wp-admin/includes/class-wp-ms-themes-list-table.php
@@ -91,7 +91,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
$themes = array(
/**
- * Filter the full array of WP_Theme objects to list in the Multisite
+ * Filters the full array of WP_Theme objects to list in the Multisite
* themes list table.
*
* @since 3.1.0
@@ -149,6 +149,10 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
$this->has_items = ! empty( $themes['all'] );
$total_this_page = $totals[ $status ];
+ wp_localize_script( 'updates', '_wpUpdatesItemCounts', array(
+ 'totals' => $totals,
+ ) );
+
if ( $orderby ) {
$orderby = ucfirst( $orderby );
$order = strtoupper( $order );
@@ -468,7 +472,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
), 'themes.php' );
/* translators: %s: theme name */
- $aria_label = sprintf( __( 'Delete %s' ), $theme->display( 'Name' ) );
+ $aria_label = sprintf( _x( 'Delete %s', 'theme' ), $theme->display( 'Name' ) );
$actions['delete'] = sprintf( '%s',
esc_url( wp_nonce_url( $url, 'bulk-themes' ) ),
@@ -477,7 +481,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
);
}
/**
- * Filter the action links displayed for each theme in the Multisite
+ * Filters the action links displayed for each theme in the Multisite
* themes list table.
*
* The action links displayed are determined by the theme's status, and
@@ -501,7 +505,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
$actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme, $context );
/**
- * Filter the action links of a specific theme in the Multisite themes
+ * Filters the action links of a specific theme in the Multisite themes
* list table.
*
* The dynamic portion of the hook name, `$stylesheet`, refers to the
@@ -569,7 +573,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
);
}
/**
- * Filter the array of row meta for each theme in the Multisite themes
+ * Filters the array of row meta for each theme in the Multisite themes
* list table.
*
* @since 3.1.0
diff --git a/wp-admin/includes/class-wp-ms-users-list-table.php b/wp-admin/includes/class-wp-ms-users-list-table.php
index 380e4a0..da00131 100644
--- a/wp-admin/includes/class-wp-ms-users-list-table.php
+++ b/wp-admin/includes/class-wp-ms-users-list-table.php
@@ -172,7 +172,7 @@ class WP_MS_Users_List_Table extends WP_List_Table {
'blogs' => __( 'Sites' )
);
/**
- * Filter the columns displayed in the Network Admin Users list table.
+ * Filters the columns displayed in the Network Admin Users list table.
*
* @since MU
*
@@ -351,7 +351,7 @@ class WP_MS_Users_List_Table extends WP_List_Table {
$actions['view'] = '' . __( 'View' ) . '';
/**
- * Filter the action links displayed next the sites a user belongs to
+ * Filters the action links displayed next the sites a user belongs to
* in the Network Admin Users list table.
*
* @since 3.1.0
@@ -446,7 +446,7 @@ class WP_MS_Users_List_Table extends WP_List_Table {
}
/**
- * Filter the action links displayed under each user in the Network Admin Users list table.
+ * Filters the action links displayed under each user in the Network Admin Users list table.
*
* @since 3.2.0
*
diff --git a/wp-admin/includes/class-wp-plugin-install-list-table.php b/wp-admin/includes/class-wp-plugin-install-list-table.php
index 26c8a0a..6e389b1 100644
--- a/wp-admin/includes/class-wp-plugin-install-list-table.php
+++ b/wp-admin/includes/class-wp-plugin-install-list-table.php
@@ -104,7 +104,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
$nonmenu_tabs = array( 'plugin-information' ); // Valid actions to perform which do not have a Menu item.
/**
- * Filter the tabs shown on the Plugin Install screen.
+ * Filters the tabs shown on the Plugin Install screen.
*
* @since 2.7.0
*
@@ -114,7 +114,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
$tabs = apply_filters( 'install_plugins_tabs', $tabs );
/**
- * Filter tabs not associated with a menu item on the Plugin Install screen.
+ * Filters tabs not associated with a menu item on the Plugin Install screen.
*
* @since 2.7.0
*
@@ -191,7 +191,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
}
/**
- * Filter API request arguments for each Plugin Install screen tab.
+ * Filters API request arguments for each Plugin Install screen tab.
*
* The dynamic portion of the hook name, `$tab`, refers to the plugin install tabs.
* Default tabs include 'featured', 'popular', 'recommended', 'favorites', and 'upload'.
@@ -285,7 +285,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
?>
-
+
' . __( 'Install Now' ) . '';
}
-
break;
+
case 'update_available':
if ( $status['url'] ) {
/* translators: 1: Plugin name and version */
$action_links[] = '' . __( 'Update Now' ) . '';
}
-
break;
+
case 'latest_installed':
case 'newer_installed':
- $action_links[] = '' . _x( 'Installed', 'plugin' ) . '';
+ if ( is_plugin_active( $status['file'] ) ) {
+ $action_links[] = '';
+ } elseif ( current_user_can( 'activate_plugins' ) ) {
+ $button_text = __( 'Activate' );
+ /* translators: %s: Plugin name */
+ $button_label = _x( 'Activate %s', 'plugin' );
+ $activate_url = add_query_arg( array(
+ '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),
+ 'action' => 'activate',
+ 'plugin' => $status['file'],
+ ), network_admin_url( 'plugins.php' ) );
+
+ if ( is_network_admin() ) {
+ $button_text = __( 'Network Activate' );
+ /* translators: %s: Plugin name */
+ $button_label = _x( 'Network Activate %s', 'plugin' );
+ $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );
+ }
+
+ $action_links[] = sprintf(
+ '%3$s',
+ esc_url( $activate_url ),
+ esc_attr( sprintf( $button_label, $plugin['name'] ) ),
+ $button_text
+ );
+ } else {
+ $action_links[] = '';
+ }
break;
}
}
@@ -494,7 +521,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
}
/**
- * Filter the install action links for a plugin.
+ * Filters the install action links for a plugin.
*
* @since 2.7.0
*
diff --git a/wp-admin/includes/class-wp-plugins-list-table.php b/wp-admin/includes/class-wp-plugins-list-table.php
index f49d1c8..4204cf9 100644
--- a/wp-admin/includes/class-wp-plugins-list-table.php
+++ b/wp-admin/includes/class-wp-plugins-list-table.php
@@ -104,7 +104,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
if ( ! is_multisite() || ( $screen->in_admin( 'network' ) && current_user_can( 'manage_network_plugins' ) ) ) {
/**
- * Filter whether to display the advanced plugins list table.
+ * Filters whether to display the advanced plugins list table.
*
* There are two types of advanced plugins - must-use and drop-ins -
* which can be used in a single site or Multisite network.
@@ -140,7 +140,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
if ( ! $screen->in_admin( 'network' ) ) {
$show = current_user_can( 'manage_network_plugins' );
/**
- * Filter whether to display network-active plugins alongside plugins active for the current site.
+ * Filters whether to display network-active plugins alongside plugins active for the current site.
*
* This also controls the display of inactive network-only plugins (plugins with
* "Network: true" in the plugin header).
@@ -246,6 +246,15 @@ class WP_Plugins_List_Table extends WP_List_Table {
$total_this_page = $totals[ $status ];
+ $js_plugins = array();
+ foreach ( $plugins as $key => $list ) {
+ $js_plugins[ $key ] = array_keys( (array) $list );
+ }
+
+ wp_localize_script( 'updates', '_wpUpdatesItemCounts', array(
+ 'plugins' => $js_plugins,
+ ) );
+
if ( ! $orderby ) {
$orderby = 'Name';
} else {
@@ -332,6 +341,37 @@ class WP_Plugins_List_Table extends WP_List_Table {
_e( 'You do not appear to have any plugins available at this time.' );
}
+ /**
+ * Displays the search box.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $text The 'submit' button label.
+ * @param string $input_id ID attribute value for the search input field.
+ */
+ public function search_box( $text, $input_id ) {
+ if ( empty( $_REQUEST['s'] ) && ! $this->has_items() ) {
+ return;
+ }
+
+ $input_id = $input_id . '-search-input';
+
+ if ( ! empty( $_REQUEST['orderby'] ) ) {
+ echo '';
+ }
+ if ( ! empty( $_REQUEST['order'] ) ) {
+ echo '';
+ }
+ ?>
+
+
+
+ 'search-submit' ) ); ?>
+
+ ' . __( 'Network Deactivate' ) . '';
+ $actions['deactivate'] = '' . __( 'Network Deactivate' ) . '';
}
} else {
if ( current_user_can( 'manage_network_plugins' ) ) {
/* translators: %s: plugin name */
- $actions['activate'] = '' . __( 'Network Activate' ) . '';
+ $actions['activate'] = '' . __( 'Network Activate' ) . '';
}
if ( current_user_can( 'delete_plugins' ) && ! is_plugin_active( $plugin_file ) ) {
/* translators: %s: plugin name */
- $actions['delete'] = '' . __( 'Delete' ) . '';
+ $actions['delete'] = '' . __( 'Delete' ) . '';
}
}
} else {
@@ -583,14 +623,14 @@ class WP_Plugins_List_Table extends WP_List_Table {
);
} elseif ( $is_active ) {
/* translators: %s: plugin name */
- $actions['deactivate'] = '' . __( 'Deactivate' ) . '';
+ $actions['deactivate'] = '' . __( 'Deactivate' ) . '';
} else {
/* translators: %s: plugin name */
- $actions['activate'] = '' . __( 'Activate' ) . '';
+ $actions['activate'] = '' . __( 'Activate' ) . '';
if ( ! is_multisite() && current_user_can( 'delete_plugins' ) ) {
/* translators: %s: plugin name */
- $actions['delete'] = '' . __( 'Delete' ) . '';
+ $actions['delete'] = '' . __( 'Delete' ) . '';
}
} // end if $is_active
@@ -607,7 +647,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
if ( $screen->in_admin( 'network' ) ) {
/**
- * Filter the action links displayed for each plugin in the Network Admin Plugins list table.
+ * Filters the action links displayed for each plugin in the Network Admin Plugins list table.
*
* The default action links for the Network plugins list table include
* 'Network Activate', 'Network Deactivate', 'Edit', and 'Delete'.
@@ -625,7 +665,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
$actions = apply_filters( 'network_admin_plugin_action_links', $actions, $plugin_file, $plugin_data, $context );
/**
- * Filter the list of action links displayed for a specific plugin in the Network Admin Plugins list table.
+ * Filters the list of action links displayed for a specific plugin in the Network Admin Plugins list table.
*
* The dynamic portion of the hook name, $plugin_file, refers to the path
* to the plugin file, relative to the plugins directory.
@@ -645,7 +685,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
} else {
/**
- * Filter the action links displayed for each plugin in the Plugins list table.
+ * Filters the action links displayed for each plugin in the Plugins list table.
*
* The default action links for the site plugins list table include
* 'Activate', 'Deactivate', and 'Edit', for a network site, and
@@ -664,7 +704,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
$actions = apply_filters( 'plugin_action_links', $actions, $plugin_file, $plugin_data, $context );
/**
- * Filter the list of action links displayed for a specific plugin in the Plugins list table.
+ * Filters the list of action links displayed for a specific plugin in the Plugins list table.
*
* The dynamic portion of the hook name, $plugin_file, refers to the path
* to the plugin file, relative to the plugins directory.
@@ -757,7 +797,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
}
/**
- * Filter the array of row meta for each plugin in the Plugins list table.
+ * Filters the array of row meta for each plugin in the Plugins list table.
*
* @since 2.8.0
*
@@ -776,7 +816,7 @@ class WP_Plugins_List_Table extends WP_List_Table {
echo "";
break;
default:
- $classes = "$column_name column-$column_name$class";
+ $classes = "$column_name column-$column_name $class";
echo "
";
diff --git a/wp-admin/includes/class-wp-posts-list-table.php b/wp-admin/includes/class-wp-posts-list-table.php
index 33eca44..7ef790e 100644
--- a/wp-admin/includes/class-wp-posts-list-table.php
+++ b/wp-admin/includes/class-wp-posts-list-table.php
@@ -72,8 +72,8 @@ class WP_Posts_List_Table extends WP_List_Table {
*
* @see WP_List_Table::__construct() for more information on default arguments.
*
- * @global object $post_type_object
- * @global wpdb $wpdb
+ * @global WP_Post_Type $post_type_object
+ * @global wpdb $wpdb
*
* @param array $args An associative array of arguments.
*/
@@ -412,31 +412,56 @@ class WP_Posts_List_Table extends WP_List_Table {
}
/**
- * @global int $cat
+ * Displays a categories drop-down for filtering on the Posts list table.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global int $cat Currently selected category.
+ *
+ * @param string $post_type Post type slug.
+ */
+ protected function categories_dropdown( $post_type ) {
+ global $cat;
+
+ /**
+ * Filters whether to remove the 'Categories' drop-down from the post list table.
+ *
+ * @since 4.6.0
+ *
+ * @param bool $disable Whether to disable the categories drop-down. Default false.
+ * @param string $post_type Post type slug.
+ */
+ if ( false !== apply_filters( 'disable_categories_dropdown', false, $post_type ) ) {
+ return;
+ }
+
+ if ( is_object_in_taxonomy( $post_type, 'category' ) ) {
+ $dropdown_options = array(
+ 'show_option_all' => get_taxonomy( 'category' )->labels->all_items,
+ 'hide_empty' => 0,
+ 'hierarchical' => 1,
+ 'show_count' => 0,
+ 'orderby' => 'name',
+ 'selected' => $cat
+ );
+
+ echo '';
+ wp_dropdown_categories( $dropdown_options );
+ }
+ }
+
+ /**
* @param string $which
*/
protected function extra_tablenav( $which ) {
- global $cat;
?>
months_dropdown( $this->screen->post_type );
-
- if ( is_object_in_taxonomy( $this->screen->post_type, 'category' ) ) {
- $dropdown_options = array(
- 'show_option_all' => get_taxonomy( 'category' )->labels->all_items,
- 'hide_empty' => 0,
- 'hierarchical' => 1,
- 'show_count' => 0,
- 'orderby' => 'name',
- 'selected' => $cat
- );
-
- echo '';
- wp_dropdown_categories( $dropdown_options );
- }
+ $this->categories_dropdown( $this->screen->post_type );
/**
* Fires before the Filter button on the Posts and Pages list tables.
@@ -446,10 +471,13 @@ class WP_Posts_List_Table extends WP_List_Table {
*
* @since 2.1.0
* @since 4.4.0 The `$post_type` parameter was added.
+ * @since 4.6.0 The `$which` parameter was added.
*
* @param string $post_type The post type slug.
+ * @param string $which The location of the extra table nav markup:
+ * 'top' or 'bottom'.
*/
- do_action( 'restrict_manage_posts', $this->screen->post_type );
+ do_action( 'restrict_manage_posts', $this->screen->post_type, $which );
submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
}
@@ -512,7 +540,7 @@ class WP_Posts_List_Table extends WP_List_Table {
$taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' );
/**
- * Filter the taxonomy columns in the Posts list table.
+ * Filters the taxonomy columns in the Posts list table.
*
* The dynamic portion of the hook name, `$post_type`, refers to the post
* type slug.
@@ -545,7 +573,7 @@ class WP_Posts_List_Table extends WP_List_Table {
if ( 'page' === $post_type ) {
/**
- * Filter the columns displayed in the Pages list table.
+ * Filters the columns displayed in the Pages list table.
*
* @since 2.5.0
*
@@ -555,7 +583,7 @@ class WP_Posts_List_Table extends WP_List_Table {
} else {
/**
- * Filter the columns displayed in the Posts list table.
+ * Filters the columns displayed in the Posts list table.
*
* @since 1.5.0
*
@@ -566,7 +594,7 @@ class WP_Posts_List_Table extends WP_List_Table {
}
/**
- * Filter the columns displayed in the Posts list table for a specific post type.
+ * Filters the columns displayed in the Posts list table for a specific post type.
*
* The dynamic portion of the hook name, `$post_type`, refers to the post type slug.
*
@@ -961,7 +989,7 @@ class WP_Posts_List_Table extends WP_List_Table {
echo ' ';
if ( 'excerpt' === $mode ) {
/**
- * Filter the published time of the post.
+ * Filters the published time of the post.
*
* If `$mode` equals 'excerpt', the published time and date are both displayed.
* If `$mode` equals 'list' (default), the publish date is displayed, with the
@@ -1248,7 +1276,7 @@ class WP_Posts_List_Table extends WP_List_Table {
if ( is_post_type_hierarchical( $post->post_type ) ) {
/**
- * Filter the array of row action links on the Pages list table.
+ * Filters the array of row action links on the Pages list table.
*
* The filter is evaluated only for hierarchical post types.
*
@@ -1263,7 +1291,7 @@ class WP_Posts_List_Table extends WP_List_Table {
} else {
/**
- * Filter the array of row action links on the Posts list table.
+ * Filters the array of row action links on the Posts list table.
*
* The filter is evaluated only for non-hierarchical post types.
*
@@ -1305,7 +1333,7 @@ class WP_Posts_List_Table extends WP_List_Table {
$show_in_quick_edit = $taxonomy->show_in_quick_edit;
/**
- * Filter whether the current taxonomy should be shown in the Quick Edit panel.
+ * Filters whether the current taxonomy should be shown in the Quick Edit panel.
*
* @since 4.2.0
*
@@ -1470,7 +1498,7 @@ class WP_Posts_List_Table extends WP_List_Table {
$dropdown_args['show_option_no_change'] = __( '— No Change —' );
/**
- * Filter the arguments used to generate the Quick Edit page-parent drop-down.
+ * Filters the arguments used to generate the Quick Edit page-parent drop-down.
*
* @since 2.7.0
*
diff --git a/wp-admin/includes/class-wp-press-this.php b/wp-admin/includes/class-wp-press-this.php
index 0288ed0..a00bbaa 100644
--- a/wp-admin/includes/class-wp-press-this.php
+++ b/wp-admin/includes/class-wp-press-this.php
@@ -42,7 +42,7 @@ class WP_Press_This {
public function site_settings() {
return array(
/**
- * Filter whether or not Press This should redirect the user in the parent window upon save.
+ * Filters whether or not Press This should redirect the user in the parent window upon save.
*
* @since 4.2.0
*
@@ -96,7 +96,7 @@ class WP_Press_This {
}
/**
- * AJAX handler for saving the post as draft or published.
+ * Ajax handler for saving the post as draft or published.
*
* @since 4.2.0
* @access public
@@ -134,8 +134,9 @@ class WP_Press_This {
$post_data['post_content'] = $this->side_load_images( $post_id, $post_data['post_content'] );
/**
- * Filter the post data of a Press This post before saving/updating, after
- * side_load_images action had run.
+ * Filters the post data of a Press This post before saving/updating.
+ *
+ * The {@see 'side_load_images'} action has already run at this point.
*
* @since 4.5.0
*
@@ -168,7 +169,7 @@ class WP_Press_This {
}
/**
- * Filter the URL to redirect to when Press This saves.
+ * Filters the URL to redirect to when Press This saves.
*
* @since 4.2.0
*
@@ -188,7 +189,7 @@ class WP_Press_This {
}
/**
- * AJAX handler for adding a new category.
+ * Ajax handler for adding a new category.
*
* @since 4.2.0
* @access public
@@ -690,7 +691,7 @@ class WP_Press_This {
}
/**
- * Filter whether to enable in-source media discovery in Press This.
+ * Filters whether to enable in-source media discovery in Press This.
*
* @since 4.2.0
*
@@ -765,7 +766,7 @@ class WP_Press_This {
}
/**
- * Filter the Press This data array.
+ * Filters the Press This data array.
*
* @since 4.2.0
*
@@ -793,36 +794,7 @@ class WP_Press_This {
$press_this = str_replace( '.css', '-rtl.css', $press_this );
}
- $open_sans_font_url = '';
-
- /* translators: If there are characters in your language that are not supported
- * by Open Sans, translate this to 'off'. Do not translate into your own language.
- */
- if ( 'off' !== _x( 'on', 'Open Sans font: on or off' ) ) {
- $subsets = 'latin,latin-ext';
-
- /* translators: To add an additional Open Sans character subset specific to your language,
- * translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language.
- */
- $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)' );
-
- if ( 'cyrillic' == $subset ) {
- $subsets .= ',cyrillic,cyrillic-ext';
- } elseif ( 'greek' == $subset ) {
- $subsets .= ',greek,greek-ext';
- } elseif ( 'vietnamese' == $subset ) {
- $subsets .= ',vietnamese';
- }
-
- $query_args = array(
- 'family' => urlencode( 'Open Sans:400italic,700italic,400,600,700' ),
- 'subset' => urlencode( $subsets ),
- );
-
- $open_sans_font_url = ',' . add_query_arg( $query_args, 'https://fonts.googleapis.com/css' );
- }
-
- return $styles . $press_this . $open_sans_font_url;
+ return $styles . $press_this;
}
/**
@@ -1171,7 +1143,7 @@ class WP_Press_This {
}
/**
- * Filter the default HTML tags used in the suggested content for the editor.
+ * Filters the default HTML tags used in the suggested content for the editor.
*
* The HTML strings use printf format. After filtering the content is added at the specified places with `sprintf()`.
*
@@ -1530,6 +1502,9 @@ class WP_Press_This {
/** This action is documented in wp-admin/admin-footer.php */
do_action( 'admin_footer' );
+ /** This action is documented in wp-admin/admin-footer.php */
+ do_action( 'admin_print_footer_scripts-press-this.php' );
+
/** This action is documented in wp-admin/admin-footer.php */
do_action( 'admin_print_footer_scripts' );
diff --git a/wp-admin/includes/class-wp-screen.php b/wp-admin/includes/class-wp-screen.php
index ebd20b8..a7d9a1a 100644
--- a/wp-admin/includes/class-wp-screen.php
+++ b/wp-admin/includes/class-wp-screen.php
@@ -418,9 +418,7 @@ final class WP_Screen {
}
/**
- * Sets the old string-based contextual help for the screen.
- *
- * For backwards compatibility.
+ * Sets the old string-based contextual help for the screen for backward compatibility.
*
* @since 3.3.0
*
@@ -722,7 +720,7 @@ final class WP_Screen {
/**
* Render the screen's help section.
*
- * This will trigger the deprecated filters for backwards compatibility.
+ * This will trigger the deprecated filters for backward compatibility.
*
* @since 3.3.0
*
@@ -731,7 +729,7 @@ final class WP_Screen {
public function render_screen_meta() {
/**
- * Filter the legacy contextual help list.
+ * Filters the legacy contextual help list.
*
* @since 2.7.0
* @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or
@@ -745,7 +743,7 @@ final class WP_Screen {
$old_help = isset( self::$_old_compat_help[ $this->id ] ) ? self::$_old_compat_help[ $this->id ] : '';
/**
- * Filter the legacy contextual help text.
+ * Filters the legacy contextual help text.
*
* @since 2.7.0
* @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or
@@ -762,7 +760,7 @@ final class WP_Screen {
if ( empty( $old_help ) && ! $this->get_help_tabs() ) {
/**
- * Filter the default legacy contextual help text.
+ * Filters the default legacy contextual help text.
*
* @since 2.8.0
* @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or
@@ -851,10 +849,10 @@ final class WP_Screen {
// Setup layout columns
/**
- * Filter the array of screen layout columns.
+ * Filters the array of screen layout columns.
*
* This hook provides back-compat for plugins using the back-compat
- * filter instead of add_screen_option().
+ * Filters instead of add_screen_option().
*
* @since 2.8.0
*
@@ -931,7 +929,7 @@ final class WP_Screen {
}
/**
- * Filter the screen settings text displayed in the Screen Options tab.
+ * Filters the screen settings text displayed in the Screen Options tab.
*
* This filter is currently only used on the Widgets screen to enable
* accessibility mode.
@@ -947,7 +945,7 @@ final class WP_Screen {
$show_screen = true;
/**
- * Filter whether to show the Screen Options tab.
+ * Filters whether to show the Screen Options tab.
*
* @since 3.2.0
*
@@ -997,7 +995,7 @@ final class WP_Screen {
echo $this->_screen_settings;
/**
- * Filter whether to show the Screen Options submit button.
+ * Filters whether to show the Screen Options submit button.
*
* @since 4.4.0
*
@@ -1206,7 +1204,7 @@ final class WP_Screen {
$view_mode_post_types = get_post_types( array( 'hierarchical' => false, 'show_ui' => true ) );
/**
- * Filter the post types that have different view mode options.
+ * Filters the post types that have different view mode options.
*
* @since 4.4.0
*
diff --git a/wp-admin/includes/class-wp-site-icon.php b/wp-admin/includes/class-wp-site-icon.php
index 8c06db6..3afc83d 100644
--- a/wp-admin/includes/class-wp-site-icon.php
+++ b/wp-admin/includes/class-wp-site-icon.php
@@ -121,7 +121,7 @@ class WP_Site_Icon {
$metadata = wp_generate_attachment_metadata( $attachment_id, $file );
/**
- * Filter the site icon attachment metadata.
+ * Filters the site icon attachment metadata.
*
* @since 4.3.0
*
@@ -148,7 +148,7 @@ class WP_Site_Icon {
$only_crop_sizes = array();
/**
- * Filter the different dimensions that a site icon is saved in.
+ * Filters the different dimensions that a site icon is saved in.
*
* @since 4.3.0
*
diff --git a/wp-admin/includes/class-wp-terms-list-table.php b/wp-admin/includes/class-wp-terms-list-table.php
index 7da91a2..e765794 100644
--- a/wp-admin/includes/class-wp-terms-list-table.php
+++ b/wp-admin/includes/class-wp-terms-list-table.php
@@ -53,7 +53,7 @@ class WP_Terms_List_Table extends WP_List_Table {
$taxonomy = 'post_tag';
if ( ! taxonomy_exists( $taxonomy ) )
- wp_die( __( 'Invalid taxonomy' ) );
+ wp_die( __( 'Invalid taxonomy.' ) );
$tax = get_taxonomy( $taxonomy );
@@ -79,7 +79,7 @@ class WP_Terms_List_Table extends WP_List_Table {
if ( 'post_tag' === $this->screen->taxonomy ) {
/**
- * Filter the number of terms displayed per page for the Tags list table.
+ * Filters the number of terms displayed per page for the Tags list table.
*
* @since 2.8.0
*
@@ -88,7 +88,7 @@ class WP_Terms_List_Table extends WP_List_Table {
$tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page );
/**
- * Filter the number of terms displayed per page for the Tags list table.
+ * Filters the number of terms displayed per page for the Tags list table.
*
* @since 2.7.0
* @deprecated 2.8.0 Use edit_tags_per_page instead.
@@ -98,7 +98,7 @@ class WP_Terms_List_Table extends WP_List_Table {
$tags_per_page = apply_filters( 'tagsperpage', $tags_per_page );
} elseif ( 'category' === $this->screen->taxonomy ) {
/**
- * Filter the number of terms displayed per page for the Categories list table.
+ * Filters the number of terms displayed per page for the Categories list table.
*
* @since 2.8.0
*
@@ -351,7 +351,7 @@ class WP_Terms_List_Table extends WP_List_Table {
$pad = str_repeat( '— ', max( 0, $this->level ) );
/**
- * Filter display of the term name in the terms list table.
+ * Filters display of the term name in the terms list table.
*
* The default output may include padding due to the term's
* current level in the term hierarchy.
@@ -469,7 +469,7 @@ class WP_Terms_List_Table extends WP_List_Table {
}
/**
- * Filter the action links displayed for each term in the Tags list table.
+ * Filters the action links displayed for each term in the Tags list table.
*
* @since 2.8.0
* @deprecated 3.0.0 Use {$taxonomy}_row_actions instead.
@@ -481,7 +481,7 @@ class WP_Terms_List_Table extends WP_List_Table {
$actions = apply_filters( 'tag_row_actions', $actions, $tag );
/**
- * Filter the action links displayed for each term in the terms list table.
+ * Filters the action links displayed for each term in the terms list table.
*
* The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug.
*
@@ -559,7 +559,7 @@ class WP_Terms_List_Table extends WP_List_Table {
*/
public function column_default( $tag, $column_name ) {
/**
- * Filter the displayed columns in the terms list table.
+ * Filters the displayed columns in the terms list table.
*
* The dynamic portion of the hook name, `$this->screen->taxonomy`,
* refers to the slug of the current taxonomy.
diff --git a/wp-admin/includes/class-wp-theme-install-list-table.php b/wp-admin/includes/class-wp-theme-install-list-table.php
index 3780c89..492497e 100644
--- a/wp-admin/includes/class-wp-theme-install-list-table.php
+++ b/wp-admin/includes/class-wp-theme-install-list-table.php
@@ -13,7 +13,7 @@
* @since 3.1.0
* @access private
*
- * @see WP_Thenes_List_Table
+ * @see WP_Themes_List_Table
*/
class WP_Theme_Install_List_Table extends WP_Themes_List_Table {
@@ -72,7 +72,7 @@ class WP_Theme_Install_List_Table extends WP_Themes_List_Table {
$tabs = apply_filters( 'install_themes_tabs', $tabs );
/**
- * Filter tabs not associated with a menu item on the Install Themes screen.
+ * Filters tabs not associated with a menu item on the Install Themes screen.
*
* @since 2.8.0
*
@@ -124,7 +124,7 @@ class WP_Theme_Install_List_Table extends WP_Themes_List_Table {
}
/**
- * Filter API request arguments for each Install Themes screen tab.
+ * Filters API request arguments for each Install Themes screen tab.
*
* The dynamic portion of the hook name, `$tab`, refers to the theme install
* tabs. Default tabs are 'dashboard', 'search', 'upload', 'featured',
@@ -290,7 +290,7 @@ class WP_Theme_Install_List_Table extends WP_Themes_List_Table {
$actions[] = '' . __( 'Preview' ) . '';
/**
- * Filter the install action links for a theme in the Install Themes list table.
+ * Filters the install action links for a theme in the Install Themes list table.
*
* @since 3.4.0
*
diff --git a/wp-admin/includes/class-wp-themes-list-table.php b/wp-admin/includes/class-wp-themes-list-table.php
index 2426e61..a232cd0 100644
--- a/wp-admin/includes/class-wp-themes-list-table.php
+++ b/wp-admin/includes/class-wp-themes-list-table.php
@@ -42,7 +42,7 @@ class WP_Themes_List_Table extends WP_List_Table {
* @return bool
*/
public function ajax_user_can() {
- // Do not check edit_theme_options here. AJAX calls for available themes require switch_themes.
+ // Do not check edit_theme_options here. Ajax calls for available themes require switch_themes.
return current_user_can( 'switch_themes' );
}
@@ -104,7 +104,7 @@ class WP_Themes_List_Table extends WP_List_Table {
// Else, fallthrough. install_themes doesn't help if you can't enable it.
} else {
if ( current_user_can( 'install_themes' ) ) {
- printf( __( 'You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above.' ), admin_url( 'theme-install.php' ) );
+ printf( __( 'You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress Theme Directory at any time: just click on the Install Themes tab above.' ), admin_url( 'theme-install.php' ) );
return;
}
diff --git a/wp-admin/includes/class-wp-upgrader-skin.php b/wp-admin/includes/class-wp-upgrader-skin.php
new file mode 100644
index 0000000..4c2b537
--- /dev/null
+++ b/wp-admin/includes/class-wp-upgrader-skin.php
@@ -0,0 +1,211 @@
+ '', 'nonce' => '', 'title' => '', 'context' => false );
+ $this->options = wp_parse_args($args, $defaults);
+ }
+
+ /**
+ * @param WP_Upgrader $upgrader
+ */
+ public function set_upgrader(&$upgrader) {
+ if ( is_object($upgrader) )
+ $this->upgrader =& $upgrader;
+ $this->add_strings();
+ }
+
+ /**
+ * @access public
+ */
+ public function add_strings() {
+ }
+
+ /**
+ * Sets the result of an upgrade.
+ *
+ * @since 2.8.0
+ * @access public
+ *
+ * @param string|bool|WP_Error $result The result of an upgrade.
+ */
+ public function set_result( $result ) {
+ $this->result = $result;
+ }
+
+ /**
+ * Displays a form to the user to request for their FTP/SSH details in order
+ * to connect to the filesystem.
+ *
+ * @since 2.8.0
+ * @since 4.6.0 The `$context` parameter default changed from `false` to an empty string.
+ *
+ * @see request_filesystem_credentials()
+ *
+ * @param bool $error Optional. Whether the current request has failed to connect.
+ * Default false.
+ * @param string $context Optional. Full path to the directory that is tested
+ * for being writable. Default empty.
+ * @param bool $allow_relaxed_file_ownership Optional. Whether to allow Group/World writable. Default false.
+ * @return bool False on failure, true on success.
+ */
+ public function request_filesystem_credentials( $error = false, $context = '', $allow_relaxed_file_ownership = false ) {
+ $url = $this->options['url'];
+ if ( ! $context ) {
+ $context = $this->options['context'];
+ }
+ if ( !empty($this->options['nonce']) ) {
+ $url = wp_nonce_url($url, $this->options['nonce']);
+ }
+
+ $extra_fields = array();
+
+ return request_filesystem_credentials( $url, '', $error, $context, $extra_fields, $allow_relaxed_file_ownership );
+ }
+
+ /**
+ * @access public
+ */
+ public function header() {
+ if ( $this->done_header ) {
+ return;
+ }
+ $this->done_header = true;
+ echo '
';
+ echo '
' . $this->options['title'] . '
';
+ }
+
+ /**
+ * @access public
+ */
+ public function footer() {
+ if ( $this->done_footer ) {
+ return;
+ }
+ $this->done_footer = true;
+ echo '
';
+ }
+
+ /**
+ *
+ * @param string|WP_Error $errors
+ */
+ public function error($errors) {
+ if ( ! $this->done_header )
+ $this->header();
+ if ( is_string($errors) ) {
+ $this->feedback($errors);
+ } elseif ( is_wp_error($errors) && $errors->get_error_code() ) {
+ foreach ( $errors->get_error_messages() as $message ) {
+ if ( $errors->get_error_data() && is_string( $errors->get_error_data() ) )
+ $this->feedback($message . ' ' . esc_html( strip_tags( $errors->get_error_data() ) ) );
+ else
+ $this->feedback($message);
+ }
+ }
+ }
+
+ /**
+ *
+ * @param string $string
+ */
+ public function feedback($string) {
+ if ( isset( $this->upgrader->strings[$string] ) )
+ $string = $this->upgrader->strings[$string];
+
+ if ( strpos($string, '%') !== false ) {
+ $args = func_get_args();
+ $args = array_splice($args, 1);
+ if ( $args ) {
+ $args = array_map( 'strip_tags', $args );
+ $args = array_map( 'esc_html', $args );
+ $string = vsprintf($string, $args);
+ }
+ }
+ if ( empty($string) )
+ return;
+ show_message($string);
+ }
+
+ /**
+ * @access public
+ */
+ public function before() {}
+
+ /**
+ * @access public
+ */
+ public function after() {}
+
+ /**
+ * Output JavaScript that calls function to decrement the update counts.
+ *
+ * @since 3.9.0
+ *
+ * @param string $type Type of update count to decrement. Likely values include 'plugin',
+ * 'theme', 'translation', etc.
+ */
+ protected function decrement_update_count( $type ) {
+ if ( ! $this->result || is_wp_error( $this->result ) || 'up_to_date' === $this->result ) {
+ return;
+ }
+
+ if ( defined( 'IFRAME_REQUEST' ) ) {
+ echo '';
+ } else {
+ echo '';
+ }
+ }
+
+ /**
+ * @access public
+ */
+ public function bulk_header() {}
+
+ /**
+ * @access public
+ */
+ public function bulk_footer() {}
+}
diff --git a/wp-admin/includes/class-wp-upgrader-skins.php b/wp-admin/includes/class-wp-upgrader-skins.php
index c9d32ce..8b2789d 100644
--- a/wp-admin/includes/class-wp-upgrader-skins.php
+++ b/wp-admin/includes/class-wp-upgrader-skins.php
@@ -7,940 +7,35 @@
* @since 2.8.0
*/
-/**
- * Generic Skin for the WordPress Upgrader classes. This skin is designed to be extended for specific purposes.
- *
- * @package WordPress
- * @subpackage Upgrader
- * @since 2.8.0
- */
-class WP_Upgrader_Skin {
+/** WP_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
- public $upgrader;
- public $done_header = false;
- public $done_footer = false;
- public $result = false;
- public $options = array();
+/** Plugin_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader-skin.php';
- /**
- *
- * @param array $args
- */
- public function __construct($args = array()) {
- $defaults = array( 'url' => '', 'nonce' => '', 'title' => '', 'context' => false );
- $this->options = wp_parse_args($args, $defaults);
- }
+/** Theme_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-theme-upgrader-skin.php';
- /**
- * @param WP_Upgrader $upgrader
- */
- public function set_upgrader(&$upgrader) {
- if ( is_object($upgrader) )
- $this->upgrader =& $upgrader;
- $this->add_strings();
- }
+/** Bulk_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-bulk-upgrader-skin.php';
- /**
- * @access public
- */
- public function add_strings() {
- }
+/** Bulk_Plugin_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-bulk-plugin-upgrader-skin.php';
- /**
- *
- * @param string|false|WP_Error $result
- */
- public function set_result($result) {
- $this->result = $result;
- }
+/** Bulk_Theme_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-bulk-theme-upgrader-skin.php';
- /**
- *
- * @param bool $error
- * @param string $context
- * @param bool $allow_relaxed_file_ownership
- * @return type
- */
- public function request_filesystem_credentials( $error = false, $context = false, $allow_relaxed_file_ownership = false ) {
- $url = $this->options['url'];
- if ( ! $context ) {
- $context = $this->options['context'];
- }
- if ( !empty($this->options['nonce']) ) {
- $url = wp_nonce_url($url, $this->options['nonce']);
- }
+/** Plugin_Installer_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-plugin-installer-skin.php';
- $extra_fields = array();
+/** Theme_Installer_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-theme-installer-skin.php';
- return request_filesystem_credentials( $url, '', $error, $context, $extra_fields, $allow_relaxed_file_ownership );
- }
+/** Language_Pack_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-language-pack-upgrader-skin.php';
- /**
- * @access public
- */
- public function header() {
- if ( $this->done_header ) {
- return;
- }
- $this->done_header = true;
- echo '
';
- echo '
' . $this->options['title'] . '
';
- }
+/** Automatic_Upgrader_Skin class */
+require_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
- /**
- * @access public
- */
- public function footer() {
- if ( $this->done_footer ) {
- return;
- }
- $this->done_footer = true;
- echo '
';
- }
-
- /**
- *
- * @param string|WP_Error $errors
- */
- public function error($errors) {
- if ( ! $this->done_header )
- $this->header();
- if ( is_string($errors) ) {
- $this->feedback($errors);
- } elseif ( is_wp_error($errors) && $errors->get_error_code() ) {
- foreach ( $errors->get_error_messages() as $message ) {
- if ( $errors->get_error_data() && is_string( $errors->get_error_data() ) )
- $this->feedback($message . ' ' . esc_html( strip_tags( $errors->get_error_data() ) ) );
- else
- $this->feedback($message);
- }
- }
- }
-
- /**
- *
- * @param string $string
- */
- public function feedback($string) {
- if ( isset( $this->upgrader->strings[$string] ) )
- $string = $this->upgrader->strings[$string];
-
- if ( strpos($string, '%') !== false ) {
- $args = func_get_args();
- $args = array_splice($args, 1);
- if ( $args ) {
- $args = array_map( 'strip_tags', $args );
- $args = array_map( 'esc_html', $args );
- $string = vsprintf($string, $args);
- }
- }
- if ( empty($string) )
- return;
- show_message($string);
- }
-
- /**
- * @access public
- */
- public function before() {}
-
- /**
- * @access public
- */
- public function after() {}
-
- /**
- * Output JavaScript that calls function to decrement the update counts.
- *
- * @since 3.9.0
- *
- * @param string $type Type of update count to decrement. Likely values include 'plugin',
- * 'theme', 'translation', etc.
- */
- protected function decrement_update_count( $type ) {
- if ( ! $this->result || is_wp_error( $this->result ) || 'up_to_date' === $this->result ) {
- return;
- }
-
- if ( defined( 'IFRAME_REQUEST' ) ) {
- echo '';
- } else {
- echo '';
- }
- }
-
- /**
- * @access public
- */
- public function bulk_header() {}
-
- /**
- * @access public
- */
- public function bulk_footer() {}
-}
-
-/**
- * Plugin Upgrader Skin for WordPress Plugin Upgrades.
- *
- * @package WordPress
- * @subpackage Upgrader
- * @since 2.8.0
- */
-class Plugin_Upgrader_Skin extends WP_Upgrader_Skin {
- public $plugin = '';
- public $plugin_active = false;
- public $plugin_network_active = false;
-
- /**
- *
- * @param array $args
- */
- public function __construct( $args = array() ) {
- $defaults = array( 'url' => '', 'plugin' => '', 'nonce' => '', 'title' => __('Update Plugin') );
- $args = wp_parse_args($args, $defaults);
-
- $this->plugin = $args['plugin'];
-
- $this->plugin_active = is_plugin_active( $this->plugin );
- $this->plugin_network_active = is_plugin_active_for_network( $this->plugin );
-
- parent::__construct($args);
- }
-
- /**
- * @access public
- */
- public function after() {
- $this->plugin = $this->upgrader->plugin_info();
- if ( !empty($this->plugin) && !is_wp_error($this->result) && $this->plugin_active ){
- // Currently used only when JS is off for a single plugin update?
- echo '';
- }
-
- $this->decrement_update_count( 'plugin' );
-
- $update_actions = array(
- 'activate_plugin' => '' . __( 'Activate Plugin' ) . '',
- 'plugins_page' => '' . __( 'Return to Plugins page' ) . ''
- );
- if ( $this->plugin_active || ! $this->result || is_wp_error( $this->result ) || ! current_user_can( 'activate_plugins' ) )
- unset( $update_actions['activate_plugin'] );
-
- /**
- * Filter the list of action links available following a single plugin update.
- *
- * @since 2.7.0
- *
- * @param array $update_actions Array of plugin action links.
- * @param string $plugin Path to the plugin file.
- */
- $update_actions = apply_filters( 'update_plugin_complete_actions', $update_actions, $this->plugin );
-
- if ( ! empty($update_actions) )
- $this->feedback(implode(' | ', (array)$update_actions));
- }
-}
-
-/**
- * Plugin Upgrader Skin for WordPress Plugin Upgrades.
- *
- * @package WordPress
- * @subpackage Upgrader
- * @since 3.0.0
- */
-class Bulk_Upgrader_Skin extends WP_Upgrader_Skin {
- public $in_loop = false;
- /**
- * @var string|false
- */
- public $error = false;
-
- /**
- *
- * @param array $args
- */
- public function __construct($args = array()) {
- $defaults = array( 'url' => '', 'nonce' => '' );
- $args = wp_parse_args($args, $defaults);
-
- parent::__construct($args);
- }
-
- /**
- * @access public
- */
- public function add_strings() {
- $this->upgrader->strings['skin_upgrade_start'] = __('The update process is starting. This process may take a while on some hosts, so please be patient.');
- /* translators: 1: Title of an update, 2: Error message */
- $this->upgrader->strings['skin_update_failed_error'] = __('An error occurred while updating %1$s: %2$s');
- /* translators: 1: Title of an update */
- $this->upgrader->strings['skin_update_failed'] = __('The update of %1$s failed.');
- /* translators: 1: Title of an update */
- $this->upgrader->strings['skin_update_successful'] = __( '%1$s updated successfully.' ) . ' ' . __( 'Show Details' ) . '' . __( 'Hide Details' ) . '';
- $this->upgrader->strings['skin_upgrade_end'] = __('All updates have been completed.');
- }
-
- /**
- * @param string $string
- */
- public function feedback($string) {
- if ( isset( $this->upgrader->strings[$string] ) )
- $string = $this->upgrader->strings[$string];
-
- if ( strpos($string, '%') !== false ) {
- $args = func_get_args();
- $args = array_splice($args, 1);
- if ( $args ) {
- $args = array_map( 'strip_tags', $args );
- $args = array_map( 'esc_html', $args );
- $string = vsprintf($string, $args);
- }
- }
- if ( empty($string) )
- return;
- if ( $this->in_loop )
- echo "$string \n";
- else
- echo "
$string
\n";
- }
-
- /**
- * @access public
- */
- public function header() {
- // Nothing, This will be displayed within a iframe.
- }
-
- /**
- * @access public
- */
- public function footer() {
- // Nothing, This will be displayed within a iframe.
- }
-
- /**
- *
- * @param string|WP_Error $error
- */
- public function error($error) {
- if ( is_string($error) && isset( $this->upgrader->strings[$error] ) )
- $this->error = $this->upgrader->strings[$error];
-
- if ( is_wp_error($error) ) {
- $messages = array();
- foreach ( $error->get_error_messages() as $emessage ) {
- if ( $error->get_error_data() && is_string( $error->get_error_data() ) )
- $messages[] = $emessage . ' ' . esc_html( strip_tags( $error->get_error_data() ) );
- else
- $messages[] = $emessage;
- }
- $this->error = implode(', ', $messages);
- }
- echo '';
- }
-
- /**
- * @access public
- */
- public function bulk_header() {
- $this->feedback('skin_upgrade_start');
- }
-
- /**
- * @access public
- */
- public function bulk_footer() {
- $this->feedback('skin_upgrade_end');
- }
-
- /**
- *
- * @param string $title
- */
- public function before($title = '') {
- $this->in_loop = true;
- printf( '
' . __( 'You do not have sufficient permissions to add users to this network.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to add users to this network.' ) . '
',
403
);
}
@@ -107,7 +107,7 @@ Please click the following link to confirm the invite:
if ( ! current_user_can( 'create_users' ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to create users.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to create users.' ) . '
',
403
);
}
@@ -133,7 +133,7 @@ Please click the following link to confirm the invite:
$add_user_errors = $user_details[ 'errors' ];
} else {
/**
- * Filter the user_login, also known as the username, before it is added to the site.
+ * Filters the user_login, also known as the username, before it is added to the site.
*
* @since 2.0.3
*
@@ -148,7 +148,7 @@ Please click the following link to confirm the invite:
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 ) ) {
+ if ( is_wp_error( $new_user ) ) {
$redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' );
} else {
$redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $new_user['user_id'] ), 'user-new.php' );
@@ -175,8 +175,9 @@ 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 don’t want the user to receive a welcome email.') . '
';
} else {
- $help .= '
' . __('You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed.') . '
' .
- '
' . __('New users will receive an email letting them know they’ve been added as a user for your site. By default, this email will also contain their password. Uncheck the box if you don’t want the password to be included in the welcome email.') . '
';
+ $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 don’t want to send the new user a welcome email.') . '
';
}
$help .= '
' . __('Remember to click the Add New User button at the bottom of this screen when you are finished.') . '
';
@@ -210,7 +211,7 @@ wp_enqueue_script('wp-ajax-response');
wp_enqueue_script( 'user-profile' );
/**
- * Filter whether to enable user auto-complete for non-super admins in Multisite.
+ * Filters whether to enable user auto-complete for non-super admins in Multisite.
*
* @since 3.4.0
*
diff --git a/wp-admin/user/admin.php b/wp-admin/user/admin.php
index 1445245..3d5063c 100644
--- a/wp-admin/user/admin.php
+++ b/wp-admin/user/admin.php
@@ -18,7 +18,7 @@ if ( ! is_multisite() ) {
$redirect_user_admin_request = ( ( $current_blog->domain != $current_site->domain ) || ( $current_blog->path != $current_site->path ) );
/**
- * Filter whether to redirect the request to the User Admin in Multisite.
+ * Filters whether to redirect the request to the User Admin in Multisite.
*
* @since 3.2.0
*
diff --git a/wp-admin/users.php b/wp-admin/users.php
index 789f34c..194ced9 100644
--- a/wp-admin/users.php
+++ b/wp-admin/users.php
@@ -13,7 +13,7 @@ require_once( dirname( __FILE__ ) . '/admin.php' );
if ( ! current_user_can( 'list_users' ) ) {
wp_die(
'
' . __( 'Cheatin’ uh?' ) . '
' .
- '
' . __( 'You are not allowed to browse users.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to browse users.' ) . '
' . __('You can customize the display of this screen in a number of ways:') . '
' .
'
' .
'
' . __('You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.') . '
' .
- '
' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '
' .
+ '
' . __( 'You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.' ) . '
' .
'
' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '
' . __( 'You are not allowed to edit theme options on this site.' ) . '
',
+ '
' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '
',
403
);
}
@@ -357,7 +357,7 @@ require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?>
),
admin_url( 'customize.php' )
) ),
- __( 'Manage in Customizer' )
+ __( 'Manage with Live Preview' )
);
}
?>
diff --git a/wp-comments-post.php b/wp-comments-post.php
index 4fb249b..4e9f1fc 100644
--- a/wp-comments-post.php
+++ b/wp-comments-post.php
@@ -42,7 +42,7 @@ do_action( 'set_comment_cookies', $comment, $user );
$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;
/**
- * Filter the location URI to send the commenter after posting.
+ * Filters the location URI to send the commenter after posting.
*
* @since 2.0.5
*
diff --git a/wp-content/languages/admin-nb_NO.mo b/wp-content/languages/admin-nb_NO.mo
index d7e7954..36429ac 100644
Binary files a/wp-content/languages/admin-nb_NO.mo and b/wp-content/languages/admin-nb_NO.mo differ
diff --git a/wp-content/languages/admin-nb_NO.po b/wp-content/languages/admin-nb_NO.po
index 7c7ca6b..495a58a 100644
--- a/wp-content/languages/admin-nb_NO.po
+++ b/wp-content/languages/admin-nb_NO.po
@@ -2,7 +2,7 @@
# This file is distributed under the same license as the Administration package.
msgid ""
msgstr ""
-"PO-Revision-Date: 2016-04-13 12:35:50+0000\n"
+"PO-Revision-Date: 2016-08-16 13:09:49+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -11,141 +11,554 @@ msgstr ""
"Project-Id-Version: Administration\n"
#. translators: default start of the week. 0 = Sunday, 1 = Monday
-#: wp-admin/includes/schema.php:407
+#: wp-admin/includes/schema.php:402
msgctxt "start of week"
msgid "1"
msgstr "1"
#. translators: default GMT offset or timezone string. Must be either a valid
#. offset (-12 to 14) or a valid timezone string (America/New_York). See
-#. http://us3.php.net/manual/en/timezones.php for all timezone strings
+#. https://secure.php.net/manual/en/timezones.php for all timezone strings
#. supported by PHP.
-#: wp-admin/includes/schema.php:392
+#: wp-admin/includes/schema.php:387
msgctxt "default GMT offset or timezone string"
msgid "0"
msgstr "Europe/Oslo"
-#. translators: %s: wp_add_inline_script()
-#: wp-admin/about.php:166
-msgid "Better support has been added for script header/footer dependencies. New %s enables adding extra code to registered scripts."
-msgstr "Bedre støtte for skriptavhengigheter i header og footer. Nye %s gjør det mulig å legge til ekstra kode til registrerte skript."
+#. translators: 1: WP_Site_Query, 2: WP_Network_Query
+#: wp-admin/about.php:188
+msgid "Cached and comprehensive site queries improve your network admin experience. The addition of %1$s and %2$s help craft advanced queries with less effort."
+msgstr "Hurtiglagrede og omfattende nettstedsspørringer forbedrer din nettverksadmin-opplevelse. De nye %1$s og %2$s hjelper deg å lage avanserte spørringer, enklere."
-#: wp-admin/credits.php:121
+#: wp-admin/about.php:181
+msgid "Settings now have an API for enforcing validation constraints. Likewise, customizer controls now support notifications, which are used to display validation errors instead of failing silently."
+msgstr "Innstillinger har nå en API for å håndheve validering. Likeledes støtter nå tematilpasseren varslinger som kan brukes for å vise valideringsfeil istedenfor å feile sporløst."
+
+#: wp-admin/about.php:184
+msgid "Multisite, now faster than ever"
+msgstr "Nettstedsnettverk, nå raskere enn noensinne"
+
+#: wp-admin/about.php:170
+msgid "WordPress will install and use the newest language packs for your plugins and themes as soon as they’re available from WordPress.org’s community of translators."
+msgstr "WordPress vil installere og bruke de nyeste språkpakkene for dine utvidelser og temaer så snart de er tilgjengelige fra WordPress.org's oversettere."
+
+#: wp-admin/about.php:174
+msgid "Masonry 3.3.2, imagesLoaded 3.2.0, MediaElement.js 2.22.0, TinyMCE 4.4.1, and Backbone.js 1.3.3 are bundled."
+msgstr "Masonry 3.3.2, imagesLoaded 3.2.0, MediaElement.js 2.22.0, TinyMCE 4.4.1 og Backbone.js 1.3.3 er lagt ved."
+
+#: wp-admin/about.php:180
+msgid "Customizer APIs for Setting Validation and Notifications"
+msgstr "Tematilpasser-APIer for validering og varsling"
+
+#. translators: %s:
+#. https://make.wordpress.org/core/2016/07/08/enhancing-register_meta-in-4-6/
+#: wp-admin/about.php:163
+msgid "The Meta Registration API has been expanded to support types, descriptions, and REST API visibility."
+msgstr "Metaregistrerings-APIen har blitt utvidet til å støtte typer, beskrivelser og synlighet i REST API."
+
+#: wp-admin/about.php:169
+msgid "Translations On Demand"
+msgstr "Oversettelser på bestilling"
+
+#. translators: 1: WP_Term_Query, 2: WP_Post_Type
+#: wp-admin/about.php:149
+msgid "A new %1$s class adds flexibility to query term information while a new %2$s object makes interacting with post types more predictable."
+msgstr "En ny %1$s-klasse gjør term-spørringer mer fleksible, og et nytt %2$s-objekt gjør det mer forutsigbart å håndtere innleggstyper."
+
+#: wp-admin/about.php:159
+msgid "Meta Registration API"
+msgstr "Metaregisterings-API"
+
+#: wp-admin/about.php:139
+msgid "The HTTP API now leverages the Requests library, improving HTTP standard support and adding case-insensitive headers, parallel HTTP requests, and support for Internationalized Domain Names."
+msgstr "HTTP API bruker nå Requests-biblioteket, som forbedrer standard HTTP-støtte og legger til støtte for å ikke skille mellom små og store bokstaver, parallelle HTTP-spørringer og domenenavn med internasjonale tegn."
+
+#. translators: 1: WP_Term_Query, 2: WP_Post_Type
+#: wp-admin/about.php:144
+msgid "%1$s and %2$s"
+msgstr "%1$s og %2$s"
+
+#. translators: %s:
+#. https://make.wordpress.org/core/2016/07/06/resource-hints-in-4-6/
+#: wp-admin/about.php:132
+msgid "Resource hints help browsers decide which resources to fetch and preprocess. WordPress 4.6 adds them automatically for your styles and scripts making your site even faster."
+msgstr "Ressurshint hjelper nettlesere å bestemme hvilke ressurser som skal hentes og forhåndsprosesseres. WordPress 4.6 legger dem til automatisk for dine css- og skriptfiler, som gjør ditt nettsted enda raskere."
+
+#: wp-admin/about.php:138
+msgid "Robust Requests"
+msgstr "Robuste spørringer"
+
+#: wp-admin/about.php:117
+msgid "As you type, WordPress saves your content to the browser. Recovering saved content is even easier with WordPress 4.6."
+msgstr "Når du skriver, lagrer WordPress ditt innhold i nettleseren. Gjenoppretting av lagret innhold er enda enklere i WordPress 4.6."
+
+#: wp-admin/about.php:128
+msgid "Resource Hints"
+msgstr "Ressurshint"
+
+#. translators: %s: Home URL appended with 'wordpress.org'
+#: wp-admin/about.php:109
+msgid "Ever accidentally made a link to %s? Now WordPress automatically checks to make sure you didn’t."
+msgstr "Har du laget en lenke til %s ved en feil? Nå sjekker WordPress automatisk at du ikke gjør det."
+
+#: wp-admin/about.php:116
+msgid "Content Recovery"
+msgstr "Gjenopprett innhold"
+
+#: wp-admin/about.php:105
+msgid "Inline Link Checker"
+msgstr "Innebygget lenkesjekker"
+
+#: wp-admin/about.php:95
+msgid "The WordPress dashboard now takes advantage of the fonts you already have, making it load faster and letting you feel more at home on whatever device you use."
+msgstr "Kontrollpanelet i WordPress benytter nå skrifttyper du allerede har. Det betyr raskere innlasting og at du vil føle deg mer hjemme på de enhetene du bruker."
+
+#: wp-admin/about.php:70
+msgid "Don’t lose your place: stay on the same page while you update, install, and delete your plugins and themes."
+msgstr "Ikke mist fotfestet; bli værende på samme side når du oppdaterer, installerer og sletter utvidelser og temaer."
+
+#: wp-admin/about.php:94
+msgid "Native Fonts"
+msgstr "Innebygde skrifftyper"
+
+#: wp-admin/about.php:52 wp-admin/credits.php:23 wp-admin/freedoms.php:22
+msgid "Thank you for updating to the latest version. WordPress %s changes a lot behind the scenes to make your WordPress experience even better!"
+msgstr "Takk for at du oppdaterer til nyeste versjon. WordPress %s endrer mye bak scenen sånn at din WordPress-opplevelse blir enda bedre!"
+
+#: wp-admin/about.php:69
+msgid "Streamlined Updates"
+msgstr "Enklere oppdateringer"
+
+#. translators: %s: Number of failed updates
+#: wp-admin/includes/update.php:671
+msgid "%s update failed."
+msgstr "%s oppdatering feilet."
+
+#. translators: %s: Number of failed updates
+#: wp-admin/includes/update.php:676
+msgid "%s updates failed."
+msgstr "%s oppdateringer feilet."
+
+#: wp-admin/includes/class-wp-plugins-list-table.php:369
+msgid "Search installed plugins..."
+msgstr "Søk i installerte utvidelser..."
+
+#: wp-admin/plugin-install.php:82
+msgid "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."
+msgstr "Utvidelser hekter seg inn i WordPress for å utvide funksjonaliteten. Utvidelser utvikles selvstendig fra WordPress-applikasjonen av tusenvis av utviklere over hele verden. Alle utvidelser i WordPress Plugin Directory er kompatible med lisensen som WordPress bruker."
+
+#: wp-admin/plugin-install.php:83
+msgid "You can find new plugins to install by searching or browsing the directory right here in your own Plugins section."
+msgstr "Du kan finne nye utvidelser å installere ved å søke eller bla i katalogen her i utvidelses-seksjonen."
+
+#: wp-admin/includes/plugin-install.php:259
+msgid "Search plugins by:"
+msgstr "Søk i utvidelser etter:"
+
+#: wp-admin/includes/import.php:171
+msgid "Convert existing categories to tags or tags to categories, selectively."
+msgstr "Konverter eksisterende kategorier til stikkord eller stikkord til kategorier, som du vil."
+
+#: wp-admin/includes/import.php:177
+msgid "Import posts from LiveJournal using their API."
+msgstr "Importer innlegg fra LiveJournal ved å bruke deres API."
+
+#: wp-admin/includes/import.php:183
+msgid "Import posts and comments from a Movable Type or TypePad blog."
+msgstr "Importer innlegg og kommentarer fra Movable Type eller TypePad blog."
+
+#: wp-admin/includes/import.php:189
+msgid "Import links in OPML format."
+msgstr "Importer lenker i OPML-format."
+
+#: wp-admin/includes/import.php:195
+msgid "Import posts from an RSS feed."
+msgstr "Importer innlegg fra en RSS-strøm."
+
+#: wp-admin/includes/import.php:201
+msgid "Import posts & media from Tumblr using their API."
+msgstr "Importer innlegg & media fra Tumblr ved å bruke deres API."
+
+#: wp-admin/includes/import.php:207
+msgid "Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file."
+msgstr "Importer innlegg, sider, kommentarer, egendefinerte felt, kategorier og stikkord fra et WordPress-arkiv."
+
+#: wp-admin/includes/import.php:165
+msgid "Import posts, comments, and users from a Blogger blog."
+msgstr "Importer innlegg, kommentarer og brukere fra en Blogger-blogg."
+
+#. translators: %s: plugin name
+#: wp-admin/includes/class-wp-plugins-list-table.php:603
+msgctxt "plugin"
+msgid "Network Deactivate %s"
+msgstr "Deaktiver i nettverk %s"
+
+#. translators: %s: plugin name
+#: wp-admin/includes/class-wp-plugins-list-table.php:612
+#: wp-admin/includes/class-wp-plugins-list-table.php:633
+msgctxt "plugin"
+msgid "Delete %s"
+msgstr "Slett %s"
+
+#. translators: %s: plugin name
+#: wp-admin/includes/class-wp-plugins-list-table.php:626
+msgctxt "plugin"
+msgid "Deactivate %s"
+msgstr "Deaktiver %s"
+
+#: wp-admin/user-new.php:180
+msgid "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 don’t want to send the new user a welcome email."
+msgstr "Som standard vil nye brukere få en e-post som lar dem vite at de har blitt lagt til som brukere på ditt nettsted. E-posten vil også inneholde en lenke for å nullstille passordet. Fjern krysset i boksen hvis du ikke vil sende slike e-poster til nye brukere."
+
+#: wp-admin/user-new.php:178
+msgid "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."
+msgstr "Nye brukere får automatisk tildelt et passord, som de kan endre etter at de har logget inn. Du kan se eller redigere det tildelte passordet ved å klikke på Vis passord-knappen. Brukernavnet kan ikke bli endret etter at brukeren har blitt lagt til."
+
+#. translators: %s: Plugin name
+#: wp-admin/includes/update.php:739
+msgctxt "plugin"
+msgid "%s was successfully deleted."
+msgstr "%s ble slettet."
+
+#: wp-admin/plugins.php:374
+msgid "The search for installed plugins will search for terms in their name, description, or author."
+msgstr "Søket etter installerte utvidelser vil søke i navn, beskrivelse og forfatter."
+
+#: wp-admin/includes/theme.php:251
+msgid "Custom Logo"
+msgstr "Tilpasset logo"
+
+#: wp-admin/user-edit.php:534
+msgid "Confirm use of potentially weak password"
+msgstr "Bekreft bruk av potensielt svakt passord"
+
+#: wp-admin/user-new.php:16 wp-admin/user-new.php:56
+msgid "Sorry, you are not allowed to add users to this network."
+msgstr "Beklager, du har ikke lov til å legge til brukere i dette nettverket."
+
+#: wp-admin/user-new.php:23 wp-admin/user-new.php:110
+msgid "Sorry, you are not allowed to create users."
+msgstr "Beklager, du har ikke lov til å opprette brukere."
+
+#: wp-admin/themes.php:255 wp-admin/themes.php:381
+msgid "New version available. "
+msgstr "Ny versjon tilgjengelig. "
+
+#: wp-admin/update-core.php:23 wp-admin/update-core.php:626
+#: wp-admin/update-core.php:650 wp-admin/update-core.php:678
+#: wp-admin/update-core.php:708
+msgid "Sorry, you are not allowed to update this site."
+msgstr "Beklager, du har ikke lov til å oppdatere dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3438 wp-admin/update.php:172
+#: wp-admin/update.php:193
+msgid "Sorry, you are not allowed to update themes for this site."
+msgstr "Beklager, du har ikke lov til å oppdatere temaer på dette nettstedet."
+
+#: wp-admin/theme-install.php:134
+msgid "The Theme Installer screen requires JavaScript."
+msgstr "Tema-installeringsskjermen krever JavaScript."
+
+#: wp-admin/setup-config.php:284
+msgid "ERROR: \"Table Prefix\" is invalid."
+msgstr "FEIL: \"Table Prefix\" er ugyldig."
+
+#: wp-admin/theme-editor.php:18
+msgid "Sorry, you are not allowed to edit templates for this site."
+msgstr "Beklager, du har ikke lov til å redigere maler på dette nettstedet."
+
+#: wp-admin/plugins.php:33 wp-admin/plugins.php:72 wp-admin/plugins.php:150
+msgid "Sorry, you are not allowed to activate plugins for this site."
+msgstr "Beklager, du har ikke lov til å aktivere utvidelser på dette nettstedet."
+
+#: wp-admin/plugins.php:171 wp-admin/plugins.php:196
+msgid "Sorry, you are not allowed to deactivate plugins for this site."
+msgstr "Beklager, du har ikke lov til å deaktivere utvidelser på dette nettstedet."
+
+#: wp-admin/options.php:164
+msgid "Sorry, you are not allowed to modify unregistered settings for this site."
+msgstr "Beklager, du har ikke lov til å redigere uregistrerte innstillinger på dette nettstedet."
+
+#: wp-admin/plugin-editor.php:18
+msgid "Sorry, you are not allowed to edit plugins for this site."
+msgstr "Beklager, du har ikke lov til å redigere utvidelser på dette nettstedet."
+
+#: wp-admin/ms-delete-site.php:16
+msgid "Sorry, you are not allowed to delete this site."
+msgstr "Beklager, du har ikke lov til å slette dette nettstedet."
+
+#: wp-admin/nav-menus.php:588 wp-admin/widgets.php:360
+msgid "Manage with Live Preview"
+msgstr "Håndter med live forhåndsvisning"
+
+#: wp-admin/options-discussion.php:12 wp-admin/options-general.php:16
+#: wp-admin/options-media.php:13 wp-admin/options-permalink.php:13
+#: wp-admin/options-reading.php:13 wp-admin/options-writing.php:13
+msgid "Sorry, you are not allowed to manage options for this site."
+msgstr "Beklager, du har ikke lov til å endre innstillinger på dette nettstedet."
+
+#. translators: %s: WordPress Planet URL
+#: wp-admin/index.php:82
+msgid "WordPress News — Latest news from the official WordPress project and the WordPress Planet."
+msgstr "WordPress News — De siste nyhetene fra WordPress-prosjektet og WordPress Planet."
+
+#: wp-admin/link-add.php:13
+msgid "Sorry, you are not allowed to add links to this site."
+msgstr "Beklager, du har ikke lov til å legge til lenker på dette nettstedet."
+
+#. translators: %s: WordPress Planet URL
+#: wp-admin/index.php:76
+msgid "WordPress News — Latest news from the official WordPress project, the WordPress Planet, and popular plugins."
+msgstr "WordPress News — De siste nyhetene fra WordPress-prosjektet, WordPress Planet og populære utvidelser."
+
+#: wp-admin/includes/upgrade.php:197
+msgid ""
+"Hi, this is a comment.\n"
+"To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\n"
+"Commenter avatars come from Gravatar."
+msgstr ""
+"Hei, dette er en kommentar.\n"
+"For å starte med moderering, redigering og sletting av kommentarer, vennligst gå til Kommentar-skjermen i kontrollpanelet.\n"
+"Kommentar-avatarer kommer fra Gravatar."
+
+#. translators: %s: Theme name
+#: wp-admin/includes/update.php:747
+msgctxt "theme"
+msgid "%s was successfully deleted."
+msgstr "%s ble slettet."
+
+#: wp-admin/includes/upgrade.php:194
+msgid "A WordPress Commenter"
+msgstr "En WordPress-kommentator"
+
+#: wp-admin/includes/theme.php:236
+msgid "Grid Layout"
+msgstr "Grid-layout"
+
+#: wp-admin/includes/theme.php:257
+msgid "Footer Widgets"
+msgstr "Footer-widgeter"
+
+#: wp-admin/includes/theme.php:270
+msgid "Blog"
+msgstr "Blogg"
+
+#: wp-admin/includes/theme.php:271
+msgid "E-Commerce"
+msgstr "E-handel"
+
+#: wp-admin/includes/theme.php:272
+msgid "Education"
+msgstr "Utdanning"
+
+#: wp-admin/includes/theme.php:273
+msgid "Entertainment"
+msgstr "Underholdning"
+
+#: wp-admin/includes/theme.php:274
+msgid "Food & Drink"
+msgstr "Mat og drikke"
+
+#: wp-admin/includes/theme.php:276
+msgid "News"
+msgstr "Nyheter"
+
+#: wp-admin/includes/theme.php:277
+msgid "Photography"
+msgstr "Foto"
+
+#: wp-admin/includes/theme.php:278
+msgid "Portfolio"
+msgstr "Portefølje"
+
+#. translators: 1: Codex URL to release notes, 2: new WordPress version, 3: URL
+#. to network admin, 4: accessibility text
+#: wp-admin/includes/update.php:236
+msgid "WordPress %2$s is available! Please update now."
+msgstr "WordPress %2$s er her! Vennligst oppdater nå."
+
+#. translators: %s: WordPress version
+#: wp-admin/includes/update.php:239 wp-admin/includes/update.php:252
+msgid "https://codex.wordpress.org/Version_%s"
+msgstr "https://codex.wordpress.org/Version_%s"
+
+#: wp-admin/includes/update.php:244
+msgid "Please update WordPress now"
+msgstr "Vennligst oppdater WordPress nå"
+
+#. translators: 1: Codex URL to release notes, 2: new WordPress version
+#: wp-admin/includes/update.php:249
+msgid "WordPress %2$s is available! Please notify the site administrator."
+msgstr "WordPress %2$s er her! Vennligst si ifra til nettstedets administrator."
+
+#. translators: %s: Number of plugins
+#: wp-admin/includes/update.php:644
+msgid "%s plugin successfully updated."
+msgstr "%s utvidelse ble oppdatert."
+
+#. translators: %s: Number of themes
+#: wp-admin/includes/update.php:649
+msgid "%s theme successfully updated."
+msgstr "%s tema ble oppdatert."
+
+#. translators: %s: Number of plugins
+#: wp-admin/includes/update.php:656
+msgid "%s plugins successfully updated."
+msgstr "%s utvidelser ble oppdaterte."
+
+#. translators: %s: Number of themes
+#: wp-admin/includes/update.php:661
+msgid "%s themes successfully updated."
+msgstr "%s temaer ble oppdaterte."
+
+#: wp-admin/includes/template.php:2020
+msgid "This will replace the current editor content with the last backup version. You can use undo and redo in the editor to get the old content back or to return to the restored version."
+msgstr "Dette vil erstatte innholdet i redigereren med siste sikkerhetskopierte versjon. Du kan bruke angre og gjør om i redigereren for å få tilbake det gamle innholdet eller å gå tilbake til den gjenopprettede versjonen."
+
+#: wp-admin/includes/template.php:1498
+msgid "Close media attachment panel"
+msgstr "Lukk medievedleggspanelet"
+
+#: wp-admin/includes/file.php:46
+msgid "Embed Template"
+msgstr "Mal for innbygging"
+
+#: wp-admin/includes/file.php:47
+msgid "Embed 404 Template"
+msgstr "Mal for innbygging ved 404"
+
+#: wp-admin/includes/file.php:48
+msgid "Embed Content Template"
+msgstr "Mal for innbyggingsinnhold"
+
+#: wp-admin/includes/file.php:49
+msgid "Embed Header Template"
+msgstr "Mal for innbyggingsheader"
+
+#: wp-admin/includes/file.php:50
+msgid "Embed Footer Template"
+msgstr "Mal for innbyggingsfooter"
+
+#: wp-admin/includes/menu.php:342 wp-admin/my-sites.php:16
+msgid "Sorry, you are not allowed to access this page."
+msgstr "Beklager, du har ikke tilgang til denne siden."
+
+#: wp-admin/includes/meta-boxes.php:856
+msgid "Need help? Use the Help tab above the screen title."
+msgstr "Trenger du hjelp? Bruk hjelpfanen over skjermtittelen."
+
+#: wp-admin/includes/ms.php:1067
+msgid "Info"
+msgstr "Info"
+
+#: wp-admin/includes/ajax-actions.php:3579
+#: wp-admin/includes/ajax-actions.php:3674
+#: wp-admin/includes/ajax-actions.php:3777
+msgid "No plugin specified."
+msgstr "Ingen utvidelser spesifisert."
+
+#: wp-admin/includes/ajax-actions.php:3589 wp-admin/plugin-install.php:18
+#: wp-admin/update.php:96 wp-admin/update.php:144
+msgid "Sorry, you are not allowed to install plugins on this site."
+msgstr "Beklager, du har ikke lov til å installere utvidelser på dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3688 wp-admin/update.php:24
+#: wp-admin/update.php:50 wp-admin/update.php:71
+msgid "Sorry, you are not allowed to update plugins for this site."
+msgstr "Beklager, du har ikke lov til å oppdatere utvidelser på dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3789 wp-admin/plugins.php:231
+msgid "Sorry, you are not allowed to delete plugins for this site."
+msgstr "Beklager, du har ikke lov til å slette utvidelser på dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3827
+msgid "Plugin could not be deleted."
+msgstr "Utvidelse kunne ikke slettes."
+
+#: wp-admin/includes/ajax-actions.php:3857
+#: wp-admin/includes/ajax-actions.php:3900 wp-admin/plugins.php:13
+msgid "Sorry, you are not allowed to manage plugins for this site."
+msgstr "Beklager, du har ikke lov til å håndtere utvidelser på dette nettstedet."
+
+#: wp-admin/includes/bookmark.php:32 wp-admin/includes/bookmark.php:315
+#: wp-admin/link-manager.php:12 wp-admin/link-manager.php:71
+msgid "Sorry, you are not allowed to edit the links for this site."
+msgstr "Beklager, du har ikke lov til å redigere lenker på dette nettstedet."
+
+#: wp-admin/includes/class-wp-media-list-table.php:488
+msgid "(Private post)"
+msgstr "(Privat innlegg)"
+
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:476
+msgctxt "plugin"
+msgid "Active"
+msgstr "Aktive"
+
+#: wp-admin/includes/ajax-actions.php:3319
+#: wp-admin/includes/ajax-actions.php:3426
+#: wp-admin/includes/ajax-actions.php:3511
+msgid "No theme specified."
+msgstr "Ingen temaer er valgt."
+
+#: wp-admin/includes/ajax-actions.php:3331 wp-admin/theme-install.php:16
+#: wp-admin/update.php:219 wp-admin/update.php:249
+msgid "Sorry, you are not allowed to install themes on this site."
+msgstr "Beklager, du har ikke lov til å installere temaer på dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3493
+msgid "Update failed."
+msgstr "Oppdatering feilet."
+
+#: wp-admin/includes/ajax-actions.php:3522
+msgid "Sorry, you are not allowed to delete themes on this site."
+msgstr "Beklager, du har ikke lov til å slette temaer på dette nettstedet."
+
+#: wp-admin/includes/ajax-actions.php:3558
+msgid "Theme could not be deleted."
+msgstr "Tema kunne ikke slettes."
+
+#: wp-admin/edit.php:197
+msgid "You can filter the list of posts by post status using the text links above the posts list to only show posts with that status. The default view is to show all posts."
+msgstr "Du kan filtrere listen med innlegg etter innleggsstatus ved å bruke tekstlenkene over innleggslisten. Som standard vises alle innlegg."
+
+#: wp-admin/export.php:13
+msgid "Sorry, you are not allowed to export the content of this site."
+msgstr "Beklager, du har ikke lov til å eksportere innholdet på dette nettstedet."
+
+#: wp-admin/custom-header.php:969
+msgid "Sorry, you are not allowed to customize headers."
+msgstr "Beklager, du har ikke lov til å redigere sidetopper."
+
+#: wp-admin/customize.php:126
+msgid "Close the Customizer and go back to the previous page"
+msgstr "Lukk tilpasseren og gå tilbake til forrige side"
+
+#. translators: %s: taxonomy name
+#: wp-admin/edit-tag-form.php:79 wp-admin/edit-tag-form.php:84
+msgctxt "admin screen"
+msgid "← Back to %s"
+msgstr "← Tilbake til %s"
+
+#: wp-admin/admin.php:261 wp-admin/import.php:15
+msgid "Sorry, you are not allowed to import content."
+msgstr "Beklager, du har ikke lov til å importere innhold."
+
+#: wp-admin/credits.php:122
msgid "Release Design Lead"
msgstr "Designansvarlig for utgivelse"
-#: wp-admin/credits.php:122
+#: wp-admin/credits.php:123
msgid "Release Deputy"
msgstr "Utgivelsesansvarlig"
-#. translators: %s: URL to customizer
-#: wp-admin/about.php:86
-msgid "Preview mobile, tablet, and desktop views directly in the customizer."
-msgstr "Forhåndsvis mobil-, nettbrett- og desktop-visninger direkte i tilpasseren."
-
-#: wp-admin/about.php:90
-msgid "Preview mobile, tablet, and desktop views directly in the customizer."
-msgstr "Forhåndsvis mobil-, nettbrett-, og desktop-visninger direkte i tilpasseren."
-
-#: wp-admin/about.php:80
-msgid "Make sure your site looks great on all screens!"
-msgstr "Forsikre deg om at ditt nettsted ser bra ut på alle skjermer!"
-
-#. translators: %s: URL to the development post of the new feature
-#: wp-admin/about.php:176
-msgid "Embed templates have been split into parts and can be directly overridden by themes via the template hierarchy."
-msgstr "Innebygde maler har blitt delt opp i «parts» og kan bli direkte overstyrt av temaer via malhierarkiet."
-
-#: wp-admin/about.php:172
-msgid "Better Embed Templates"
-msgstr "Bedre innebygde maler"
-
-#. translators: 1: URL to Menus section of the customizer, 2: URL to Widgets
-#. section of the customizer
-#: wp-admin/about.php:136
-msgid "See it in action with Menus or Widgets."
-msgstr "Se det med Menyer eller Widgeter."
-
-#: wp-admin/about.php:155
+#: wp-admin/about.php:173
msgid "JavaScript Library Updates"
msgstr "Oppdateringer av JavaScript-bibliotek"
-#: wp-admin/about.php:156
-msgid "jQuery 1.12.3, jQuery Migrate 1.4.0, Backbone 1.2.3, and Underscore 1.8.3 are bundled."
-msgstr "jQuery 1.12.3, jQuery Migrate 1.4.0, Backbone 1.2.3 og Underscore 1.8.3 følger med."
-
-#: wp-admin/about.php:162
-msgid "Script Loader Improvements"
-msgstr "Forbedret skript-laster"
-
-#. translators: %s: URL to the development post of the new feature
-#: wp-admin/about.php:123
-msgid "The customizer now supports a comprehensive framework for rendering parts of the preview without rewriting your PHP code in JavaScript."
-msgstr "Tilpasseren støtter nå et omfattende rammeverk for å rendre deler av forhåndsvisningen uten å skrive om PHP-koden i JavaScript."
-
-#. translators: %s: URL to Menus section of the customizer
-#: wp-admin/about.php:130
-msgid "See it in action with Menus."
-msgstr "Se det in action med Menyer."
-
-#: wp-admin/about.php:106
-msgid "The Twenty Fifteen and Twenty Sixteen themes have been updated to support custom logos, which can be found in the Site Identity section of the customizer."
-msgstr "Temaene Twenty Fifteen og Twenty Sixteen har blitt oppdatert for å støtte tilpassede logoer, som du finner igjen i Nettstedsidentitet-seksjonen i tilpasseren."
-
-#: wp-admin/about.php:145
-msgid "Smart Image Resizing"
-msgstr "Smart bildeskalering"
-
-#. translators: %s: URL to the development post of the new feature
-#: wp-admin/about.php:149
-msgid "Generated images now load up to 50% faster with no noticeable quality loss. It’s really cool."
-msgstr "Genererte bilder lastes nå ned opp til 50% raskere uten merkbart kvalitetstap. Det er ganske kult."
-
-#: wp-admin/about.php:119
-msgid "Selective Refresh"
-msgstr "Selektiv oppdatering"
-
-#. translators: %s: URL to Site Identity section of the customizer
#: wp-admin/about.php:102
-msgid "Your theme supports custom logos! Try it out right now in the Site Identity section of the customizer."
-msgstr "Temaet ditt støtter tilpassede logoer! Prøv det nå i Nettstedsidentitet-seksjonen i tilpasseren."
-
-#: wp-admin/about.php:96
-msgid "Custom Logos"
-msgstr "Tilpassede logoer"
-
-#: wp-admin/about.php:97
-msgid "Themes can now support logos for your business or brand."
-msgstr "Temaer kan nå støtte logoer for ditt selskap eller din merkevare."
-
-#: wp-admin/about.php:69
-msgid "Do you enjoy using formatting shortcuts for lists and headings? Now they’re even more useful, with horizontal lines and <code>."
-msgstr "Liker du å bruke snarveier for å lage lister og mellomtitler? Nå er de enda bedre å bruke, med horisontale linjer og <code>."
-
-#: wp-admin/about.php:76
-msgid "Customization Improvements"
-msgstr "Forbedret tematilpasser"
-
-#: wp-admin/about.php:79
-msgid "Live Responsive Previews"
-msgstr "Live responsiv forhåndsvisning"
-
-#: wp-admin/about.php:64
-msgid "Stay focused on your writing with a less distracting interface that keeps you in place and allows you to easily link to your content."
-msgstr "Hold fokuset på skriving med et mindre forstyrrende grensesnitt som hjelper deg å gjøre det du skal og enkelt lage lenker til ditt innhold."
-
-#: wp-admin/about.php:32 wp-admin/credits.php:23 wp-admin/freedoms.php:22
-msgid "Thank you for updating! WordPress %s streamlines your workflow, whether you’re writing or building your site."
-msgstr "Takk for at du oppdaterer! WordPress %s strømlinjeformer din arbeidsflyt, uansett om du skriver eller bygger ditt nettsted."
-
-#: wp-admin/about.php:60
-msgid "Editing Improvements"
+msgid "Editor Improvements"
msgstr "Forbedret redigering"
-#: wp-admin/about.php:63
-msgid "Inline Linking"
-msgstr "Innebygd lenking"
-
#. translators: %s: Codex URL
#: wp-admin/includes/meta-boxes.php:642
msgid "Custom fields can be used to add extra metadata to a post that you can use in your theme."
@@ -178,20 +591,6 @@ msgstr "Tekst-modus lar deg skrive inn HTML sammen med innleggets tekst. Merk at
msgid "Visual mode gives you an editor that is similar to a word processor. Click the Toolbar Toggle button to get a second row of controls."
msgstr "Visuell modus gir deg en tekstredigering som fungerer som en ordbehandler. Klikk på verktøylinjen for å vise en andre linje med kontroller."
-#. translators: 1: plugin name, 2: details URL, 3: accessibility text, 4:
-#. version number
-#: wp-admin/includes/update.php:351
-msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljer for versjon %4$s. Automatiske oppdateringer er ikke tilgjengelige for denne utvidelsen."
-
-#. translators: 1: plugin name, 2: details URL, 3: accessibility text, 4:
-#. version number
-#. translators: 1: theme name, 2: details URL, 3: accessibility text, 4:
-#. version number
-#: wp-admin/includes/update.php:342 wp-admin/includes/update.php:472
-msgid "There is a new version of %1$s available. View version %4$s details."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Se detaljer for versjon %4$s."
-
#. translators: %s: number of media files
#: wp-admin/upload.php:291
msgid "%s media file restored from the trash."
@@ -250,16 +649,16 @@ msgstr "Mediefil oppdatert."
#. translators: 1: theme name, 2: version number
#. translators: 1: theme name, 2: version number
#. translators: 1: plugin name, 2: version number
-#: wp-admin/includes/theme.php:174 wp-admin/includes/theme.php:183
-#: wp-admin/includes/theme.php:192 wp-admin/includes/update.php:346
-#: wp-admin/includes/update.php:355 wp-admin/includes/update.php:364
-#: wp-admin/includes/update.php:476 wp-admin/includes/update.php:485
-#: wp-admin/includes/update.php:494 wp-admin/update-core.php:288
+#: wp-admin/includes/theme.php:184 wp-admin/includes/theme.php:195
+#: wp-admin/includes/theme.php:206 wp-admin/includes/update.php:377
+#: wp-admin/includes/update.php:388 wp-admin/includes/update.php:399
+#: wp-admin/includes/update.php:522 wp-admin/includes/update.php:533
+#: wp-admin/includes/update.php:544 wp-admin/update-core.php:288
msgid "View %1$s version %2$s details"
msgstr "Se detaljer for %1$s versjon %2$s"
#. translators: 1: relative date, 2: time
-#: wp-admin/includes/dashboard.php:850
+#: wp-admin/includes/dashboard.php:860
msgctxt "dashboard"
msgid "%1$s, %2$s"
msgstr "%1$s, %2$s"
@@ -278,7 +677,7 @@ msgid "There is a pending change of your email to %s."
msgstr "Det er en ventende endring av din e-post til %s."
#. translators: %s: edit page url
-#: wp-admin/user-new.php:250
+#: wp-admin/user-new.php:251
msgid "User has been added to your site. Edit user"
msgstr "Bruker har blitt lagt til ditt nettsted. Rediger bruker"
@@ -286,35 +685,35 @@ msgstr "Bruker har blitt lagt til ditt nettsted. Rediger bruker
msgid "You can narrow the list by file type/status or by date using the dropdown menus above the media table."
msgstr "Du kan filtrere listen etter filtype, status eller dato ved å bruke nedtrekksmenyene over tabellen."
-#: wp-admin/themes.php:167
+#: wp-admin/themes.php:168
msgid "New theme activated."
msgstr "Nytt tema aktivert."
-#: wp-admin/themes.php:298
+#: wp-admin/themes.php:306
msgid "The following themes are installed but incomplete."
msgstr "Disse temaene er installerte men ufullstendige."
-#: wp-admin/themes.php:165
+#: wp-admin/themes.php:166
msgid "Settings saved and theme activated."
msgstr "Innstillinger lagret og tema aktivert."
-#: wp-admin/setup-config.php:191
+#: wp-admin/setup-config.php:193
msgid "The name of the database you want to use with WordPress."
msgstr "Navnet på databasen som du vil bruke med WordPress."
-#: wp-admin/setup-config.php:196
+#: wp-admin/setup-config.php:198
msgid "Your database username."
msgstr "Ditt databasebrukernavn."
-#: wp-admin/setup-config.php:201
+#: wp-admin/setup-config.php:203
msgid "Your database password."
msgstr "Ditt databasepassord."
#: wp-admin/term.php:38
-msgid "You are not allowed to manage this item."
-msgstr "Du har ikke tillatelse til å administrere dette."
+msgid "Sorry, you are not allowed to manage this item."
+msgstr "Beklager, du har ikke lov til å administrere dette."
-#: wp-admin/theme-install.php:79
+#: wp-admin/theme-install.php:80
msgid "https://wordpress.org/themes/"
msgstr "https://wordpress.org/themes/"
@@ -339,7 +738,7 @@ msgstr "Det er en ventende endring av admins e-post til %s."
msgid "Universal time (%1$s) is %2$s."
msgstr "Universell tid (%1$s) er %2$s."
-#: wp-admin/index.php:109
+#: wp-admin/index.php:119
msgid "Dismiss the welcome panel"
msgstr "Fjern velkomstpanel"
@@ -357,35 +756,31 @@ msgstr "Konstanten %s kan ikke være definert når WordPress installeres."
msgid "WordPress has been installed. Thank you, and enjoy!"
msgstr "WordPress har blitt installert. Takk, og lykke til!"
-#: wp-admin/includes/update.php:234
-msgid "WordPress %1$s is available! Please update now."
-msgstr "WordPress %1$s er tilgjengelig! Vennligst oppdater nå."
-
-#: wp-admin/includes/plugin-install.php:340
+#: wp-admin/includes/plugin-install.php:333
msgid "You are using a development version of WordPress. These feature plugins are also under development. Learn more."
msgstr "Du bruker en utviklerversjon av WordPress. Disse feature-utvidelsene er også under utvikling. Lær mer."
-#: wp-admin/includes/plugin-install.php:581
+#: wp-admin/includes/plugin-install.php:583
msgid "Reviews"
msgstr "Vurderinger"
-#: wp-admin/includes/plugin-install.php:582
+#: wp-admin/includes/plugin-install.php:584
msgid "Read all reviews on WordPress.org or write your own!"
msgstr "Les alle vurderinger på WordPress.org eller skriv dine egne!"
#. translators: 1: number of stars (used to determine singular/plural), 2:
#. number of reviews
-#: wp-admin/includes/plugin-install.php:588
+#: wp-admin/includes/plugin-install.php:590
msgid "Reviews with %1$d star: %2$s. Opens in a new window."
msgid_plural "Reviews with %1$d stars: %2$s. Opens in a new window."
msgstr[0] "Vurderinger med %1$d stjerne: %2$s. Åpnes i et nytt vindu."
msgstr[1] "Vurderinger med %1$d stjerner: %2$s. Åpnes i et nytt vindu."
-#: wp-admin/includes/post.php:1423
+#: wp-admin/includes/post.php:1420
msgid "Click the image to edit or update"
msgstr "Klikk bildet for å redigere eller oppdatere"
-#: wp-admin/includes/template.php:1488
+#: wp-admin/includes/template.php:1497
msgid "Attach to existing content"
msgstr "Legg ved til eksisterende innhold"
@@ -435,22 +830,22 @@ msgstr "Hjelp til miniatyrbildeinnstillinger"
#. translators: 1: type of comment, 2: post link, 3: notification if the
#. comment is pending
-#: wp-admin/includes/dashboard.php:714
+#: wp-admin/includes/dashboard.php:724
msgctxt "dashboard"
msgid "%1$s on %2$s %3$s"
msgstr "%1$s til %2$s %3$s"
-#: wp-admin/includes/dashboard.php:914
+#: wp-admin/includes/dashboard.php:924
msgid "View more comments"
msgstr "Vis flere kommentarer"
-#: wp-admin/includes/dashboard.php:1351
+#: wp-admin/includes/dashboard.php:1361
msgid "Dismiss the browser warning panel"
msgstr "Fjern nettleservarselpanelet"
#: wp-admin/includes/file.php:28
msgid "Taxonomy Template"
-msgstr "Taksonomi-mal"
+msgstr "Klassifiserings-mal"
#: wp-admin/includes/file.php:33
msgid "Date Template"
@@ -465,57 +860,57 @@ msgid "Single Page"
msgstr "Singel-side"
#. translators: Number of comments in moderation
-#: wp-admin/includes/dashboard.php:275
+#: wp-admin/includes/dashboard.php:283
msgctxt "comments"
msgid "%s comment in moderation"
msgid_plural "%s comments in moderation"
msgstr[0] "%s kommentar i moderasjonskø"
msgstr[1] "%s kommentarer i moderasjonskø"
-#: wp-admin/includes/dashboard.php:634
+#: wp-admin/includes/dashboard.php:641
msgid "View this comment"
msgstr "Vis denne kommentaren"
#. translators: %s: attachment title
-#: wp-admin/includes/class-wp-media-list-table.php:511
-#: wp-admin/includes/class-wp-media-list-table.php:691
+#: wp-admin/includes/class-wp-media-list-table.php:513
+#: wp-admin/includes/class-wp-media-list-table.php:693
msgid "Attach “%s” to existing content"
msgstr "Legg ved «%s» til eksisterende innhold"
#. translators: %s: attachment title
#. translators: %s: post title
-#: wp-admin/includes/class-wp-media-list-table.php:663
-#: wp-admin/includes/class-wp-media-list-table.php:720
-#: wp-admin/includes/class-wp-posts-list-table.php:1210
+#: wp-admin/includes/class-wp-media-list-table.php:665
+#: wp-admin/includes/class-wp-media-list-table.php:722
+#: wp-admin/includes/class-wp-posts-list-table.php:1238
msgid "Move “%s” to the Trash"
msgstr "Flytt «%s» til papirkurven"
#. translators: %s: attachment title
#. translators: %s: post title
-#: wp-admin/includes/class-wp-media-list-table.php:673
-#: wp-admin/includes/class-wp-media-list-table.php:731
-#: wp-admin/includes/class-wp-posts-list-table.php:1219
+#: wp-admin/includes/class-wp-media-list-table.php:675
+#: wp-admin/includes/class-wp-media-list-table.php:733
+#: wp-admin/includes/class-wp-posts-list-table.php:1247
msgid "Delete “%s” permanently"
msgstr "Slett «%s» permanent"
#. translators: %s: attachment title
#. translators: %s: post title
-#: wp-admin/includes/class-wp-media-list-table.php:712
-#: wp-admin/includes/class-wp-posts-list-table.php:1202
+#: wp-admin/includes/class-wp-media-list-table.php:714
+#: wp-admin/includes/class-wp-posts-list-table.php:1230
msgid "Restore “%s” from the Trash"
msgstr "Gjenopprett «%s» fra papirkurven"
-#: wp-admin/includes/class-wp-plugins-list-table.php:323
+#: wp-admin/includes/class-wp-plugins-list-table.php:332
msgid "No plugins found for “%s”."
msgstr "Ingen utvidelser funnet for «%s»."
-#: wp-admin/includes/class-wp-plugins-list-table.php:327
+#: wp-admin/includes/class-wp-plugins-list-table.php:336
msgid "Search for plugins in the WordPress Plugin Directory."
msgstr "Søk etter utvidelser i WordPress Plugin Directory."
#. translators: %s: post title
#. translators: %s: taxonomy term name
-#: wp-admin/includes/class-wp-posts-list-table.php:1191
+#: wp-admin/includes/class-wp-posts-list-table.php:1219
#: wp-admin/includes/class-wp-terms-list-table.php:448
msgid "Quick edit “%s” inline"
msgstr "Hurtigrediger «%s» inline"
@@ -530,21 +925,21 @@ msgstr "Slett «%s»"
msgid "View “%s” archive"
msgstr "Vis arkivet for «%s»"
-#: wp-admin/includes/class-wp-upgrader-skins.php:228
+#: wp-admin/includes/class-plugin-upgrader-skin.php:46
#: wp-admin/update-core.php:671 wp-admin/update-core.php:700
msgid "Update progress"
msgstr "Fremdrift"
-#: wp-admin/includes/class-wp-upgrader.php:2234
+#: wp-admin/includes/class-core-upgrader.php:31
msgid "Another update is currently in progress."
msgstr "En annen oppdatering kjøres nå."
-#: wp-admin/includes/class-wp-comments-list-table.php:585
-#: wp-admin/includes/dashboard.php:623
+#: wp-admin/includes/class-wp-comments-list-table.php:584
+#: wp-admin/includes/dashboard.php:631
msgid "Edit this comment"
msgstr "Rediger denne kommentaren"
-#: wp-admin/includes/class-wp-comments-list-table.php:589
+#: wp-admin/includes/class-wp-comments-list-table.php:588
msgid "Quick edit this comment inline"
msgstr "Hurtigrediger denne kommentaren inline"
@@ -562,27 +957,27 @@ msgstr "Papirkurv"
#. translators: %s: post title
#. translators: %s: taxonomy term name
#: wp-admin/includes/class-wp-media-list-table.php:377
-#: wp-admin/includes/class-wp-posts-list-table.php:884
+#: wp-admin/includes/class-wp-posts-list-table.php:912
#: wp-admin/includes/class-wp-terms-list-table.php:382
msgid "“%s” (Edit)"
msgstr "«%s» (rediger)"
#. translators: %s: title of the post the attachment is attached to
-#: wp-admin/includes/class-wp-media-list-table.php:499
+#: wp-admin/includes/class-wp-media-list-table.php:501
msgid "Detach from “%s”"
msgstr "Fjern fra «%s»"
-#: wp-admin/includes/class-wp-comments-list-table.php:571
+#: wp-admin/includes/class-wp-comments-list-table.php:570
msgid "Restore this comment from the spam"
msgstr "Gjenopprett denne kommentaren fra spam"
#. translators: %s: importer slug
-#: wp-admin/import.php:60
+#: wp-admin/import.php:64
msgid "The %s importer is invalid or is not installed."
msgstr "%s-importøren er ugyldig eller ikke installert."
#. translators: 1: user_login, 2: user_email
-#: wp-admin/includes/ajax-actions.php:294
+#: wp-admin/includes/ajax-actions.php:293
msgctxt "user autocomplete result"
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -621,27 +1016,27 @@ msgstr "Anbefalt bredde er %s."
msgid "Suggested height is %s."
msgstr "Anbefalt høyde er %s."
-#: wp-admin/user-new.php:456
+#: wp-admin/user-new.php:457
msgid "Send User Notification"
msgstr "Send varsling til bruker"
-#: wp-admin/user-new.php:457
+#: wp-admin/user-new.php:458
msgid "Send the new user an email about their account."
msgstr "Send en e-post til brukeren om den nye kontoen."
#. translators: %s: menu name
-#: wp-admin/nav-menus.php:835
+#: wp-admin/nav-menus.php:817
msgctxt "menu location"
msgid "(Currently set to: %s)"
msgstr "(Nå satt til: %s)"
#. translators: %s: WordPress version number
-#: wp-admin/about.php:211
+#: wp-admin/about.php:226
msgid "Version %s addressed one security issue."
msgstr "Version %s tettet et sikkerhetshull."
#. translators: %s: site link
-#: wp-admin/includes/schema.php:1015 wp-admin/includes/upgrade.php:160
+#: wp-admin/includes/schema.php:1010 wp-admin/includes/upgrade.php:160
msgid "Welcome to %s. This is your first post. Edit or delete it, then start blogging!"
msgstr "Velkommen til %s. Dette er ditt første innlegg. Rediger eller slett det, og start bloggingen!"
@@ -658,23 +1053,23 @@ msgstr "https://nb.gravatar.com/"
msgid "Profile Picture"
msgstr "Profilbilde"
-#: wp-admin/about.php:202
+#: wp-admin/about.php:217
msgid "Maintenance Releases"
msgstr "Vedlikeholdsutgivelser"
-#: wp-admin/about.php:205
+#: wp-admin/about.php:220
msgid "Security Releases"
msgstr "Sikkerhetsutgivelser"
-#: wp-admin/about.php:42 wp-admin/about.php:208
+#: wp-admin/about.php:223
msgid "Maintenance and Security Releases"
msgstr "Vedlikehold- og sikkerhetsutgivelser"
-#: wp-admin/options-permalink.php:190
+#: wp-admin/options-permalink.php:181
msgid "Plain"
msgstr "Standard"
-#: wp-admin/options-permalink.php:170
+#: wp-admin/options-permalink.php:161
msgid "WordPress offers you the ability to create a custom URL structure for your permalinks and archives. Custom URL structures can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started."
msgstr "WordPress lar deg lage tilpassede URL-strukturer for dine permalenker og arkiver. Tilpassede URL-strukturer kan bidra til bedre brukervennlighet, estetikk og kompatibilitet i dine lenker. Flere nøkkelord er tilgjengelige, og her er noen eksempler for å få deg i gang."
@@ -683,32 +1078,32 @@ msgid "Permalinks can contain useful information, such as the post date, title,
msgstr "Permalenker kan inneholde nyttig informasjon, som innleggsdato, titel, med mer. Du kan velge fra de anbefalte permalink-formatene, eller du kan lage ditt eget hvis du velger Egendefinert struktur."
#. translators: %s: Codex URL
-#: wp-admin/setup-config.php:168
+#: wp-admin/setup-config.php:170
msgid "Need more help? We got it."
msgstr "Trenger du mer hjelp? Se her."
#. translators: %s: localhost
-#: wp-admin/setup-config.php:208
+#: wp-admin/setup-config.php:210
msgid "You should be able to get this info from your web host, if %s doesn’t work."
msgstr "Det burde være mulig å få denne infoen fra din web-admin, hvis %s ikke fungerer."
#. translators: %s: wp-config.php
-#: wp-admin/setup-config.php:355
+#: wp-admin/setup-config.php:363
msgid "Sorry, but I can’t write the %s file."
-msgstr "Beklager men jeg kan ikke skrive filen %s."
+msgstr "Beklager, men jeg kan ikke skrive %s-filen."
#. translators: %s: wp-config.php
-#: wp-admin/setup-config.php:359
+#: wp-admin/setup-config.php:367
msgid "You can create the %s manually and paste the following text into it."
msgstr "Du kan lage %s manuelt og lime inn følgende tekst i den."
#. translators: 1: wp-config-sample.php, 2: wp-config.php
-#: wp-admin/setup-config.php:161
+#: wp-admin/setup-config.php:163
msgid "If for any reason this automatic file creation doesn’t work, don’t worry. All this does is fill in the database information to a configuration file. You may also simply open %1$s in a text editor, fill in your information, and save it as %2$s."
msgstr "Hvis, av en eller annen grunn, den automatiske filopprettingen ikke fungerer, ikke vær urolig. Alt dette gjør er å fylle inn databaseinformasjonen i en konfigurasjonsfil. Du kan også enkelt åpne %1$s i en tekstredigerer, fylle inn din informasjon, og lagre den som %2$s."
#. translators: %s: wp-config.php
-#: wp-admin/setup-config.php:155
+#: wp-admin/setup-config.php:157
msgid "We’re going to use this information to create a %s file."
msgstr "Vi vil bruke denne informasjonen for å lage filen %s."
@@ -718,26 +1113,26 @@ msgid "Default is %s"
msgstr "Standard er %s"
#. translators: %s: style.css
-#: wp-admin/includes/class-wp-upgrader.php:1720
+#: wp-admin/includes/class-theme-upgrader.php:451
msgid "The theme is missing the %s stylesheet."
msgstr "Temaet mangler stilarket %s."
#. translators: %s: style.css
-#: wp-admin/includes/class-wp-upgrader.php:1731
+#: wp-admin/includes/class-theme-upgrader.php:462
msgid "The %s stylesheet doesn’t contain a valid theme header."
msgstr "Stilarket %s inneholder ikke en gyldig temabeskrivelse."
#. translators: %s: index.php
-#: wp-admin/includes/class-wp-upgrader.php:1741
+#: wp-admin/includes/class-theme-upgrader.php:472
msgid "The theme is missing the %s file."
msgstr "Temaet mangler filen %s."
#. translators: 1: .po 2: .mo
-#: wp-admin/includes/class-wp-upgrader.php:2173
+#: wp-admin/includes/class-language-pack-upgrader.php:338
msgid "The language pack is missing either the %1$s or %2$s files."
msgstr "Språkpakken mangler enten filen %1$s- eller %2$s-filene."
-#: wp-admin/theme-install.php:167
+#: wp-admin/theme-install.php:169
msgid "If you have marked themes as favorites on WordPress.org, you can browse them here."
msgstr "Hvis du har merket temaer som favoritter på WordPress.org, kan du finne dem her."
@@ -745,52 +1140,52 @@ msgstr "Hvis du har merket temaer som favoritter på WordPress.org, kan du finne
msgid "Allow automatic database repair"
msgstr "Tillat automatisk databasereparasjon"
-#: wp-admin/maint/repair.php:68
+#: wp-admin/maint/repair.php:74
msgid "Database repair results"
msgstr "Resultater fra databasereparasjon"
-#: wp-admin/theme-install.php:150
+#: wp-admin/theme-install.php:152
msgctxt "themes"
msgid "Favorites"
msgstr "Favoritter"
-#: wp-admin/maint/repair.php:60
+#: wp-admin/maint/repair.php:66
msgid "Check secret keys"
msgstr "Sjekk hemmelige nøkler"
-#: wp-admin/maint/repair.php:151
+#: wp-admin/maint/repair.php:157
msgid "WordPress database repair"
msgstr "WordPress databasereparasjon"
-#: wp-admin/setup-config.php:144
+#: wp-admin/setup-config.php:146
msgid "Before getting started"
msgstr "Før du setter i gang"
-#: wp-admin/setup-config.php:184
+#: wp-admin/setup-config.php:186
msgid "Set up your database connection"
msgstr "Sett opp din databasetilkobling"
-#: wp-admin/setup-config.php:396
+#: wp-admin/setup-config.php:404
msgid "Successful database connection"
msgstr "Vellykket databasetilkobling"
#. translators: %s: walker class name
-#: wp-admin/includes/nav-menu.php:905
+#: wp-admin/includes/nav-menu.php:925
msgid "The Walker class named %s does not exist."
msgstr "Walker-klassen med navnet %s finnes ikke."
#. translators: %s: nav menu title
-#: wp-admin/includes/nav-menu.php:1052
+#: wp-admin/includes/nav-menu.php:1074
msgid "%s has been updated."
msgstr "%s har blitt oppdatert."
#. translators: 1: drop-in constant name, 2: wp-config.php
-#: wp-admin/includes/class-wp-plugins-list-table.php:543
+#: wp-admin/includes/class-wp-plugins-list-table.php:583
msgid "Requires %1$s in %2$s file."
msgstr "Krever %1$s i filen %2$s."
#. translators: %s: file name
-#: wp-admin/includes/media.php:1494
+#: wp-admin/includes/media.php:1496
msgid "You are about to delete %s."
msgstr "Du er i ferd med å slette %s."
@@ -805,13 +1200,13 @@ msgid "Standard time begins on: %s."
msgstr "Standardtid starter %s."
#. translators: %s: mu-plugins directory name
-#: wp-admin/includes/class-wp-plugins-list-table.php:462
+#: wp-admin/includes/class-wp-plugins-list-table.php:502
msgid "Files in the %s directory are executed automatically."
msgstr "Filer i mappen %s kjøres automatisk."
#: wp-admin/edit-tags.php:21 wp-admin/edit-tags.php:27 wp-admin/options.php:50
-msgid "You are not allowed to manage these items."
-msgstr "Du har ikke tillatelse til å administrere dette innholdet."
+msgid "Sorry, you are not allowed to manage these items."
+msgstr "Beklager, du har ikke lov til å administrere dette."
#: wp-admin/widgets.php:436
msgid "This will clear all items from the inactive widgets list. You will not be able to restore any customizations."
@@ -837,10 +1232,6 @@ msgstr "Tøm inaktive widgeter"
msgid "Filter users list"
msgstr "Filtrer brukerliste"
-#: wp-admin/user-new.php:16 wp-admin/user-new.php:56
-msgid "You do not have sufficient permissions to add users to this network."
-msgstr "Du har ikke tilstrekkelige tillatelser til å legge brukere til dette nettverket."
-
#: wp-admin/upload.php:212
msgid "Filter media items list"
msgstr "Filtrer mediefilliste"
@@ -853,32 +1244,28 @@ msgstr "Navigasjon for mediefilliste"
msgid "Media items list"
msgstr "Mediefilliste"
-#: wp-admin/user-new.php:23 wp-admin/user-new.php:110
-msgid "You are not allowed to create users."
-msgstr "Du har ikke tillatelse til å opprette brukere."
-
#. translators: %s: file extension
#: wp-admin/theme-editor.php:226
msgid "%s files"
msgstr "%s filer"
-#: wp-admin/theme-install.php:139
+#: wp-admin/theme-install.php:141
msgid "Filter themes list"
msgstr "Filtrer temaliste"
-#: wp-admin/theme-install.php:205
+#: wp-admin/theme-install.php:207
msgid "Themes list"
msgstr "Temaliste"
-#: wp-admin/themes.php:343
+#: wp-admin/themes.php:351
msgid "Install Parent Theme"
msgstr "Installer foreldretema"
-#: wp-admin/plugins.php:460
+#: wp-admin/plugins.php:459
msgid "The selected plugin has been deleted."
msgstr "Den valgte utvidelsen har blitt slettet."
-#: wp-admin/plugins.php:477
+#: wp-admin/plugins.php:476
msgid "All selected plugins are up to date."
msgstr "Alle valgte utvidelser er oppdaterte."
@@ -902,19 +1289,19 @@ msgstr "Redigerer %s (inaktiv)"
msgid "Browsing %s (inactive)"
msgstr "Blar i %s (inaktiv)"
-#: wp-admin/plugin-install.php:92 wp-admin/plugins.php:401
+#: wp-admin/plugin-install.php:103 wp-admin/plugins.php:400
msgid "Filter plugins list"
msgstr "Filtrer utvidelsesliste"
-#: wp-admin/plugin-install.php:93 wp-admin/plugins.php:402
+#: wp-admin/plugin-install.php:104 wp-admin/plugins.php:401
msgid "Plugins list navigation"
msgstr "Navigasjon for utvidelsesliste"
-#: wp-admin/plugin-install.php:94 wp-admin/plugins.php:403
+#: wp-admin/plugin-install.php:105 wp-admin/plugins.php:402
msgid "Plugins list"
msgstr "Utvidelsesliste"
-#: wp-admin/options-permalink.php:263
+#: wp-admin/options-permalink.php:254
msgid "Documentation on Nginx configuration."
msgstr "Dokumentasjon om Nginx-konfigurasjon."
@@ -932,7 +1319,7 @@ msgstr "Legg til nytt"
msgid "Links list"
msgstr "Lenkeliste"
-#: wp-admin/includes/template.php:1031
+#: wp-admin/includes/template.php:1039
msgid "Toggle panel: %s"
msgstr "Veksle panel: %s"
@@ -945,36 +1332,36 @@ msgstr "Hent versjon %s"
msgid "The %1$s plugin header is deprecated. Use %2$s instead."
msgstr "Utvidelsestoppen %1$s er utgått. Bruk %2$s isteden."
-#: wp-admin/includes/post.php:1345
+#: wp-admin/includes/post.php:1344
msgid "Edit permalink"
msgstr "Rediger permalenke"
-#: wp-admin/includes/post.php:1615
+#: wp-admin/includes/post.php:1617
msgid "Saving revision…"
msgstr "Lagrer revisjon…"
#. translators: user login
-#: wp-admin/includes/ms.php:1044
+#: wp-admin/includes/ms.php:948
msgid "What should be done with content owned by %s?"
msgstr "Hva skal gjøres med innhold som er eid av %s?"
-#: wp-admin/includes/ms.php:1052
+#: wp-admin/includes/ms.php:956
msgid "Select a user"
msgstr "Velg en bruker"
-#: wp-admin/includes/ms.php:1067
+#: wp-admin/includes/ms.php:971
msgid "Site: %s"
msgstr "Nettsted: %s"
-#: wp-admin/includes/ms.php:1080
+#: wp-admin/includes/ms.php:984
msgid "User has no sites or content and will be deleted."
msgstr "Brukeren har ingen nettsteder eller innhold og vil bli slettet."
-#: wp-admin/includes/ms.php:1094
+#: wp-admin/includes/ms.php:998
msgid "Once you hit “Confirm Deletion”, the user will be permanently removed."
msgstr "Når du klikker på «Bekreft sletting», vil brukeren bli slettet permanent."
-#: wp-admin/includes/ms.php:1096
+#: wp-admin/includes/ms.php:1000
msgid "Once you hit “Confirm Deletion”, these users will be permanently removed."
msgstr "Når du klikker på «Bekreft sletting», vil brukerne bli slettet permanent."
@@ -986,58 +1373,58 @@ msgstr "Temabunn (footer)"
msgid "Theme Header"
msgstr "Tematopp (header)"
-#: wp-admin/includes/media.php:858
+#: wp-admin/includes/media.php:860
msgid "Invalid image URL"
msgstr "Ugyldig bilde-URL"
-#: wp-admin/includes/ms.php:1010
+#: wp-admin/includes/ms.php:914
msgid "You have chosen to delete the user from all networks and sites."
msgstr "Du har valgt å slette brukeren fra alle nettverker og nettsteder."
-#: wp-admin/includes/ms.php:1012
+#: wp-admin/includes/ms.php:916
msgid "You have chosen to delete the following users from all networks and sites."
msgstr "Du har valgt å slette disse brukerne fra alle nettverker og nettsteder."
-#: wp-admin/includes/ms.php:1027
+#: wp-admin/includes/ms.php:931
msgid "Warning! User %s cannot be deleted."
msgstr "Advarsel! Brukeren %s kan ikke slettes."
-#: wp-admin/includes/ms.php:1031
+#: wp-admin/includes/ms.php:935
msgid "Warning! User cannot be deleted. The user %s is a network administrator."
msgstr "Advarsel! Bruker kan ikke slettes. Brukeren %s er nettverksadmin."
-#: wp-admin/includes/class-wp-screen.php:705
+#: wp-admin/includes/class-wp-screen.php:703
msgid "Items list navigation"
msgstr "Navigasjon for innholdsliste"
-#: wp-admin/includes/class-wp-screen.php:706
+#: wp-admin/includes/class-wp-screen.php:704
msgid "Items list"
msgstr "Innholdsliste"
-#: wp-admin/includes/class-wp-screen.php:923
+#: wp-admin/includes/class-wp-screen.php:921
msgid "Additional settings"
msgstr "Flere innstillinger"
-#: wp-admin/includes/class-wp-screen.php:1032
+#: wp-admin/includes/class-wp-screen.php:1030
msgid "Boxes"
msgstr "Bokser"
-#: wp-admin/includes/class-wp-screen.php:1121
+#: wp-admin/includes/class-wp-screen.php:1119
msgid "%s column"
msgid_plural "%s columns"
msgstr[0] "%s kolonne"
msgstr[1] "%s kolonner"
-#: wp-admin/includes/class-wp-screen.php:1181
+#: wp-admin/includes/class-wp-screen.php:1179
msgid "Pagination"
msgstr "Paginering"
-#: wp-admin/includes/class-wp-screen.php:1228
+#: wp-admin/includes/class-wp-screen.php:1226
msgid "View Mode"
msgstr "Visningsmodus"
#. translators: 1: Title of an update, 2: Error message
-#: wp-admin/includes/class-wp-upgrader-skins.php:286
+#: wp-admin/includes/class-bulk-upgrader-skin.php:42
msgid "An error occurred while updating %1$s: %2$s"
msgstr "En feil skjedde når %1$s ble oppdatert: %2$s"
@@ -1045,23 +1432,23 @@ msgstr "En feil skjedde når %1$s ble oppdatert: %2$s"
msgid "No role"
msgstr "Ingen rolle"
-#: wp-admin/includes/class-wp-users-list-table.php:546
+#: wp-admin/includes/class-wp-users-list-table.php:548
msgctxt "no user roles"
msgid "None"
msgstr "Ingen"
-#: wp-admin/includes/dashboard.php:557
+#: wp-admin/includes/dashboard.php:565
msgid "View all drafts"
msgstr "Vis alle kladder"
#. translators: 1: comment author, 2: notification if the comment is pending
-#: wp-admin/includes/dashboard.php:685
+#: wp-admin/includes/dashboard.php:695
msgid "From %1$s %2$s"
msgstr "Fra %1$s %2$s"
#. translators: date and time format for recent posts on the dashboard, from a
-#. different calendar year, see http://php.net/date
-#: wp-admin/includes/dashboard.php:837
+#. different calendar year, see https://secure.php.net/date
+#: wp-admin/includes/dashboard.php:847
msgid "M jS Y"
msgstr "j. M Y"
@@ -1070,12 +1457,12 @@ msgid "End date:"
msgstr "Sluttdato:"
#. translators: %s: the new user
-#: wp-admin/includes/ajax-actions.php:1348
+#: wp-admin/includes/ajax-actions.php:1364
msgid "User %s added"
msgstr "Bruker %s er lagt til"
#. translators: %s: all comments count
-#: wp-admin/includes/class-wp-comments-list-table.php:208
+#: wp-admin/includes/class-wp-comments-list-table.php:207
msgctxt "comments"
msgid "All (%s)"
msgid_plural "All (%s)"
@@ -1083,7 +1470,7 @@ msgstr[0] "Alle (%s)"
msgstr[1] "Alle (%s)"
#. translators: %s: pending comments count
-#: wp-admin/includes/class-wp-comments-list-table.php:215
+#: wp-admin/includes/class-wp-comments-list-table.php:214
msgctxt "comments"
msgid "Pending (%s)"
msgid_plural "Pending (%s)"
@@ -1091,7 +1478,7 @@ msgstr[0] "Ventende (%s)"
msgstr[1] "Ventende (%s)"
#. translators: %s: approved comments count
-#: wp-admin/includes/class-wp-comments-list-table.php:222
+#: wp-admin/includes/class-wp-comments-list-table.php:221
msgctxt "comments"
msgid "Approved (%s)"
msgid_plural "Approved (%s)"
@@ -1099,7 +1486,7 @@ msgstr[0] "Godkjent (%s)"
msgstr[1] "Godkjente (%s)"
#. translators: %s: spam comments count
-#: wp-admin/includes/class-wp-comments-list-table.php:229
+#: wp-admin/includes/class-wp-comments-list-table.php:228
msgctxt "comments"
msgid "Spam (%s)"
msgid_plural "Spam (%s)"
@@ -1107,14 +1494,14 @@ msgstr[0] "Spam (%s)"
msgstr[1] "Spam (%s)"
#. translators: %s: trashed comments count
-#: wp-admin/includes/class-wp-comments-list-table.php:236
+#: wp-admin/includes/class-wp-comments-list-table.php:235
msgctxt "comments"
msgid "Trash (%s)"
msgid_plural "Trash (%s)"
msgstr[0] "Kastet (%s)"
msgstr[1] "Kastede (%s)"
-#: wp-admin/includes/class-wp-comments-list-table.php:406
+#: wp-admin/includes/class-wp-comments-list-table.php:405
msgctxt "column name"
msgid "Submitted On"
msgstr "Sendt inn"
@@ -1128,24 +1515,24 @@ msgstr "Klarte ikke å initiere en SFTP subsystemsesjon med SSH2-serveren %s"
msgid "No pending comments"
msgstr "Ingen ventende kommentarer"
-#: wp-admin/includes/class-wp-plugins-list-table.php:578
+#: wp-admin/includes/class-wp-plugins-list-table.php:618
msgid "Network Active"
msgstr "Nettverksaktivert"
-#: wp-admin/includes/class-wp-plugins-list-table.php:582
+#: wp-admin/includes/class-wp-plugins-list-table.php:622
msgid "Network Only"
msgstr "Kun nettverk"
-#: wp-admin/includes/class-wp-press-this.php:1513
+#: wp-admin/includes/class-wp-press-this.php:1485
msgid "Saving…"
msgstr "Lagrer …"
-#: wp-admin/includes/class-wp-screen.php:704
+#: wp-admin/includes/class-wp-screen.php:702
msgid "Filter items list"
msgstr "Filtrer innholdsliste"
#. translators: %s: default category
-#: wp-admin/edit-tags.php:353
+#: wp-admin/edit-tags.php:584
msgid "Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s."
msgstr "Å slette en kategori sletter ikke innleggene i kategorien. Isteden får innleggene som kun hadde den slettede kategorien tilordnet kategorien %s."
@@ -1236,8 +1623,8 @@ msgid "The current theme does not support a flexible sized header image."
msgstr "Det aktive temaet støtter ikke et toppbilde med fleksibel størrelse."
#: wp-admin/edit-comments.php:14
-msgid "You are not allowed to edit comments."
-msgstr "Du har ikke lov til å redigere kommentarer."
+msgid "Sorry, you are not allowed to edit comments."
+msgstr "Beklager, du har ikke lov til å redigere kommentarer."
#. translators: 1: comments count 2: post title
#: wp-admin/edit-comments.php:121
@@ -1246,7 +1633,7 @@ msgstr "Kommentarer (%1$s) til «%2$s»"
#. translators: %s: comment link
#: wp-admin/comment.php:187
-#: wp-admin/includes/class-wp-comments-list-table.php:649
+#: wp-admin/includes/class-wp-comments-list-table.php:648
msgid "In reply to %s."
msgstr "Som svar til %s."
@@ -1254,10 +1641,6 @@ msgstr "Som svar til %s."
msgid "The current theme does not support uploading a custom header image."
msgstr "Det aktive temaet støtter ikke opplasting av et eget sidetopp-bilde."
-#: wp-admin/about.php:68
-msgid "Formatting Shortcuts"
-msgstr "Formateringssnarveier"
-
#: wp-admin/includes/user.php:464
msgid "You’re using the auto-generated password for your account. Would you like to change it?"
msgstr "Du bruker det autogenererte passordet for din konto. Ønsker du å endre det?"
@@ -1279,7 +1662,7 @@ msgstr "Mistet du telefonen eller glemte du å logge ut fra en offentlig datamas
msgid "Log Out Everywhere Else"
msgstr "Logg ut alle andre steder"
-#: wp-admin/user-edit.php:515 wp-admin/user-new.php:433
+#: wp-admin/user-edit.php:515 wp-admin/user-new.php:434
msgid "Cancel password change"
msgstr "Avbryt passordendring"
@@ -1324,7 +1707,7 @@ msgstr[1] "%s ventende kommentarer"
msgid "No comments"
msgstr "Ingen kommentarer"
-#: wp-admin/includes/ajax-actions.php:3207
+#: wp-admin/includes/ajax-actions.php:3181
msgid "Image could not be processed."
msgstr "Kunne ikke behandle bildet."
@@ -1335,77 +1718,51 @@ msgstr[0] "%s kommentar"
msgstr[1] "%s kommentarer"
#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:601
+#: wp-admin/includes/class-wp-plugins-list-table.php:641
msgid "Edit %s"
msgstr "Rediger %s"
-#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:563
-msgid "Network deactivate %s"
-msgstr "Nettverksdeaktiver %s"
-
-#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:568
-msgid "Network Activate %s"
-msgstr "Nettverksaktiver %s"
-
-#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:572
-#: wp-admin/includes/class-wp-plugins-list-table.php:593
-msgid "Delete %s"
-msgstr "Slett %s"
-
-#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:586
-msgid "Deactivate %s"
-msgstr "Deaktiver %s"
-
-#. translators: %s: plugin name
-#: wp-admin/includes/class-wp-plugins-list-table.php:589
-msgid "Activate %s"
-msgstr "Aktiver %s"
-
-#: wp-admin/install.php:171 wp-admin/user-edit.php:534
-#: wp-admin/user-new.php:451
+#: wp-admin/install.php:171 wp-admin/user-new.php:452
msgid "Confirm use of weak password"
msgstr "Bekreft bruk av svake passord"
#: wp-admin/install.php:167 wp-admin/user-edit.php:530
-#: wp-admin/user-new.php:447
+#: wp-admin/user-new.php:448
msgid "Confirm Password"
msgstr "Bekreft passord"
#. Translators: 1: wp-config.php; 2: Secret key service URL.
-#: wp-admin/maint/repair.php:63
+#: wp-admin/maint/repair.php:69
msgid "While you are editing your %1$s file, take a moment to make sure you have all 8 keys and that they are unique. You can generate these using the WordPress.org secret key service."
msgstr "Når du redigerer din %1$s-fil, bruk et minutt på å forsikre deg om at du har alle åtte (8) nøkler og at de er unike. Du kan generere disse ved å bruke Wordpress.org's secret key service."
-#: wp-admin/includes/class-wp-comments-list-table.php:617
+#: wp-admin/includes/class-wp-comments-list-table.php:616
#: wp-admin/includes/class-wp-list-table.php:524
-#: wp-admin/includes/class-wp-list-table.php:1324
+#: wp-admin/includes/class-wp-list-table.php:1325
+#: wp-admin/includes/update.php:679
msgid "Show more details"
msgstr "Vis flere detaljer"
-#: wp-admin/includes/class-wp-upgrader-skins.php:668
-#: wp-admin/includes/class-wp-upgrader-skins.php:747
+#: wp-admin/includes/class-theme-installer-skin.php:69
+#: wp-admin/includes/class-theme-upgrader-skin.php:59
msgid "Live Preview “%s”"
msgstr "Forhåndsvis “%s”"
-#: wp-admin/includes/class-wp-users-list-table.php:483
+#: wp-admin/includes/class-wp-users-list-table.php:485
msgid "%s post by this author"
msgid_plural "%s posts by this author"
msgstr[0] "%s innlegg av denne forfatteren"
msgstr[1] "%s innlegg av denne forfatteren"
-#: wp-admin/includes/class-wp-list-table.php:841
+#: wp-admin/includes/class-wp-list-table.php:842
msgid "Last page"
msgstr "Siste side"
-#: wp-admin/includes/class-wp-press-this.php:222
+#: wp-admin/includes/class-wp-press-this.php:223
msgid "This category already exists."
msgstr "Denne kategorien finnes allerede."
-#: wp-admin/includes/class-wp-press-this.php:1516
+#: wp-admin/includes/class-wp-press-this.php:1488
msgid "More actions"
msgstr "Flere handlinger"
@@ -1427,7 +1784,7 @@ msgstr "Kommentar til: %s"
msgid "In reply to: %s"
msgstr "Svar på: %s"
-#: wp-admin/includes/class-wp-list-table.php:798
+#: wp-admin/includes/class-wp-list-table.php:799
msgid "First page"
msgstr "Første side"
@@ -1443,7 +1800,7 @@ msgstr "learn more about embeds."
msgstr "Du kan også bygge inn media fra mange populære nettsteder som Twitter, YouTube, Flickr og andre ved å lime inn media-URL-en på en egen linje i et innlegg eller på en side. Vennligst sjekk ut Codex for å lære mer om innbygging."
-#: wp-admin/includes/dashboard.php:1492
+#: wp-admin/includes/dashboard.php:1502
msgid "https://codex.wordpress.org/First_Steps_With_WordPress"
msgstr "https://codex.wordpress.org/First_Steps_With_WordPress"
@@ -1451,11 +1808,11 @@ msgstr "https://codex.wordpress.org/First_Steps_With_WordPress"
msgid "Format — Post Formats designate how your theme will display a specific post. For example, you could have a standard blog post with a title and paragraphs, or a short aside that omits the title and contains a short text blurb. Please refer to the Codex for descriptions of each post format. Your theme could enable all or some of 10 possible formats."
msgstr "Format – Innleggsformater avgjør hvordan ditt tema vil vise et valgt innlegg. For eksempel kan du ha et standard-innlegg med tittel og tekst, eller en kort notis som ikke har tittel og kun har en liten tekst. Vennligst se Codex for beskrivelser av de ulike innleggsformatene. Ditt tema kan aktivere alle eller bare noen av de 10 mulige formatene."
-#: wp-admin/options-writing.php:169
+#: wp-admin/options-writing.php:177
msgid "WordPress is not notifying any Update Services because of your site’s visibility settings."
msgstr "WordPress sier ikke ifra til noen Oppdateringstjenester på grunn av ditt nettsteds synlighetsinnstillinger."
-#: wp-admin/edit-tags.php:277
+#: wp-admin/edit-tags.php:286
msgid "Documentation on Tags"
msgstr "Dokumentasjon om stikkord"
@@ -1471,11 +1828,11 @@ msgstr "Documentation on Managing Pages"
msgstr "Dokumentasjon om håndterering av sider"
-#: wp-admin/nav-menus.php:588
+#: wp-admin/nav-menus.php:570
msgid "Documentation on Menus"
msgstr "Dokumentasjon om menyer"
-#: wp-admin/import.php:28
+#: wp-admin/import.php:29
msgid "Documentation on Import"
msgstr "Dokumentasjon om import"
@@ -1491,11 +1848,11 @@ msgstr "Documentation on Widgets"
msgstr "Dokumentasjon om widgeter"
-#: wp-admin/index.php:88
+#: wp-admin/index.php:98
msgid "Documentation on Dashboard"
msgstr "Dokumentasjon om kontrollpanel"
-#: wp-admin/edit-tags.php:275
+#: wp-admin/edit-tags.php:284
msgid "Documentation on Link Categories"
msgstr "Dokumentasjon om lenkekategorier"
@@ -1503,15 +1860,15 @@ msgstr "Documentation on Managing Posts"
msgstr "Dokumentasjon om administrering av innlegg"
-#: wp-admin/edit-tags.php:273
+#: wp-admin/edit-tags.php:282
msgid "Documentation on Categories"
msgstr "Dokumentasjon om kategorier"
-#: wp-admin/plugin-install.php:87
+#: wp-admin/plugin-install.php:98
msgid "Documentation on Installing Plugins"
msgstr "Dokumentasjon om installering av utvidelser"
-#: wp-admin/user-new.php:205
+#: wp-admin/user-new.php:206
msgid "Documentation on Adding New Users"
msgstr "Dokumentasjon om å legge til nye brukere"
@@ -1631,7 +1988,7 @@ msgstr "Du kan oppdatere til Important: before updating, please back up your database and files. For help with updates, visit the Updating WordPress Codex page."
msgstr "Viktig: før du oppdaterer, vennligst ta sikkerhetskopi av databasen og filene dine. Hvis du trenger hjelp med oppdateringer, kan du gå til supportsiden Oppdatering av WordPress."
-#: wp-admin/theme-install.php:107
+#: wp-admin/theme-install.php:108
msgid "Documentation on Adding New Themes"
msgstr "Dokumentasjon om installering av nye temaer"
@@ -1651,12 +2008,12 @@ msgstr "
msgid "Documentation on Template Tags"
msgstr "Dokumentasjon om mal-tagger"
-#: wp-admin/plugins.php:396
+#: wp-admin/plugins.php:395
msgid "Documentation on Managing Plugins"
msgstr "Dokumentasjon om håndtering av utvidelser"
#. translators: %s: the option/setting
-#: wp-admin/options.php:201
+#: wp-admin/options.php:202
msgid "The %s setting is unregistered. Unregistered settings are deprecated. See https://codex.wordpress.org/Settings_API"
msgstr "innstillingen %s er uregistrert. Uregistrerte innstillinger er utgått. Se https://codex.wordpress.org/Settings_API"
@@ -1676,10 +2033,6 @@ msgstr "Du kan ikke oppdatere fordi WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s."
msgstr "Du kan ikke installere fordi WordPress %1$s krever PHP versjon %2$s eller høyere og MySQL versjon %3$s eller høyere. Du bruker PHP versjon %4$s og MySQL versjon %5$s."
-#: wp-admin/includes/update.php:236
-msgid "WordPress %1$s is available! Please notify the site administrator."
-msgstr "WordPress %1$s er tilgjengelig! Vennligst si ifra til nettstedets administrator."
-
#: wp-admin/install.php:238
msgid "You cannot install because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s."
msgstr "Du kan ikke installere fordi WordPress %1$s krever PHP versjon %2$s eller høyere. Du bruker versjon %3$s."
@@ -1696,19 +2049,19 @@ msgstr "Temaet du bruker støtter ikke widgeter. Dette betyr at temaet ikke har
msgid "You need to make this file writable before you can save your changes. See the Codex for more information."
msgstr "Du trenger å gjøre denne filen skrivbar før du kan lagre endringene dine. Se Codex for mer informasjon."
-#: wp-admin/options-writing.php:163
+#: wp-admin/options-writing.php:171
msgid "When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see Update Services on the Codex. Separate multiple service URLs with line breaks."
msgstr "Når du publiserer et nytt innlegg sier WordPress automatisk ifra til følgende oppdateringstjenester. For mer om dette, se oppdateringstjenester i Codex. Skill flere URL-er til oppdateringstjenester med linjeskift."
-#: wp-admin/options-permalink.php:266
+#: wp-admin/options-permalink.php:257
msgid "If your .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all."
msgstr "Hvis .htaccess filen din var skrivbar kunne vi gjort dette automatisk, men det er den ikke. Dette er de mod_rewrite-reglene du bør ha i .htaccess filen. Klikk i feltet, og trykk CTRL + a for å velge alt."
-#: wp-admin/options-permalink.php:254
+#: wp-admin/options-permalink.php:245
msgid "If the root directory of your site were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Create a new file, called web.config in the root directory of your site. Click in the field and press CTRL + a to select all. Then insert this code into the web.config file."
msgstr "Hvis toppnivået for nettstedet ditt var skrivbart kunne vi gjort dette automatisk, men det er det ikke. Dette er URL rewrite-regelen du bør ha i web.config filen. Lag en ny fil kalt web.config på toppnivået for nettstedet ditt. Klikk i feltet, og trykk CTRL + a for å velge alt. Lim deretter inn denne koden i web.config-filen."
-#: wp-admin/options-permalink.php:247
+#: wp-admin/options-permalink.php:238
msgid "If your web.config file were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Click in the field and press CTRL + a to select all. Then insert this rule inside of the /<configuration>/<system.webServer>/<rewrite>/<rules> element in web.config file."
msgstr "Hvis web.config filen din var skrivbar kunne vi gjort dette automatisk, men det er den ikke. Dette er URL rewrite-regelen du bør ha i web.config filen. Klikk i feltet, og trykk CTRL + a for å velge alt. Lim deretter inn denne regelen i /<configuration>/<system.webServer>/<rewrite>/<rules> elementet i web.config-filen."
@@ -1720,11 +2073,11 @@ msgstr "https://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments"
msgid "The character encoding of your site (UTF-8 is recommended)"
msgstr "tegnsettet til ditt nettsted (UTF-8 er anbefalt)"
-#: wp-admin/includes/class-wp-press-this.php:1521
+#: wp-admin/includes/class-wp-press-this.php:1493
msgid "Standard Editor"
msgstr "Standardredigering"
-#: wp-admin/includes/file.php:1204
+#: wp-admin/includes/file.php:1206
msgid "example: www.wordpress.org"
msgstr "eksempel: www.wordpress.org"
@@ -1732,11 +2085,11 @@ msgstr "eksempel: www.wordpress.org"
msgid "The search for installed themes will search for terms in their name, description, author, or tag."
msgstr "Søket etter installerte temaer søker etter nøkkelord i navn, beskrivelser, forfattere og stikkord."
-#: wp-admin/theme-install.php:82
+#: wp-admin/theme-install.php:83
msgid "Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it."
msgstr "Alternativt kan du bla i temaene som er fremhevet, populære eller nye. Når du finner et tema som du liker, kan du forhåndsvise det eller installere det."
-#: wp-admin/theme-install.php:81
+#: wp-admin/theme-install.php:82
msgid "You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter."
msgstr "Du kan søke etter temaer etter nøkkelord, forfatter eller stikkord, eller du kan gjøre et spesifikt søk med kriteriene som er opplistet i funksjonalitetsfilteret."
@@ -1764,20 +2117,20 @@ msgstr "Egendefinert datoformat:"
msgid "enter a custom date format in the following field"
msgstr "legg inn et egendefinert datoformat i det følgende feltet"
-#: wp-admin/includes/class-wp-upgrader.php:866
+#: wp-admin/includes/class-plugin-upgrader.php:58
msgid "Plugins updated successfully."
msgstr "Utvidelser oppdatert."
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:545
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:572
msgid "%s Active Installs"
msgstr "%s aktive installasjoner"
-#: wp-admin/includes/plugin-install.php:559
+#: wp-admin/includes/plugin-install.php:561
msgid "Active Installs:"
msgstr "Aktive installasjoner:"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:541
-#: wp-admin/includes/plugin-install.php:561
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:568
+#: wp-admin/includes/plugin-install.php:563
msgctxt "Active plugin installs"
msgid "1+ Million"
msgstr "1+ million"
@@ -1786,7 +2139,7 @@ msgstr "1+ million"
msgid "Press This is a little tool that lets you grab bits of the web and create new posts with ease."
msgstr "«Skriv om dette» er et lite verktøy som lar deg ta små biter fra nettet og enkelt skrive nye innlegg."
-#: wp-admin/includes/class-wp-media-list-table.php:500
+#: wp-admin/includes/class-wp-media-list-table.php:502
msgid "Detach"
msgstr "Koble fra"
@@ -1794,7 +2147,7 @@ msgstr "Koble fra"
msgid "Main menu"
msgstr "Hovedmeny"
-#: wp-admin/includes/file.php:1231
+#: wp-admin/includes/file.php:1251
msgid "Enter the location on the server where the public and private keys are located. If a passphrase is needed, enter that in the password field above."
msgstr "Legg inn hvor på tjeneren de offentlige og private nøklene er plassert. Hvis et passord er nødvendig, legg det inn i passordfeltet over."
@@ -1820,9 +2173,9 @@ msgstr "Slett utvidelser"
msgid "You are about to remove the following plugins:"
msgstr "Du er i ferd med å slette følgende utvidelser:"
-#: wp-admin/includes/ajax-actions.php:419
+#: wp-admin/includes/ajax-actions.php:435
#: wp-admin/includes/class-wp-list-table.php:763
-#: wp-admin/includes/class-wp-list-table.php:1349
+#: wp-admin/includes/class-wp-list-table.php:1350
msgid "%s item"
msgid_plural "%s items"
msgstr[0] "%s element"
@@ -1840,7 +2193,7 @@ msgstr "1 side ikke oppdatert, noen redigerer den."
msgid "1 post not updated, somebody is editing it."
msgstr "1 innlegg ikke oppdatert, noen redigerer det."
-#: wp-admin/includes/class-wp-press-this.php:1363
+#: wp-admin/includes/class-wp-press-this.php:1335
msgid "Hide post options"
msgstr "Skjul innleggsinnstillinger"
@@ -1848,11 +2201,11 @@ msgstr "Skjul innleggsinnstillinger"
msgid "In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key. In some cases the Esc key will need to be pressed twice before the Tab key will allow you to continue."
msgstr "Hvis du trykker på tab-tasten i redigeringsområdet vil du skrive inn et tabulatortegn. For å flytte fokus ved å trykke på tab, må du først trykke på esc, og deretter tab. I noen tilfeller må du trykke på esc to ganger før du kan trykke på tab for å fortsette."
-#: wp-admin/includes/template.php:1698
+#: wp-admin/includes/template.php:1714
msgid "Front Page"
msgstr "Forside"
-#: wp-admin/theme-install.php:278
+#: wp-admin/theme-install.php:309
msgid "This theme has not been rated yet."
msgstr "Dette temaet har ikke fått noen vurderinger ennå."
@@ -1897,17 +2250,13 @@ msgid "Install Press This"
msgstr "Installer Skriv om dette"
#. translators: date and time format for exact current time, mainly about
-#. timezones, see http://php.net/date
+#. timezones, see https://secure.php.net/date
#: wp-admin/options-general.php:21
msgctxt "timezone date format"
msgid "Y-m-d H:i:s"
msgstr "Y-m-d H:i:s"
-#: wp-admin/nav-menus.php:659
-msgid "Edit selected menu"
-msgstr "Rediger valgt meny"
-
-#: wp-admin/nav-menus.php:564
+#: wp-admin/nav-menus.php:546
msgid "To add a custom link, expand the Custom Links section, enter a URL and link text, and click Add to Menu"
msgstr "For å legge til en tilpasset lenke, utvid Tilpasset lenke-seksjonen, skriv inn en URL og en lenketekst og klikk på Legg til i meny"
@@ -1947,27 +2296,19 @@ msgstr ""
"Takk for at du brukte nettstedet,\n"
"-- ###SITE_NAME###"
-#. translators: 1: plugin name, 2: details URL, 3: accessibility text, 4:
-#. version number, 5: update URL, 6: accessibility text
-#. translators: 1: theme name, 2: details URL, 3: accessibility text, 4:
-#. version number, 5: update URL, 6: accessibility text
-#: wp-admin/includes/update.php:360 wp-admin/includes/update.php:490
-msgid "There is a new version of %1$s available. View version %4$s details or update now."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Se detaljer for versjon %4$s eller oppdater nå."
-
-#: wp-admin/includes/theme.php:613 wp-admin/themes.php:409
+#: wp-admin/includes/theme.php:618 wp-admin/themes.php:425
msgid "Close details dialog"
msgstr "Lukk detaljer-vinduet"
-#: wp-admin/includes/template.php:2085
+#: wp-admin/includes/template.php:2100
msgid "You are currently editing the page that shows your latest posts."
msgstr "Du redigerer nå siden som viser dine siste innlegg."
-#: wp-admin/includes/file.php:31 wp-admin/includes/template.php:1702
+#: wp-admin/includes/file.php:31 wp-admin/includes/template.php:1718
msgid "Posts Page"
msgstr "Innleggsside"
-#: wp-admin/includes/class-wp-screen.php:1141
+#: wp-admin/includes/class-wp-screen.php:1139
msgid "Number of items per page:"
msgstr "Antall innlegg per side:"
@@ -2052,7 +2393,7 @@ msgstr ""
"Vennlig hilsen\n"
"-- ###SITENAME### ###SITEURL###"
-#: wp-admin/includes/class-wp-upgrader.php:3540
+#: wp-admin/includes/class-wp-automatic-updater.php:865
msgid ""
"UPDATE LOG\n"
"=========="
@@ -2060,7 +2401,7 @@ msgstr ""
"OPPDATERINGSLOGG\n"
"================"
-#: wp-admin/includes/class-wp-upgrader.php:3522
+#: wp-admin/includes/class-wp-automatic-updater.php:847
msgid ""
"BETA TESTING?\n"
"=============\n"
@@ -2086,67 +2427,67 @@ msgstr ""
"\n"
"-- WordPress-teamet"
-#: wp-admin/includes/class-wp-press-this.php:1474
-#: wp-admin/includes/class-wp-press-this.php:1484
-#: wp-admin/includes/class-wp-press-this.php:1493
+#: wp-admin/includes/class-wp-press-this.php:1446
+#: wp-admin/includes/class-wp-press-this.php:1456
+#: wp-admin/includes/class-wp-press-this.php:1465
msgid "Back to post options"
msgstr "Tilbake til innleggsvalg"
-#: wp-admin/includes/class-wp-press-this.php:1411
+#: wp-admin/includes/class-wp-press-this.php:1383
msgid "Suggested media"
msgstr "Anbefalt medie"
-#: wp-admin/includes/class-wp-press-this.php:1406
-#: wp-admin/includes/class-wp-press-this.php:1407
+#: wp-admin/includes/class-wp-press-this.php:1378
+#: wp-admin/includes/class-wp-press-this.php:1379
msgid "Post title"
msgstr "Innleggstittel"
-#: wp-admin/includes/class-wp-press-this.php:1397
+#: wp-admin/includes/class-wp-press-this.php:1369
msgid "You should upgrade your bookmarklet to the latest version!"
msgstr "Du bør oppgradere ditt bokmerkeskript til nyeste versjon!"
-#: wp-admin/includes/class-wp-press-this.php:1371
+#: wp-admin/includes/class-wp-press-this.php:1343
msgid "Scan"
msgstr "Søk gjennom"
-#: wp-admin/includes/class-wp-press-this.php:1370
+#: wp-admin/includes/class-wp-press-this.php:1342
msgid "Enter a URL to scan"
msgstr "Skriv inn URL som skal søkes gjennom"
-#: wp-admin/includes/class-wp-press-this.php:1369
+#: wp-admin/includes/class-wp-press-this.php:1341
msgid "Scan site for content"
msgstr "Søk gjennom nettsted etter innhold"
-#: wp-admin/includes/class-wp-press-this.php:1274
+#: wp-admin/includes/class-wp-press-this.php:1246
msgid "Press This!"
msgstr "Skriv om dette!"
-#: wp-admin/includes/class-wp-press-this.php:1361
+#: wp-admin/includes/class-wp-press-this.php:1333
msgid "Show post options"
msgstr "Vis innleggsvalg"
-#: wp-admin/includes/class-wp-press-this.php:1169
+#: wp-admin/includes/class-wp-press-this.php:1141
msgctxt "Used in Press This to indicate where the content comes from."
msgid "Source:"
msgstr "Kilde:"
-#: wp-admin/includes/class-wp-press-this.php:917
+#: wp-admin/includes/class-wp-press-this.php:889
msgid "Search categories"
msgstr "Søk i kategorier"
-#: wp-admin/includes/class-wp-press-this.php:915
+#: wp-admin/includes/class-wp-press-this.php:887
msgid "Search categories by name"
msgstr "Søk i kategorier etter navn"
-#: wp-admin/includes/class-wp-press-this.php:890
+#: wp-admin/includes/class-wp-press-this.php:862
msgid "Toggle add category"
msgstr "Åpne eller lukke «Legg til kategori»"
-#: wp-admin/includes/class-wp-press-this.php:247
+#: wp-admin/includes/class-wp-press-this.php:248
msgid "Error while adding the category. Please try again later."
msgstr "Det skjedde en feil mens kategorien skulle legges til. Vennligst prøv igjen senere."
-#: wp-admin/includes/class-wp-press-this.php:240
+#: wp-admin/includes/class-wp-press-this.php:241
msgid "This category cannot be added. Please change the name and try again."
msgstr "Kategorien kunne ikke legges til. Vennligst endre navnet og prøv igjen."
@@ -2155,15 +2496,20 @@ msgctxt "revision date short format"
msgid "j M @ H:i"
msgstr "j. M @ H:i"
-#: wp-admin/includes/class-wp-posts-list-table.php:937
+#: wp-admin/includes/class-wp-posts-list-table.php:965
msgid "Y/m/d g:i:s a"
msgstr "Y-m-d H:i:s"
-#: wp-admin/includes/ajax-actions.php:3141
+#: wp-admin/includes/ajax-actions.php:3371
+#: wp-admin/includes/ajax-actions.php:3482
+#: wp-admin/includes/ajax-actions.php:3540
+#: wp-admin/includes/ajax-actions.php:3633
+#: wp-admin/includes/ajax-actions.php:3748
+#: wp-admin/includes/ajax-actions.php:3811
msgid "Unable to connect to the filesystem. Please confirm your credentials."
msgstr "Kunne ikke koble til filsystemet. Vennligst bekreft din innloggingsinformasjon."
-#. translators: Publish box date format, see http://php.net/date
+#. translators: Publish box date format, see https://secure.php.net/date
#: wp-admin/edit-form-advanced.php:133 wp-admin/edit-form-comment.php:93
#: wp-admin/includes/meta-boxes.php:174 wp-admin/includes/meta-boxes.php:300
#: wp-admin/includes/revision.php:207 wp-admin/includes/revision.php:249
@@ -2176,7 +2522,7 @@ msgstr "Sendt inn"
#. translators: column name or table row header
#: wp-admin/comment.php:169
-#: wp-admin/includes/class-wp-comments-list-table.php:403
+#: wp-admin/includes/class-wp-comments-list-table.php:402
msgid "In Response To"
msgstr "Som svar til"
@@ -2184,7 +2530,7 @@ msgstr "Som svar til"
msgid "You are only logged in at this location."
msgstr "Du er bare innlogget herfra."
-#: wp-admin/includes/plugin-install.php:336
+#: wp-admin/includes/plugin-install.php:329
msgid "These suggestions are based on the plugins you and other users have installed."
msgstr "Disse anbefalingene er basert på utvidelsene som du og andre brukere har installert."
@@ -2201,7 +2547,7 @@ msgctxt "Plugin Installer"
msgid "Recommended"
msgstr "Anbefalte"
-#: wp-admin/includes/upgrade.php:372
+#: wp-admin/includes/upgrade.php:376
msgid ""
"Your new WordPress site has been successfully set up at:\n"
"\n"
@@ -2233,14 +2579,10 @@ msgstr ""
"--WordPress-teamet\n"
"https://wordpress.org/\n"
-#: wp-admin/themes.php:172
+#: wp-admin/themes.php:173
msgid "You cannot delete a theme while it has an active child theme."
msgstr "Du kan ikke slette et tema mens det har et aktivt dattertema."
-#: wp-admin/nav-menus.php:606 wp-admin/widgets.php:360
-msgid "Manage in Customizer"
-msgstr "Håndter i Tilpasseren"
-
#: wp-admin/options-general.php:33
msgid "You can set the language, and the translation files will be automatically downloaded and installed (available if your filesystem is writable)."
msgstr "Du kan bestemme språket, og oversettelsen vil bli lastet ned og installert automatisk (hvis WordPress kan skrive til ditt filsystem)."
@@ -2253,27 +2595,20 @@ msgstr "Mystisk person"
msgid "Usernames can have only alphanumeric characters, spaces, underscores, hyphens, periods, and the @ symbol."
msgstr "Brukernavn kan kun ha alfanumeriske tegn, mellomrom, understreker, bindestreker, kommaer og @-symbolet."
-#: wp-admin/index.php:74
-msgid "WordPress News — Latest news from the official WordPress project, the WordPress Planet."
-msgstr "WordPress-nyheter – De siste nyhetene fra det offisielle WordPress-prosjektet, WordPress-planeten."
-
-#: wp-admin/index.php:72
-msgid "WordPress News — Latest news from the official WordPress project, the WordPress Planet, and popular and recent plugins."
-msgstr "WordPress News — De siste nyhetene fra det offisielle WordPress-prosjektet, WordPress Planet, og populære og nye utvidelser."
-
-#: wp-admin/includes/class-wp-screen.php:925
+#: wp-admin/includes/class-wp-screen.php:923
msgid "Enable full-height editor and distraction-free functionality."
msgstr "Aktiver full-høyderedigering og distraksjonsfri skrivemodus."
-#: wp-admin/includes/dashboard.php:1117
+#: wp-admin/includes/dashboard.php:1127
msgid "https://planet.wordpress.org/feed/"
msgstr "https://planet.wordpress.org/feed/"
-#: wp-admin/includes/dashboard.php:1108
+#: wp-admin/includes/dashboard.php:1118 wp-admin/index.php:77
+#: wp-admin/index.php:83
msgid "https://planet.wordpress.org/"
msgstr "https://planet.wordpress.org/"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:551
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:578
msgid "Untested with your version of WordPress"
msgstr "Ikke testet med din versjon av WordPress"
@@ -2286,36 +2621,36 @@ msgid "You can now manage and live-preview Custom Backgrounds in the Tilpasseren"
#: wp-admin/includes/class-wp-links-list-table.php:113
-#: wp-admin/includes/class-wp-posts-list-table.php:437
+#: wp-admin/includes/class-wp-posts-list-table.php:449
msgid "Filter by category"
msgstr "Filtrer etter kategori"
-#: wp-admin/includes/class-wp-comments-list-table.php:328
+#: wp-admin/includes/class-wp-comments-list-table.php:327
msgid "Filter by comment type"
msgstr "Filtrer etter kommentartype"
-#: wp-admin/includes/ajax-actions.php:3056
+#: wp-admin/includes/ajax-actions.php:3121
msgid "You are now logged out everywhere else."
msgstr "Du er nå logget ut alle andre steder."
#. translators: 1: User's display name.
-#: wp-admin/includes/ajax-actions.php:3060
+#: wp-admin/includes/ajax-actions.php:3125
msgid "%s has been logged out."
msgstr "%s har blitt logget ut."
-#: wp-admin/includes/ajax-actions.php:3048
+#: wp-admin/includes/ajax-actions.php:3113
msgid "Could not log out user sessions. Please try again."
msgstr "Kunne ikke logge ut brukersesjoner. Vennligst prøv igjen."
-#: wp-admin/includes/ajax-actions.php:2955
+#: wp-admin/includes/ajax-actions.php:3020
msgid "This preview is unavailable in the editor."
msgstr "Denne forhåndsvisningen er ikke tilgjengelig i redigereren."
-#: wp-admin/includes/ajax-actions.php:2018
+#: wp-admin/includes/ajax-actions.php:2036
msgid "You don't have permission to attach files to this post."
msgstr "Du har ikke adgang til å legge ved filer til dette innlegget."
-#: wp-admin/edit-tag-form.php:150 wp-admin/edit-tags.php:483
+#: wp-admin/edit-tag-form.php:156 wp-admin/edit-tags.php:426
msgctxt "term parent"
msgid "Parent"
msgstr "Forelder"
@@ -2328,7 +2663,7 @@ msgstr "Du kan sette inn mediefiler ved å klikke på ikonene over innleggsredig
msgid "Post editor — Enter the text for your post. There are two modes of editing: Visual and Text. Choose the mode by clicking on the appropriate tab."
msgstr "Innleggsredigerer – Skriv inn teksten til ditt innlegg. Det er to moduser for å redigere: visuell og tekst. Velg modus ved å klikke på den fanen du ønsker."
-#: wp-admin/includes/class-wp-screen.php:1048
+#: wp-admin/includes/class-wp-screen.php:1046
msgctxt "Welcome panel"
msgid "Welcome"
msgstr "Velkommen"
@@ -2338,11 +2673,6 @@ msgctxt "theme editor"
msgid "Editor"
msgstr "Redigering"
-#: wp-admin/plugin-install.php:109
-msgctxt "plugins"
-msgid "Browse"
-msgstr "Bla"
-
#: wp-admin/includes/class-wp-users-list-table.php:193
msgctxt "users"
msgid "All (%s)"
@@ -2357,11 +2687,11 @@ msgid "Name"
msgstr "Navn"
#. translators: %s is a placeholder that must come at the start of the URL.
-#: wp-admin/options-permalink.php:225
+#: wp-admin/options-permalink.php:216
msgid "If you like, you may enter custom structures for your category and tag URLs here. For example, using topics as your category base would make your category links like %s/topics/uncategorized/. If you leave these blank the defaults will be used."
msgstr "Hvis du vil, kan du skrive inn tilpassede strukturer for dine kategori- og stikkord-URLer her. For eksempel kan du bruke emner som din kategoribase, som vil få dine kategorilenker til å se slik ut: %s/emner/ukategorisert/. Hvis disse er tomme, brukes standardoppsettet."
-#: wp-admin/credits.php:120
+#: wp-admin/credits.php:121
msgid "Release Lead"
msgstr "Utgivelsesansvarlig"
@@ -2385,9 +2715,13 @@ msgstr "Hvis du klikker på en fil, vil Vedleggsdetaljer-dialogen vises. Her kan
msgid "You can also delete individual items and access the extended edit screen from the details dialog."
msgstr "Du kan også slette individuelle filer og få tilgang til den utvidede redigeringsskjermen fra detaljer-dialogen."
-#: wp-admin/plugin-install.php:80
-msgid "If you just want to get an idea of what’s available, you can browse Featured and Popular plugins by using the links in the upper left of the screen. These sections rotate regularly."
-msgstr "Hvis du bare vil få et inntrykk av hva som er tilgjengelig, kan du bla i fremhevede og populære utvidelser ved å bruke lenkene oppe til venstre på skjermen. Disse seksjonene oppdateres jevnlig."
+#: wp-admin/plugin-install.php:121
+msgid "Browse Plugins"
+msgstr "Bla i utvidelser"
+
+#: wp-admin/plugin-install.php:91
+msgid "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."
+msgstr "Hvis du bare vil få et inntrykk av hva som er tilgjengelig, kan du bla i fremhevede og populære utvidelser ved å bruke lenkene over listen med utvidelser. Disse seksjonene oppdateres jevnlig."
#: wp-admin/upload.php:50
msgid "All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first."
@@ -2401,7 +2735,7 @@ msgstr "Legg til utvidelser"
msgid "Invalid translation type."
msgstr "Ugyldig oversettelses-type."
-#: wp-admin/edit-tags.php:350 wp-admin/options-general.php:352
+#: wp-admin/edit-tags.php:581 wp-admin/options-general.php:352
msgid "Note:"
msgstr "Merk:"
@@ -2413,15 +2747,15 @@ msgstr "Konstanten %s i din %s-fil er ikke lenger nødvendig."
msgid "Welcome to the famous five-minute WordPress installation process! Just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world."
msgstr "Velkommen til den berømte fem-minutters-installasjonen av WordPress! Fyll inn informasjonen nedenfor, og du vil være godt på vei til å komme i gang med den mest utvidbare og kraftige personlige publiseringsplattformen i verden."
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:553
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:580
msgid "Incompatible with your version of WordPress"
msgstr "Ikke kompatibel med din versjon av WordPress"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:555
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:582
msgid "Compatible with your version of WordPress"
msgstr "Kompatibel med din versjon av WordPress"
-#: wp-admin/includes/plugin-install.php:595
+#: wp-admin/includes/plugin-install.php:597
msgid "%d star"
msgid_plural "%d stars"
msgstr[0] "%d stjerne"
@@ -2447,17 +2781,12 @@ msgstr "Time"
msgid "Minute"
msgstr "Minutt"
-#: wp-admin/theme-install.php:248
-msgctxt "theme"
-msgid "Already Installed"
-msgstr "Allerede installert"
-
-#: wp-admin/theme-install.php:256
+#: wp-admin/theme-install.php:282
msgctxt "Button label for a theme"
msgid "Previous"
msgstr "Forrige"
-#: wp-admin/theme-install.php:257
+#: wp-admin/theme-install.php:283
msgctxt "Button label for a theme"
msgid "Next"
msgstr "Neste"
@@ -2475,15 +2804,15 @@ msgstr "Dette nettstedet er satt opp for å installere oppdateringer av fremtidi
msgid "The grid view for the Media Library requires JavaScript. Switch to the list view."
msgstr "Rutenettvisningen for mediebiblioteket krever JavaScript. Gå til listevisning."
-#: wp-admin/user-new.php:344 wp-admin/user-new.php:474
+#: wp-admin/user-new.php:345 wp-admin/user-new.php:475
msgid "Add the user without sending an email that requires their confirmation."
msgstr "Legg til bruker uten å sende en e-post som krever deres bekreftelse."
-#: wp-admin/includes/class-wp-upgrader.php:3374
+#: wp-admin/includes/class-wp-automatic-updater.php:699
msgid "The WordPress team is willing to help you. Forward this email to %s and the team will work with you to make sure your site is working."
msgstr "Wordpress-teamet er klare for å hjelpe deg. Send denne e-posten videre til %s, og teamet vil jobbe for å få ditt nettsted til å fungere."
-#: wp-admin/includes/ajax-actions.php:2925
+#: wp-admin/includes/ajax-actions.php:2990
msgid "%s failed to embed."
msgstr "%s klarte ikke å bygges inn."
@@ -2507,26 +2836,11 @@ msgctxt "Plugin installer group title"
msgid "Tools"
msgstr "Verktøy"
-#. translators: 1: Plugin name and version.
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:462
-msgid "Install %s now"
-msgstr "Installer %s nå"
-
-#. translators: 1: Plugin name and version
-#. translators: %s: theme name
-#. translators: %s: plugin name
-#. translators: %s: theme name
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:469
-#: wp-admin/includes/theme.php:196 wp-admin/includes/update.php:368
-#: wp-admin/includes/update.php:498
-msgid "Update %s now"
-msgstr "Oppdater %s nå"
-
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:484
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:511
msgid "More Details"
msgstr "Mer detaljer"
-#: wp-admin/includes/class-wp-plugins-list-table.php:750
+#: wp-admin/includes/class-wp-plugins-list-table.php:790
msgid "View details"
msgstr "Vis detaljer"
@@ -2540,17 +2854,17 @@ msgctxt "themes"
msgid "Recently Updated"
msgstr "Nylig oppdaterte"
-#: wp-admin/includes/plugin-install.php:473
+#: wp-admin/includes/plugin-install.php:466
msgctxt "Plugin installer section title"
msgid "Reviews"
msgstr "Omtaler"
-#: wp-admin/includes/plugin-install.php:571
-#: wp-admin/includes/plugin-install.php:625
+#: wp-admin/includes/plugin-install.php:573
+#: wp-admin/includes/plugin-install.php:627
msgid "Donate to this plugin »"
msgstr "Doner til denne utvidelsen »"
-#: wp-admin/includes/plugin-install.php:605
+#: wp-admin/includes/plugin-install.php:607
msgid "Contributors"
msgstr "Bidragsytere"
@@ -2558,16 +2872,16 @@ msgstr "Bidragsytere"
msgid "The Customizer allows you to preview changes to your site before publishing them. You can also navigate to different pages on your site to preview them."
msgstr "Tilpasseren lar deg forhåndsvise endringer på ditt nettsted før du publiserer dem. Du kan også navigere til ulike sider på ditt nettsted for å forhåndsvise disse."
-#: wp-admin/includes/class-wp-upgrader.php:3387
+#: wp-admin/includes/class-wp-automatic-updater.php:712
msgid "If you reach out to us, we'll also ensure you'll never have this problem again."
msgstr "Hvis du når ut til oss, vil vi også gjøre vårt ytterste for at du aldri skal måtte ha dette problemet igjen."
-#: wp-admin/theme-install.php:199
+#: wp-admin/theme-install.php:201
msgid "Filtering by:"
msgstr "Filtrerer etter:"
-#: wp-admin/theme-install.php:53 wp-admin/theme-install.php:209
-#: wp-admin/themes.php:142 wp-admin/themes.php:289
+#: wp-admin/theme-install.php:53 wp-admin/theme-install.php:211
+#: wp-admin/themes.php:142 wp-admin/themes.php:297
msgid "No themes found. Try a different search."
msgstr "Fant ingen temaer. Prøv et annet søk."
@@ -2599,32 +2913,27 @@ msgstr "Når du har gjort ditt valg, kan du justere det ved å angi størrelse i
msgid "You can edit the image while preserving the thumbnail. For example, you may wish to have a square thumbnail that displays just a section of the image."
msgstr "Du kan redigere bildet og samtidig bevare miniatyrbildet. For eksempel kan det være lurt å ha en firkantet miniatyr som bare viser en del av bildet."
-#: wp-admin/includes/media.php:2796
+#: wp-admin/includes/media.php:2809
msgid "Displayed on attachment pages."
msgstr "Vises på vedleggssider."
-#: wp-admin/theme-install.php:131
-msgctxt "themes"
-msgid "Browse"
-msgstr "Bla gjennom"
-
-#: wp-admin/includes/class-wp-comments-list-table.php:330
+#: wp-admin/includes/class-wp-comments-list-table.php:329
msgid "All comment types"
msgstr "Alle kommentartyper"
#: wp-admin/includes/class-wp-theme-install-list-table.php:64
-#: wp-admin/theme-install.php:147
+#: wp-admin/theme-install.php:149
msgctxt "themes"
msgid "Featured"
msgstr "Fremhevede"
-#: wp-admin/theme-install.php:148
+#: wp-admin/theme-install.php:150
msgctxt "themes"
msgid "Popular"
msgstr "Populære"
#: wp-admin/includes/class-wp-theme-install-list-table.php:66
-#: wp-admin/theme-install.php:149
+#: wp-admin/theme-install.php:151
msgctxt "themes"
msgid "Latest"
msgstr "Siste"
@@ -2634,18 +2943,18 @@ msgid "Remove allows you to remove a user from your site. It does not delete the
msgstr "«Fjern» lar deg fjerne en bruker fra nettstedet. Det sletter ikke deres innhold. Du kan også fjerne flere brukere samtidig med «massehandlinger»."
#: wp-admin/edit-tags.php:74
-msgid "You are not allowed to add this item."
-msgstr "Du har ikke tillatelse til å legge til dette."
+msgid "Sorry, you are not allowed to add this item."
+msgstr "Beklager, du har ikke lov til å legge til dette."
-#: wp-admin/index.php:57
+#: wp-admin/index.php:59
msgid "Box Controls — Click the title bar of the box to expand or collapse it. Some boxes added by plugins may have configurable content, and will show a “Configure” link in the title bar if you hover over it."
msgstr "Bokskontroll - Klikk på tittellinjen til boksen for å utvide eller forminske den. Noen bokser som legges til av utvidelser kan ha innhold som kan tilpasses, og vil vise en «konfigurer»-lenke i tittellinjen om du holder musen over den."
-#: wp-admin/index.php:67
+#: wp-admin/index.php:69
msgid "At A Glance — Displays a summary of the content on your site and identifies which theme and version of WordPress you are using."
msgstr "Oversikt – Viser en oversikt over innholdet på ditt nettsted og identifiserer hvilket tema og hvilken WordPress-versjon du bruker."
-#: wp-admin/maint/repair.php:141
+#: wp-admin/maint/repair.php:147
msgid "https://wordpress.org/support/forum/how-to-and-troubleshooting"
msgstr "https://wordpress.org/support/forum/how-to-and-troubleshooting"
@@ -2665,7 +2974,7 @@ msgstr "Søk etter tema"
msgid "Search themes..."
msgstr "Søk etter tema..."
-#: wp-admin/theme-install.php:238
+#: wp-admin/theme-install.php:240
msgctxt "theme"
msgid "Details & Preview"
msgstr "Detaljer og forhåndsvisning"
@@ -2678,19 +2987,19 @@ msgstr "«Slett» tar deg til «Slett brukere»-skjermen for bekreftelse, der du
msgid "What should be done with content owned by this user?"
msgstr "Hva bør gjøres med innhold laget av denne brukeren?"
-#: wp-admin/includes/ms.php:1069 wp-admin/users.php:273
+#: wp-admin/includes/ms.php:973 wp-admin/users.php:273
msgid "Delete all content."
msgstr "Slett alt innhold."
-#: wp-admin/includes/ms.php:1071 wp-admin/users.php:275
+#: wp-admin/includes/ms.php:975 wp-admin/users.php:275
msgid "Attribute all content to:"
msgstr "Overfør alt innhold til:"
-#: wp-admin/includes/ajax-actions.php:1769
+#: wp-admin/includes/ajax-actions.php:1787
msgid "Type"
msgstr "Skriv"
-#: wp-admin/admin-footer.php:29
+#: wp-admin/admin-footer.php:34
msgid "Thank you for creating with WordPress."
msgstr "Takk for at du skaper med WordPress."
@@ -2698,31 +3007,31 @@ msgstr "Takk for at du skaper med WordPress."
#: wp-admin/custom-header.php:128 wp-admin/edit-comments.php:168
#: wp-admin/edit-form-advanced.php:382 wp-admin/edit-form-advanced.php:398
#: wp-admin/edit-form-advanced.php:414 wp-admin/edit-link-form.php:66
-#: wp-admin/edit-tags.php:279 wp-admin/edit.php:225 wp-admin/edit.php:246
-#: wp-admin/export.php:55 wp-admin/import.php:29 wp-admin/index.php:89
+#: wp-admin/edit-tags.php:288 wp-admin/edit.php:225 wp-admin/edit.php:246
+#: wp-admin/export.php:55 wp-admin/import.php:30 wp-admin/index.php:99
#: wp-admin/link-manager.php:61 wp-admin/media-new.php:57 wp-admin/media.php:84
-#: wp-admin/my-sites.php:49 wp-admin/nav-menus.php:589
+#: wp-admin/my-sites.php:49 wp-admin/nav-menus.php:571
#: wp-admin/options-discussion.php:29 wp-admin/options-general.php:46
#: wp-admin/options-media.php:35 wp-admin/options-permalink.php:46
#: wp-admin/options-reading.php:39 wp-admin/options-writing.php:46
-#: wp-admin/plugin-editor.php:145 wp-admin/plugin-install.php:88
-#: wp-admin/plugins.php:397 wp-admin/revision.php:120
-#: wp-admin/theme-editor.php:43 wp-admin/theme-install.php:108
+#: wp-admin/plugin-editor.php:145 wp-admin/plugin-install.php:99
+#: wp-admin/plugins.php:396 wp-admin/revision.php:120
+#: wp-admin/theme-editor.php:43 wp-admin/theme-install.php:109
#: wp-admin/themes.php:119 wp-admin/tools.php:29 wp-admin/update-core.php:577
#: wp-admin/upload.php:67 wp-admin/upload.php:208 wp-admin/user-edit.php:55
-#: wp-admin/user-new.php:206 wp-admin/users.php:69 wp-admin/widgets.php:75
+#: wp-admin/user-new.php:207 wp-admin/users.php:69 wp-admin/widgets.php:75
msgid "Support Forums"
msgstr "Supportforum"
-#: wp-admin/credits.php:42 wp-admin/credits.php:103
+#: wp-admin/credits.php:42 wp-admin/credits.php:104
msgid "https://make.wordpress.org/"
msgstr "https://make.wordpress.org/"
-#: wp-admin/includes/dashboard.php:1483
+#: wp-admin/includes/dashboard.php:1493
msgid "Manage widgets"
msgstr "Håndter widgeter"
-#: wp-admin/includes/dashboard.php:1485
+#: wp-admin/includes/dashboard.php:1495
msgid "Manage menus"
msgstr "Håndter menyer"
@@ -2770,41 +3079,29 @@ msgstr "På denne skjermen kan du oppdatere til siste versjon av WordPress, i ti
msgid "Themes and Plugins — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then click on the appropriate “Update” button. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button."
msgstr "Temaer og utvidelser — For å oppdatere individuelle temaer eller utvidelser fra denne skjermen, bruk avkrysningsboksene for å gjøre ditt valg, så klikker du på den tilsvarende «Oppdater»-knappen. For å oppdatere alle temaer og utvidelser samtidig kan du huke av boksen i toppen av valgområdet for å velge alle før du trykker på knappen for oppdatering."
-#: wp-admin/about.php:30
+#: wp-admin/about.php:50
msgid "Welcome to WordPress %s"
msgstr "Velkommen til WordPress %s"
#: wp-admin/themes.php:92
-msgid "If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress.org Theme Directory. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!"
+msgid "If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress Theme Directory. Themes in the WordPress Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!"
msgstr "Hvis du ønsker å se flere temaer å velge mellom, klikk på «Legg til»-knappen. Da kan du bla igjennom eller søke etter andre temaer fra tema-katalogenen til WordPress.org. Disse temaene er laget av tredjeparts utviklere, og er kompatible med samme lisens som WordPress bruker. Og, de er helt gratis!"
-#: wp-admin/includes/theme.php:235
-msgid "Fixed Layout"
-msgstr "Fast layout"
-
-#: wp-admin/includes/theme.php:236
-msgid "Fluid Layout"
-msgstr "Flytende layout"
-
-#: wp-admin/includes/theme.php:237
-msgid "Responsive Layout"
-msgstr "Responsiv layout"
-
-#: wp-admin/includes/dashboard.php:250
+#: wp-admin/includes/dashboard.php:258
msgid "%s Post"
msgid_plural "%s Posts"
msgstr[0] "%s innlegg"
msgstr[1] "%s innlegg"
-#: wp-admin/includes/dashboard.php:252
+#: wp-admin/includes/dashboard.php:260
msgid "%s Page"
msgid_plural "%s Pages"
msgstr[0] "%s side"
msgstr[1] "%s sider"
#. translators: Number of comments in moderation
-#: wp-admin/includes/ajax-actions.php:374
-#: wp-admin/includes/ajax-actions.php:1076 wp-admin/includes/dashboard.php:273
+#: wp-admin/includes/ajax-actions.php:383
+#: wp-admin/includes/ajax-actions.php:1092 wp-admin/includes/dashboard.php:281
msgctxt "comments"
msgid "%s in moderation"
msgid_plural "%s in moderation"
@@ -2812,18 +3109,18 @@ msgstr[0] "%s i moderasjonskø"
msgstr[1] "%s i moderasjonskø"
#. translators: date and time format for recent posts on the dashboard, see
-#. http://php.net/date
-#: wp-admin/includes/dashboard.php:840
+#. https://secure.php.net/date
+#: wp-admin/includes/dashboard.php:850
msgid "M jS"
msgstr "j. M"
#. translators: number of megabytes
-#: wp-admin/includes/dashboard.php:1290
+#: wp-admin/includes/dashboard.php:1300
msgid "%s MB Space Allowed"
msgstr "%s MB lagringsplass tillatt"
#. translators: 1: number of megabytes, 2: percentage
-#: wp-admin/includes/dashboard.php:1302
+#: wp-admin/includes/dashboard.php:1312
msgid "%1$s MB (%2$s%%) Space Used"
msgstr "%1$s MB (%2$s%%) lagringsplass brukt"
@@ -2835,11 +3132,11 @@ msgstr "Når denne innstillingen er aktiv vises en påminnelse i kontrollpanelet
msgid "At a Glance"
msgstr "Oversikt"
-#: wp-admin/includes/theme.php:247
+#: wp-admin/includes/theme.php:246
msgid "Accessibility Ready"
msgstr "Tilgjengelighetstilpasset"
-#: wp-admin/includes/theme.php:633 wp-admin/themes.php:436
+#: wp-admin/includes/theme.php:638 wp-admin/themes.php:452
msgid "This is a child theme of %s."
msgstr "Dette er et dattertema til %s."
@@ -2880,14 +3177,14 @@ msgid "To activate a widget drag it to a sidebar or click on it. To deactivate a
msgstr "For å aktivere en widget, dra den til sidekolonnen eller klikk på den. For å deaktivere en widget og slette innstillingene, dra den tilbake."
#. translators: 1: The rating, 2: The number of ratings
-#: wp-admin/includes/template.php:2057
+#: wp-admin/includes/template.php:2072
msgid "%1$s rating based on %2$s rating"
msgid_plural "%1$s rating based on %2$s ratings"
msgstr[0] "%1$s – basert på %2$s vurdering"
msgstr[1] "%1$s – basert på %2$s vurderinger"
#. translators: 1: The rating
-#: wp-admin/includes/template.php:2061
+#: wp-admin/includes/template.php:2076
msgid "%s rating"
msgstr "%s vurdering"
@@ -2896,36 +3193,36 @@ msgid "This screen shows an individual user all of their sites in this network,
msgstr "Denne skjermen viser individuelle brukere alle deres nettsteder i dette nettverket, og lar også brukeren velge sitt primære nettsted. De kan bruke lenkene under hvert nettsted for å vise enten forsiden eller kontrollpanelet for det nettstedet."
#. translators: 1: Error code, 2: Error message.
-#: wp-admin/includes/class-wp-upgrader.php:3564
+#: wp-admin/includes/class-wp-automatic-updater.php:889
msgid "Rollback Error: [%1$s] %2$s"
msgstr "Rollback-feil: [%1$s] %2$s"
#. translators: 1: Error code, 2: Error message.
-#: wp-admin/includes/class-wp-upgrader.php:3567
+#: wp-admin/includes/class-wp-automatic-updater.php:892
msgid "Error: [%1$s] %2$s"
msgstr "Feil: [%1$s] %2$s"
-#: wp-admin/includes/class-wp-upgrader.php:3491
+#: wp-admin/includes/class-wp-automatic-updater.php:816
msgid "The following plugins were successfully updated:"
msgstr "Følgende utvidelser ble korrekt oppdaterte:"
-#: wp-admin/includes/class-wp-upgrader.php:3492
+#: wp-admin/includes/class-wp-automatic-updater.php:817
msgid "The following themes were successfully updated:"
msgstr "Følgende temaer ble korrekt oppdaterte:"
-#: wp-admin/includes/class-wp-upgrader.php:3493
+#: wp-admin/includes/class-wp-automatic-updater.php:818
msgid "The following translations were successfully updated:"
msgstr "Følgende oversettelser ble korrekt oppdaterte:"
-#: wp-admin/includes/class-wp-upgrader.php:3504
+#: wp-admin/includes/class-wp-automatic-updater.php:829
msgid "The following plugins failed to update:"
msgstr "Følgende utvidelser kunne ikke oppdateres:"
-#: wp-admin/includes/class-wp-upgrader.php:3505
+#: wp-admin/includes/class-wp-automatic-updater.php:830
msgid "The following themes failed to update:"
msgstr "Følgende temaer kunne ikke oppdateres:"
-#: wp-admin/includes/class-wp-upgrader.php:3506
+#: wp-admin/includes/class-wp-automatic-updater.php:831
msgid "The following translations failed to update:"
msgstr "Følgende oversettelser kunne ikke oppdateres:"
@@ -2933,15 +3230,15 @@ msgstr "Følgende oversettelser kunne ikke oppdateres:"
msgid "Unable to submit this form, please refresh and try again."
msgstr "Kunne ikke sende dette skjemaet. Vennligst last inn siden på nytt og prøv igjen."
-#: wp-admin/index.php:55
+#: wp-admin/index.php:57
msgid "Screen Options — Use the Screen Options tab to choose which Dashboard boxes to show."
msgstr "Visningsinnstillinger – Bruk Visningsinnstillinger-fanen for å velge hvilke bokser som skal vises i kontrollpanelet."
-#: wp-admin/index.php:68
+#: wp-admin/index.php:70
msgid "Activity — Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them."
msgstr "Aktivitet – Viser planlagte innlegg, nylig publiserte innlegg og nylige kommentarer til dine innlegg, og lar deg moderere dem."
-#: wp-admin/index.php:70
+#: wp-admin/index.php:72
msgid "Quick Draft — Allows you to create a new post and save it as a draft. Also displays links to the 5 most recent draft posts you've started."
msgstr "Hurtigkladd – Lar deg lage et nytt innlegg og lagre det som en kladd. Viser også lenker til de fem siste kladdene du har påbegynt."
@@ -2959,20 +3256,20 @@ msgstr ""
msgid "Add New Theme"
msgstr "Legg til nytt tema"
-#: wp-admin/themes.php:157
+#: wp-admin/themes.php:158
msgctxt "Add new theme"
msgid "Add New"
msgstr "Legg til nytt"
-#: wp-admin/themes.php:281 wp-admin/themes.php:399 wp-admin/themes.php:429
+#: wp-admin/themes.php:445
msgid "Update Available"
msgstr "Oppdatering tilgjengelig"
-#: wp-admin/includes/theme.php:611 wp-admin/themes.php:407
+#: wp-admin/includes/theme.php:616 wp-admin/themes.php:423
msgid "Show previous theme"
msgstr "Vis forrige tema"
-#: wp-admin/includes/theme.php:612 wp-admin/themes.php:408
+#: wp-admin/includes/theme.php:617 wp-admin/themes.php:424
msgid "Show next theme"
msgstr "Vis neste tema"
@@ -2984,31 +3281,31 @@ msgstr "Legg til widget"
msgid "Activity"
msgstr "Aktivitet"
-#: wp-admin/includes/class-wp-upgrader.php:3470
+#: wp-admin/includes/class-wp-automatic-updater.php:795
msgid "WordPress site: %s"
msgstr "WordPress-nettsted: %s"
-#: wp-admin/includes/class-wp-upgrader.php:3476
+#: wp-admin/includes/class-wp-automatic-updater.php:801
msgid "SUCCESS: WordPress was successfully updated to %s"
msgstr "VELLYKKET: WordPress ble oppdatert til %s"
-#: wp-admin/includes/class-wp-upgrader.php:3478
+#: wp-admin/includes/class-wp-automatic-updater.php:803
msgid "FAILED: WordPress failed to update to %s"
msgstr "FEILET: Wordpress ble ikke oppdatert til %s"
-#: wp-admin/includes/class-wp-upgrader.php:3498
+#: wp-admin/includes/class-wp-automatic-updater.php:823
msgid "SUCCESS: %s"
msgstr "VELLYKKET: %s"
-#: wp-admin/includes/class-wp-upgrader.php:3512
+#: wp-admin/includes/class-wp-automatic-updater.php:837
msgid "FAILED: %s"
msgstr "FEILET: %s"
-#: wp-admin/includes/class-wp-upgrader.php:3535
+#: wp-admin/includes/class-wp-automatic-updater.php:860
msgid "[%s] There were failures during background updates"
msgstr "[%s] Det skjedde feil i løpet av bakgrunnsoppdateringene"
-#: wp-admin/includes/class-wp-upgrader.php:3537
+#: wp-admin/includes/class-wp-automatic-updater.php:862
msgid "[%s] Background updates have finished"
msgstr "[%s] Bakgrunnsoppdateringene er klare"
@@ -3021,173 +3318,170 @@ msgid "WordPress News"
msgstr "WordPress-nyheter"
#. translators: 1: version number, 2: theme name
-#: wp-admin/includes/update.php:258
+#: wp-admin/includes/update.php:278
msgid "WordPress %1$s running %2$s theme."
msgstr "WordPress %1$s med temaet %2$s."
-#: wp-admin/includes/dashboard.php:504
+#: wp-admin/includes/dashboard.php:512
msgid "What’s on your mind?"
msgstr "Hva tenker du på?"
-#: wp-admin/includes/dashboard.php:557
+#: wp-admin/includes/dashboard.php:565
msgctxt "drafts"
msgid "View all"
msgstr "Vis alle"
-#: wp-admin/includes/dashboard.php:51 wp-admin/includes/dashboard.php:559
+#: wp-admin/includes/dashboard.php:51 wp-admin/includes/dashboard.php:567
msgid "Drafts"
msgstr "Kladder"
-#: wp-admin/includes/dashboard.php:755
+#: wp-admin/includes/dashboard.php:765
msgid "Publishing Soon"
msgstr "Publiserer snart"
-#: wp-admin/includes/dashboard.php:762
+#: wp-admin/includes/dashboard.php:772
msgid "Recently Published"
msgstr "Nylig publisert"
-#: wp-admin/includes/dashboard.php:771
+#: wp-admin/includes/dashboard.php:781
msgid "No activity yet!"
msgstr "Ingen aktivitet ennå!"
-#: wp-admin/includes/dashboard.php:832
-msgid "Today"
-msgstr "I dag"
-
-#: wp-admin/includes/dashboard.php:834
+#: wp-admin/includes/dashboard.php:844
msgid "Tomorrow"
msgstr "I morgen"
-#: wp-admin/includes/dashboard.php:1247
+#: wp-admin/includes/dashboard.php:1257
msgid "Popular Plugin"
msgstr "Populær utvidelse"
-#: wp-admin/includes/dashboard.php:1297 wp-admin/includes/dashboard.php:1310
+#: wp-admin/includes/dashboard.php:1307 wp-admin/includes/dashboard.php:1320
msgid "Manage Uploads"
msgstr "Håndter opplastinger"
-#: wp-admin/includes/class-wp-upgrader.php:143
-#: wp-admin/includes/class-wp-upgrader.php:2341
-#: wp-admin/includes/update-core.php:852 wp-admin/includes/update-core.php:927
-#: wp-admin/includes/update-core.php:950
+#: wp-admin/includes/class-core-upgrader.php:138
+#: wp-admin/includes/class-wp-upgrader.php:172
+#: wp-admin/includes/update-core.php:854 wp-admin/includes/update-core.php:929
+#: wp-admin/includes/update-core.php:952
msgid "The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions."
msgstr "Oppdateringen kan ikke installeres fordi at noen av filene ikke vil kunne kopieres. Dette er som regel på grunn av inkonsekvente filrettigheter."
-#: wp-admin/includes/class-wp-upgrader.php:3336
+#: wp-admin/includes/class-wp-automatic-updater.php:661
msgid "WordPress %s is also now available."
msgstr "WordPress %s er nå også tilgjengelig."
-#: wp-admin/includes/class-wp-upgrader.php:3360
+#: wp-admin/includes/class-wp-automatic-updater.php:685
msgid "Your site at %1$s experienced a critical failure while trying to update WordPress to version %2$s."
msgstr "Det skjedde en kritisk feil når ditt nettsted på %1$s skulle oppdatere WordPress til versjon %2$s."
-#: wp-admin/includes/class-wp-upgrader.php:3400
+#: wp-admin/includes/class-wp-automatic-updater.php:725
msgid "Your site was running version %s."
msgstr "Ditt nettsted kjørte versjon %s."
-#: wp-admin/includes/class-wp-upgrader-skins.php:791
+#: wp-admin/includes/class-language-pack-upgrader-skin.php:29
#: wp-admin/update-core.php:424 wp-admin/update-core.php:717
msgid "Update Translations"
msgstr "Oppdater oversettelser"
-#: wp-admin/includes/class-wp-upgrader-skins.php:809
-#: wp-admin/includes/class-wp-upgrader.php:2995
+#: wp-admin/includes/class-language-pack-upgrader-skin.php:47
+#: wp-admin/includes/class-wp-automatic-updater.php:320
msgid "Updating translations for %1$s (%2$s)…"
msgstr "Oppdaterer oversettelser for %1$s (%2$s)…"
-#: wp-admin/includes/class-wp-upgrader.php:2994
+#: wp-admin/includes/class-wp-automatic-updater.php:319
msgid "Translations for %s"
msgstr "Oversettelser for %s"
#. translators: 1: Site name, 2: WordPress version number.
-#: wp-admin/includes/class-wp-upgrader.php:3299
+#: wp-admin/includes/class-wp-automatic-updater.php:624
msgid "[%1$s] Your site has updated to WordPress %2$s"
msgstr "[%1$s] Ditt nettsted har blitt oppdatert til WordPress %2$s"
#. translators: 1: Site name, 2: WordPress version number.
-#: wp-admin/includes/class-wp-upgrader.php:3305
+#: wp-admin/includes/class-wp-automatic-updater.php:630
msgid "[%1$s] WordPress %2$s is available. Please update!"
msgstr "[%1$s] WordPress %2$s er tilgjengelig. Vennligst oppdater!"
#. translators: 1: Site name.
-#: wp-admin/includes/class-wp-upgrader.php:3310
+#: wp-admin/includes/class-wp-automatic-updater.php:635
msgid "[%1$s] URGENT: Your site may be down due to a failed update"
msgstr "[%1$s] HASTER: Ditt nettsted kan være nede på grunn av en mislykket oppdatering"
-#: wp-admin/includes/class-wp-upgrader.php:3325
+#: wp-admin/includes/class-wp-automatic-updater.php:650
msgid "Howdy! Your site at %1$s has been updated automatically to WordPress %2$s."
msgstr "Hei! Ditt nettsted på %1$s har blitt oppdatert automatisk til WordPress %2$s."
-#: wp-admin/includes/class-wp-upgrader.php:3328
+#: wp-admin/includes/class-wp-automatic-updater.php:653
msgid "No further action is needed on your part."
msgstr "Du trenger ikke å gjøre noe mer!"
-#: wp-admin/includes/class-wp-upgrader.php:3332
+#: wp-admin/includes/class-wp-automatic-updater.php:657
msgid "For more on version %s, see the About WordPress screen:"
msgstr "For mer om versjon %s, se Om WordPress-skjermen:"
-#: wp-admin/includes/class-wp-upgrader.php:3345
+#: wp-admin/includes/class-wp-automatic-updater.php:670
msgid "Please update your site at %1$s to WordPress %2$s."
msgstr "Vennligst oppdater ditt nettsted på %1$s til WordPress %2$s."
-#: wp-admin/includes/class-wp-upgrader.php:3352
+#: wp-admin/includes/class-wp-automatic-updater.php:677
msgid "We tried but were unable to update your site automatically."
msgstr "Vi forsøkte, men klarte ikke å oppdatere ditt nettsted automatisk."
-#: wp-admin/includes/class-wp-upgrader.php:3337
-#: wp-admin/includes/class-wp-upgrader.php:3354
+#: wp-admin/includes/class-wp-automatic-updater.php:662
+#: wp-admin/includes/class-wp-automatic-updater.php:679
msgid "Updating is easy and only takes a few moments:"
msgstr "Å oppdatere er lett, og tar kun få minutter:"
-#: wp-admin/includes/class-wp-upgrader.php:3362
+#: wp-admin/includes/class-wp-automatic-updater.php:687
msgid "Your site at %1$s experienced a critical failure while trying to update to the latest version of WordPress, %2$s."
msgstr "Ditt nettsted på %1$s fikk en kritisk feil mens det prøvde å oppdatere seg selv til siste versjon av WordPress, %2$s."
-#: wp-admin/includes/class-wp-upgrader.php:3364
+#: wp-admin/includes/class-wp-automatic-updater.php:689
msgid "This means your site may be offline or broken. Don't panic; this can be fixed."
msgstr "Dette betyr at ditt nettsted kan være utilgjengelig eller ødelagt. Men, foreløpig ingen grunn til panikk; dette kan vi fikse."
-#: wp-admin/includes/class-wp-upgrader.php:3366
+#: wp-admin/includes/class-wp-automatic-updater.php:691
msgid "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so:"
msgstr "Vennligst sjekk ditt nettsted nå. Det er mulig at alt fungerer. Hvis det sier at du må oppdatere, bør du gjøre dette:"
-#: wp-admin/includes/class-wp-upgrader.php:3383 wp-admin/update-core.php:553
+#: wp-admin/includes/class-wp-automatic-updater.php:708
+#: wp-admin/update-core.php:553
msgid "Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers."
msgstr "Å holde nettstedet oppdatert er viktig for sikkerheten. Det gjør også Internett til et tryggere sted for deg og dine lesere."
-#: wp-admin/includes/class-wp-upgrader.php:3377
+#: wp-admin/includes/class-wp-automatic-updater.php:702
msgid "If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help."
msgstr "Hvis du opplever noen problemer eller trenger støtte, kan kanskje de frivillige i WordPress.org supportforum hjelpe deg."
-#: wp-admin/includes/class-wp-upgrader.php:3392
+#: wp-admin/includes/class-wp-automatic-updater.php:717
msgid "You also have some plugins or themes with updates available. Update them now:"
msgstr "Du har også noen utvidelser eller temaer som har tilgjengelige oppdateringer. Oppdater dem nå:"
-#: wp-admin/includes/class-wp-upgrader.php:3396
+#: wp-admin/includes/class-wp-automatic-updater.php:721
msgid "The WordPress Team"
msgstr "WordPress-teamet"
-#: wp-admin/includes/class-wp-upgrader.php:3401
+#: wp-admin/includes/class-wp-automatic-updater.php:726
msgid "We have some data that describes the error your site encountered."
msgstr "Vi har noe data som beskriver feilen som ditt nettsted opplevde."
-#: wp-admin/includes/class-wp-upgrader.php:3402
+#: wp-admin/includes/class-wp-automatic-updater.php:727
msgid "Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:"
msgstr "Din webhost, frivillige i supportforumet eller vennligsinnede utviklere kan kanskje bruke denne informasjonen for å hjelpe deg:"
-#: wp-admin/includes/class-wp-upgrader.php:3415
+#: wp-admin/includes/class-wp-automatic-updater.php:740
msgid "Error code: %s"
msgstr "Feilkode: %s"
-#: wp-admin/themes.php:179
+#: wp-admin/themes.php:180
msgid "ERROR: %s"
msgstr "FEIL: %s"
-#: wp-admin/includes/post.php:1576
+#: wp-admin/includes/post.php:1578
msgid "This content is currently locked."
msgstr "Dette innholdet er for tiden låst."
-#: wp-admin/includes/post.php:1578
+#: wp-admin/includes/post.php:1580
msgid "If you take over, %s will be blocked from continuing to edit."
msgstr "Hvis du tar over, vil %s bli blokkert fra å fortsette å redigere."
@@ -3207,35 +3501,35 @@ msgstr "Oversettelser"
msgid "Your translations are all up to date."
msgstr "Alle oversettelser er oppdaterte."
-#: wp-admin/includes/class-wp-upgrader.php:1979
+#: wp-admin/includes/class-language-pack-upgrader.php:116
msgid "Some of your translations need updating. Sit tight for a few more seconds while we update them as well."
msgstr "Noen av dine oversettelser må oppdateres. Sitt i ro noen sekunder mens vi oppdaterer dem også."
-#: wp-admin/includes/class-wp-upgrader.php:1980
-msgid "The translation is up to date."
+#: wp-admin/includes/class-language-pack-upgrader.php:117
+msgid "The translations are up to date."
msgstr "Oversettelsene er oppdaterte."
-#: wp-admin/includes/class-wp-upgrader.php:1982
+#: wp-admin/includes/class-language-pack-upgrader.php:119
msgid "Downloading translation from %s…"
msgstr "Laster ned oversettelser fra %s…"
-#: wp-admin/includes/class-wp-upgrader.php:1984
+#: wp-admin/includes/class-language-pack-upgrader.php:121
msgid "Translation update failed."
msgstr "Oppdatering av oversettelser mislyktes."
-#: wp-admin/includes/class-wp-upgrader.php:1985
+#: wp-admin/includes/class-language-pack-upgrader.php:122
msgid "Translation updated successfully."
msgstr "Oppdateringen av oversettelser var vellykket."
-#: wp-admin/includes/class-wp-upgrader.php:2984
+#: wp-admin/includes/class-wp-automatic-updater.php:309
msgid "Updating theme: %s"
msgstr "Oppdaterer tema: %s"
-#: wp-admin/includes/class-wp-upgrader.php:2990
+#: wp-admin/includes/class-wp-automatic-updater.php:315
msgid "Updating plugin: %s"
msgstr "Oppdaterer utvidelse: %s"
-#: wp-admin/includes/update-core.php:983
+#: wp-admin/includes/update-core.php:985
msgid "There is not enough free disk space to complete the update."
msgstr "Det er ikke nok plass på serveren for å fullføre oppdateringen."
@@ -3251,44 +3545,44 @@ msgstr "Størrelsene under bestemmer maks antall piksler du kan bruke når du le
msgid "Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead."
msgstr "Å oppgradere til en nyere versjon av det samme temaet vil overskrive endringene som gjøres her. For å unngå dette, vurder å lage et dattertema isteden."
-#: wp-admin/user-new.php:371
+#: wp-admin/user-new.php:372
msgid "Create a brand new user and add them to this site."
msgstr "Lag en helt ny bruker og legg den til dette nettstedet."
#. translators: 1: folder to locate, 2: folder to start searching from
-#: wp-admin/includes/class-wp-filesystem-base.php:256
+#: wp-admin/includes/class-wp-filesystem-base.php:257
msgid "Looking for %1$s in %2$s"
msgstr "Ser etter %1$s i %2$s"
-#: wp-admin/includes/class-wp-upgrader.php:2240
+#: wp-admin/includes/class-core-upgrader.php:37
msgid "Attempting to roll back to previous version."
msgstr "Prøver å rulle tilbake til den forrige versjonen."
-#: wp-admin/includes/class-wp-upgrader.php:2241
+#: wp-admin/includes/class-core-upgrader.php:38
msgid "Due to an error during updating, WordPress has rolled back to your previous version."
msgstr "På grunn av en feil under oppdatering, har WordPress blitt rullet tilbake til den forrige versjonen."
-#: wp-admin/includes/class-wp-upgrader.php:2977
+#: wp-admin/includes/class-wp-automatic-updater.php:302
msgid "Updating to WordPress %s"
msgstr "Oppdaterer til WordPress %s"
-#: wp-admin/includes/class-wp-upgrader.php:2978
+#: wp-admin/includes/class-wp-automatic-updater.php:303
msgid "WordPress %s"
msgstr "WordPress %s"
-#: wp-admin/includes/file.php:536
+#: wp-admin/includes/file.php:548
msgid "The checksum of the file (%1$s) does not match the expected checksum value (%2$s)."
msgstr "Sjekksummen til filen (%1$s) er ikke lik den forventede sjekksumverdien (%2$s)."
-#: wp-admin/includes/file.php:1216
+#: wp-admin/includes/file.php:1218
msgid "This password will not be stored on the server."
msgstr "Dette passordet vil ikke lagres på serveren."
-#: wp-admin/includes/update-core.php:880
+#: wp-admin/includes/update-core.php:882
msgid "Preparing to install the latest version…"
msgstr "Forbereder installasjon av den nyeste versjonen…"
-#: wp-admin/includes/update-core.php:940
+#: wp-admin/includes/update-core.php:942
msgid "Copying the required files…"
msgstr "Kopierer de nødvendige filene…"
@@ -3310,17 +3604,17 @@ msgstr "Du må oppgi en e-postadresse."
#: wp-admin/install.php:361
msgid "Sorry, that isn’t a valid email address. Email addresses look like username@example.com."
-msgstr "Beklager, det er ikke en gyldig e-postadresse. E-postadresser ser ut som brukernavn@eksempel.no."
+msgstr "Beklager, dette er ikke en gyldig e-postadresse. E-postadresser ser ut som brukernavn@eksempel.no."
-#: wp-admin/nav-menus.php:535
+#: wp-admin/nav-menus.php:517
msgid "Your theme does not natively support menus, but you can use them in sidebars by adding a “Custom Menu” widget on the Widgets screen."
msgstr "Ditt tema støtter ikke vanlige menyer, men du kan bruke dem i sidekolonner ved å legge til «Tilpasset meny»-widgeten på Widgets-skjermen."
-#: wp-admin/nav-menus.php:539
+#: wp-admin/nav-menus.php:521
msgid "Menus can be displayed in locations defined by your theme, even used in sidebars by adding a “Custom Menu” widget on the Widgets screen. If your theme does not support the custom menus feature (the default themes, %2$s and %3$s, do), you can learn about adding this support by following the Documentation link to the side."
msgstr "Menyer kan vises i plasseringer som er definert av ditt tema, også i sidekolonner ved å legge til en «Tilpasset meny»-widget i Widgets-skjermen. Hvis temaet ikke støtter tilpassede menyer (standardtemaene, %2$s og %3$s, gjør det), kan du lære om hvordan man legger til denne støtten ved å følge dokumentasjonslenken ved siden av."
-#: wp-admin/nav-menus.php:562
+#: wp-admin/nav-menus.php:544
msgid "Clicking the arrow to the right of any menu item in the editor will reveal a standard group of settings. Additional settings such as link target, CSS classes, link relationships, and link descriptions can be enabled and disabled via the Screen Options tab."
msgstr "Å klikke på pilen til høyre for et menyelement i redigeringen vil vise en gruppe standardinnstillinger. Flere innstillinger, som lenkemål, CSS-klasser, lenkerelasjoner og lenkebeskrivelser kan aktiveres og deaktiveres via Visningsinnstillinger-fanen."
@@ -3499,27 +3793,27 @@ msgstr "Vedlegg"
msgid "Repeat New Password"
msgstr "Gjenta nytt passord"
-#: wp-admin/install.php:158 wp-admin/user-new.php:441
+#: wp-admin/install.php:158 wp-admin/user-new.php:442
msgid "Repeat Password"
msgstr "Gjenta passord"
-#: wp-admin/includes/nav-menu.php:884
+#: wp-admin/includes/nav-menu.php:904
msgid "Add menu items from the column on the left."
msgstr "Legg til menyelementer fra kolonnen til venstre."
#: wp-admin/includes/plugin-install.php:213
-msgid "Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the WordPress Plugin Directory or upload a plugin in .zip format via this page."
-msgstr "Utvidelser gir WordPress mer funksjonalitet. Du kan installere utvidelser automatisk fra WordPress Plugin Directory eller laste opp utvidelser i .zip-format via denne siden."
+msgid "Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the WordPress Plugin Directory or upload a plugin in .zip format by clicking the button at the top of this page."
+msgstr "Utvidelser gir WordPress mer funksjonalitet. Du kan installere utvidelser automatisk fra WordPress Plugin Directory eller laste opp utvidelser i .zip-format ved å klikke på knappen øverst på denne siden."
#. Plugin URI of the plugin/theme
msgid "http://wordpress.org/plugins/hello-dolly/"
msgstr "http://wordpress.org/plugins/hello-dolly/"
-#: wp-admin/includes/class-wp-upgrader.php:139
+#: wp-admin/includes/class-wp-upgrader.php:168
msgid "The package contains no files."
msgstr "Denne pakken inneholder ingen filer."
-#: wp-admin/includes/class-wp-upgrader.php:1345
+#: wp-admin/includes/class-theme-upgrader.php:70
msgid "The theme contains no files."
msgstr "Temaet inneholder ingen filer."
@@ -3543,11 +3837,11 @@ msgstr "Elementet du prøvde å gjenopprette fra papirkurven finnes ikke lengre.
msgid "This item has already been deleted."
msgstr "Elementet har allerede blitt slettet."
-#: wp-admin/nav-menus.php:788
+#: wp-admin/nav-menus.php:770
msgid "Drag each item into the order you prefer. Click the arrow on the right of the item to reveal additional configuration options."
msgstr "Dra alle elementene til den rekkefølgen du vil ha. Klikk på pilen til høyre for elementet for å vise flere innstillinger."
-#: wp-admin/nav-menus.php:552
+#: wp-admin/nav-menus.php:534
msgid "If you haven’t yet created any menus, click the ’create a new menu’ link to get started"
msgstr "Hvis du ikke har laget noen menyer ennå, klikk på «lag ny meny»-lenken for å komme i gang"
@@ -3587,7 +3881,7 @@ msgctxt "Button label for a next revision"
msgid "Next"
msgstr "Neste"
-#: wp-admin/nav-menus.php:412
+#: wp-admin/nav-menus.php:394
msgid "Menu locations updated."
msgstr "Menyplasseringer oppdatert."
@@ -3612,112 +3906,112 @@ msgstr "Spor %1$s."
msgid "Genre: %s."
msgstr "Sjanger: %s."
-#: wp-admin/includes/media.php:2916
+#: wp-admin/includes/media.php:2929
msgid "Audio Format:"
msgstr "Lydformat:"
-#: wp-admin/includes/media.php:2917
+#: wp-admin/includes/media.php:2930
msgid "Audio Codec:"
msgstr "Lydkodek:"
-#: wp-admin/includes/post.php:1616
+#: wp-admin/includes/post.php:1618
msgid "Your latest changes were saved as a revision."
msgstr "Dine siste endringer ble lagret som en revisjon."
-#: wp-admin/nav-menus.php:538
+#: wp-admin/nav-menus.php:520
msgid "This screen is used for managing your custom navigation menus."
msgstr "Denne skjermen brukes for å håndtere dine tilpassede navigeringsmenyer."
-#: wp-admin/nav-menus.php:540 wp-admin/themes.php:73
+#: wp-admin/nav-menus.php:522 wp-admin/themes.php:73
msgid "From this screen you can:"
msgstr "Fra denne skjermen kan du:"
-#: wp-admin/nav-menus.php:541
+#: wp-admin/nav-menus.php:523
msgid "Create, edit, and delete menus"
msgstr "Lage, redigere og slette menyer"
-#: wp-admin/nav-menus.php:542
+#: wp-admin/nav-menus.php:524
msgid "Add, organize, and modify individual menu items"
msgstr "Legge til organisere og modifisere individuelle menypunkter"
-#: wp-admin/nav-menus.php:550
+#: wp-admin/nav-menus.php:532
msgid "The menu management box at the top of the screen is used to control which menu is opened in the editor below."
msgstr "Menyhåndteringsboksen på toppen av skjermen brukes for å kontrollere hvilken meny som åpnes i redigeringsvinduet under."
-#: wp-admin/nav-menus.php:551
+#: wp-admin/nav-menus.php:533
msgid "To edit an existing menu, choose a menu from the drop down and click Select"
msgstr "For å redigere en eksisterende meny, velg en meny fra nedtrekksmenyen og klikk Velg"
-#: wp-admin/nav-menus.php:553
+#: wp-admin/nav-menus.php:535
msgid "You can assign theme locations to individual menus by selecting the desired settings at the bottom of the menu editor. To assign menus to all theme locations at once, visit the Manage Locations tab at the top of the screen."
msgstr "Du kan plassere individuelle menyer ved å velge de ønskede innstillingene i bunn av menyredigeringsvinduet. For å plassere alle menyene samtidig, gå til fanen Bestem plasseringer øverst i skjermen."
-#: wp-admin/nav-menus.php:557
+#: wp-admin/nav-menus.php:539
msgid "Menu Management"
msgstr "Menyhåndtering"
-#: wp-admin/nav-menus.php:561
+#: wp-admin/nav-menus.php:543
msgid "Each custom menu may contain a mix of links to pages, categories, custom URLs or other content types. Menu links are added by selecting items from the expanding boxes in the left-hand column below."
msgstr "Hver tilpasset meny kan inneholde en kombinasjon av lenker til sider, kategorier, tilpassede lenker eller annet innhold. Menylenker legges til ved å velge elementer fra de utvidende boksene i venstre kolonne nedenfor."
-#: wp-admin/nav-menus.php:563
+#: wp-admin/nav-menus.php:545
msgid "Add one or several items at once by selecting the checkbox next to each item and clicking Add to Menu"
msgstr "Legg til et eller flere elementer samtidig ved å krysse av i boksene ved siden av hvert element og klikk Legg til i meny"
-#: wp-admin/nav-menus.php:565
+#: wp-admin/nav-menus.php:547
msgid "To reorganize menu items, drag and drop items with your mouse or use your keyboard. Drag or move a menu item a little to the right to make it a submenu"
msgstr "For å omorganisere menyelementer, dra og slipp elementer med musen eller ditt tastatur. Dra eller slipp menyelemenyer litt til høyre for å lage en undermeny"
-#: wp-admin/nav-menus.php:566
+#: wp-admin/nav-menus.php:548
msgid "Delete a menu item by expanding it and clicking the Remove link"
msgstr "Slett et menyelement ved å utvide det og klikke på Slett lenke"
-#: wp-admin/nav-menus.php:570
+#: wp-admin/nav-menus.php:552
msgid "Editing Menus"
msgstr "Redigerer menyer"
-#: wp-admin/nav-menus.php:574
+#: wp-admin/nav-menus.php:556
msgid "This screen is used for globally assigning menus to locations defined by your theme."
msgstr "Denne skjermen brukes for å tilordne menyer til alle plasseringene som er definert i ditt tema."
-#: wp-admin/nav-menus.php:575
+#: wp-admin/nav-menus.php:557
msgid "To assign menus to one or more theme locations, select a menu from each location’s drop down. When you’re finished, click Save Changes"
msgstr "For å tilordne menyer til én eller flere plasseringer, velg en meny fra hver plasserings nedtrekksmeny. Når du er klar, klikk Lagre endringer"
-#: wp-admin/nav-menus.php:576
+#: wp-admin/nav-menus.php:558
msgid "To edit a menu currently assigned to a theme location, click the adjacent ’Edit’ link"
msgstr "For å redigere en meny som er tilordnet en plassering, klikk på «Rediger»-lenken ved siden av"
-#: wp-admin/nav-menus.php:577
+#: wp-admin/nav-menus.php:559
msgid "To add a new menu instead of assigning an existing one, click the ’Use new menu’ link. Your new menu will be automatically assigned to that theme location"
msgstr "For å legge til en ny meny istedenfor å tilordne en som allerede eksisterer, klikk «Bruk ny meny»-lenken. Din nye meny vil automatisk bli tilordnet den temaplasseringen"
-#: wp-admin/nav-menus.php:612
+#: wp-admin/nav-menus.php:594
msgid "Edit Menus"
msgstr "Rediger menyer"
-#: wp-admin/nav-menus.php:614
+#: wp-admin/nav-menus.php:596
msgid "Manage Locations"
msgstr "Bestem plasseringer"
-#: wp-admin/nav-menus.php:637
+#: wp-admin/nav-menus.php:619
msgid "Theme Location"
msgstr "Temaplassering"
-#: wp-admin/nav-menus.php:638
+#: wp-admin/nav-menus.php:620
msgid "Assigned Menu"
msgstr "Tilordnet meny"
-#: wp-admin/nav-menus.php:647
+#: wp-admin/nav-menus.php:629
msgid "Select a Menu"
msgstr "Velg en meny"
-#: wp-admin/nav-menus.php:659
+#: wp-admin/nav-menus.php:641
msgctxt "menu"
msgid "Edit"
msgstr "Rediger"
-#: wp-admin/nav-menus.php:665
+#: wp-admin/nav-menus.php:647
msgctxt "menu"
msgid "Use new menu"
msgstr "Bruk ny meny"
@@ -3750,31 +4044,23 @@ msgstr "Flytt ned"
msgid "To the top"
msgstr "Til toppen"
-#: wp-admin/nav-menus.php:787
+#: wp-admin/nav-menus.php:769
msgid "Menu Structure"
msgstr "Menystruktur"
-#: wp-admin/nav-menus.php:807
+#: wp-admin/nav-menus.php:789
msgid "Menu Settings"
msgstr "Menyinnstillinger"
-#: wp-admin/includes/template.php:2000
+#: wp-admin/includes/template.php:2016
msgid "The backup of this post in your browser is different from the version below."
msgstr "En kopi av dette innlegget i denne nettleseren stemmer ikke med versjonen under."
-#: wp-admin/includes/template.php:2001
-msgid "Restore the backup."
-msgstr "Gjenopprett tidligere innlegg."
+#: wp-admin/includes/template.php:2017
+msgid "Restore the backup"
+msgstr "Gjenopprett sikkerhetskopi"
-#: wp-admin/includes/template.php:2004
-msgid "Post restored successfully."
-msgstr "Innlegget gjenopprettet."
-
-#: wp-admin/includes/template.php:2005
-msgid "Undo."
-msgstr "Angre."
-
-#: wp-admin/includes/ajax-actions.php:1244
+#: wp-admin/includes/ajax-actions.php:1260
msgid "Draft created on %1$s at %2$s"
msgstr "Kladd opprettet %1$s klokka %2$s"
@@ -3782,7 +4068,7 @@ msgstr "Kladd opprettet %1$s klokka %2$s"
msgid "%s has taken over and is currently editing."
msgstr "%s har tatt over og skriver."
-#: wp-admin/includes/post.php:1601
+#: wp-admin/includes/post.php:1603
msgid "Take over"
msgstr "Ta over"
@@ -3790,15 +4076,15 @@ msgstr "Ta over"
msgid "You cannot move this item to the Trash. %s is currently editing."
msgstr "Du kan ikke flytte dette elementet til Papirkurven. %s arbeider med det nå."
-#: wp-admin/nav-menus.php:690
+#: wp-admin/nav-menus.php:672
msgid "Edit your menu below, or create a new menu."
msgstr "Rediger menyen under eller lag en ny."
-#: wp-admin/nav-menus.php:695
+#: wp-admin/nav-menus.php:677
msgid "Select a menu to edit:"
msgstr "Velg en meny du vil redigere:"
-#: wp-admin/nav-menus.php:736
+#: wp-admin/nav-menus.php:718
msgid "or create a new menu."
msgstr "eller lag en ny meny."
@@ -3806,7 +4092,7 @@ msgstr "eller lag en ny meny."
msgid "Thank you for Updating! Please visit the Upgrade Network page to update all your sites."
msgstr "Takk for at du oppdaterer WordPress! Vær vennlig å besøke siden Oppdater nettverk for å oppdatere alle dine nettsteder."
-#: wp-admin/setup-config.php:397
+#: wp-admin/setup-config.php:405
msgid "All right, sparky! You’ve made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to…"
msgstr "OK, tøffing! Du har klart deg så langt i installasjonen. WordPress kan nå kommunisere med databasen. Gjør deg klar til…"
@@ -3814,23 +4100,23 @@ msgstr "OK, tøffing! Du har klart deg så langt i installasjonen. WordPress kan
msgid "sub item"
msgstr "undermeny"
-#: wp-admin/nav-menus.php:299
+#: wp-admin/nav-menus.php:281
msgid "Selected menus have been successfully deleted."
msgstr "Valgte menyer er slettet."
-#: wp-admin/nav-menus.php:788
+#: wp-admin/nav-menus.php:770
msgid "Edit your default menu by adding or removing items. Drag each item into the order you prefer. Click Create Menu to save your changes."
msgstr "Rediger din standard meny ved å legge til eller fjerne elementer. Dra hvert element til ønsket plass. Klikk Lag meny for å lagre endringene dine."
-#: wp-admin/nav-menus.php:801
+#: wp-admin/nav-menus.php:783
msgid "Give your menu a name, then click Create Menu."
msgstr "Gi menyen et navn og klikk Lag meny."
-#: wp-admin/nav-menus.php:820
+#: wp-admin/nav-menus.php:802
msgid "Auto add pages"
msgstr "Legg til sider automatisk"
-#: wp-admin/nav-menus.php:827
+#: wp-admin/nav-menus.php:809
msgid "Theme locations"
msgstr "Temaplasseringer"
@@ -3846,7 +4132,7 @@ msgstr "Undersøk"
msgid "For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function."
msgstr "For PHP-filer kan du bruke Dokumentasjon-menyen for å velge funksjoner som er kjent igjen i den filen. Slå opp tar deg til et nettsted med informasjon om den valgte funksjonen."
-#: wp-admin/includes/class-wp-posts-list-table.php:905
+#: wp-admin/includes/class-wp-posts-list-table.php:933
#: wp-admin/includes/misc.php:749
msgid "%s is currently editing"
msgstr "%s arbeider nå"
@@ -3863,7 +4149,7 @@ msgstr "Bilderotasjon er ikke støttet av din nettserver."
msgid "If you are looking to use the link manager, please install the Link Manager plugin."
msgstr "Hvis du leter etter lenkehåndtereren, vennligst installer utvidelsen Lenkehåndtering."
-#: wp-admin/includes/dashboard.php:1480
+#: wp-admin/includes/dashboard.php:1490
msgid "Manage widgets or menus"
msgstr "Håndter widgeter eller menyer"
@@ -3891,7 +4177,7 @@ msgstr "Flere bokser på denne skjermen inneholder innstillinger for hvordan inn
msgid "Publish Settings"
msgstr "Publiseringsinnstillinger"
-#: wp-admin/edit-tags.php:257
+#: wp-admin/edit-tags.php:266
msgid "Parent — Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have child categories for Bebop and Big Band. Totally optional. To create a subcategory, just choose another category from the Parent dropdown."
msgstr "Forelder – Kategorier er hierarkiske i motsetning til stikkord. Du kan ha en Jazz-kategori, og under kan du ha datterkategorier som Bebop og Big Band. Helt valgfritt. For å lage en underkategori er det bare å velge en annen kategori fra Forelder-menyen."
@@ -3899,7 +4185,7 @@ msgstr "Forelder – Kategorier er hierarkiske i motsetning til
msgid "When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved."
msgstr "Når du endrer temaer er det ofte litt variasjon i antallet og oppsettet med widget-områder, og noen ganger oppstår konflikter som gjør overgangen ikke-fullt-så-smertefri. Hvis du endret temaer og det ser ut til at du mangler noen widgeter, bla ned på siden til Inaktive widgeter, der alle dine widgeter og deres innstillinger blir lagret."
-#: wp-admin/includes/media.php:2640
+#: wp-admin/includes/media.php:2642
msgid "You are using the multi-file uploader. Problems? Try the browser uploader instead."
msgstr "Du bruker fler-filopplasteren. Problemer? Prøv nettleseropplasting isteden."
@@ -3920,7 +4206,7 @@ msgid "Uploaded to"
msgstr "Lastet opp til"
#: wp-admin/custom-background.php:374 wp-admin/custom-header.php:846
-#: wp-admin/includes/ajax-actions.php:2038
+#: wp-admin/includes/ajax-actions.php:2056
msgid "The uploaded file is not a valid image. Please try again."
msgstr "Den opplastede filen er ikke et gyldig bilde. Vennligst prøv igjen."
@@ -3944,19 +4230,19 @@ msgstr "I seksjonen for sidetopp-tekst på denne siden, kan du velge om du vil v
msgid "You can choose whether or not your site will be crawled by robots, ping services, and spiders. If you want those services to ignore your site, click the checkbox next to “Discourage search engines from indexing this site” and click the Save Changes button at the bottom of the screen. Note that your privacy is not complete; your site is still visible on the web."
msgstr "Du kan velge om du vil at ditt nettsted skal bli gjennomsøkt av roboter, ping-tjenester og edderkopper. Hvis du vil at disse tjenestene skal ignorere ditt nettsted, aktiver «Be søkemotorer om å ikke indeksere nettstedet» og klikk på knappen Lagre endringer nederst på siden. Husk at nettstedet ikke er privat – det er fortsatt synlig på internett."
-#: wp-admin/includes/dashboard.php:1475
+#: wp-admin/includes/dashboard.php:1485
msgid "More Actions"
msgstr "Flere handlinger"
-#: wp-admin/includes/dashboard.php:1490
+#: wp-admin/includes/dashboard.php:1500
msgid "Turn comments on or off"
msgstr "Skru kommentarer på eller av"
-#: wp-admin/includes/dashboard.php:1492
+#: wp-admin/includes/dashboard.php:1502
msgid "Learn more about getting started"
msgstr "Lær mer om å komme i gang"
-#: wp-admin/includes/media.php:2828
+#: wp-admin/includes/media.php:2841
msgid "File URL:"
msgstr "Fil-URL:"
@@ -3996,68 +4282,68 @@ msgstr "Vennligst ta et valg."
msgid "ERROR: The email address is already used."
msgstr "FEIL: E-postadressen er allerede i bruk."
-#: wp-admin/includes/image-edit.php:260 wp-admin/includes/image-edit.php:325
-#: wp-admin/includes/image-edit.php:467
+#: wp-admin/includes/image-edit.php:259 wp-admin/includes/image-edit.php:324
+#: wp-admin/includes/image-edit.php:466
msgid "$image needs to be an WP_Image_Editor object"
msgstr "$image må være et WP_Image_Editor-objekt"
-#: wp-admin/includes/image-edit.php:391
+#: wp-admin/includes/image-edit.php:390
msgid "Use WP_Image_Editor::rotate"
msgstr "Bruk WP_Image_Editor::rotate"
-#: wp-admin/includes/image-edit.php:414
+#: wp-admin/includes/image-edit.php:413
msgid "Use WP_Image_Editor::flip"
msgstr "Bruk WP_Image_Editor::flip"
-#: wp-admin/includes/template.php:1256
+#: wp-admin/includes/template.php:1263
msgid "The privacy options group has been removed. Use another settings group."
msgstr "Gruppen med fortrolighetsvalg har blitt slettet. Bruk en annen gruppe med innstillinger."
-#: wp-admin/includes/dashboard.php:333
+#: wp-admin/includes/dashboard.php:341
msgid "Search Engines Discouraged"
msgstr "Søkemotorer bedt om ikke å indeksere nettstedet"
-#: wp-admin/includes/dashboard.php:1444
+#: wp-admin/includes/dashboard.php:1454
msgid "Welcome to WordPress!"
msgstr "Velkommen til WordPress!"
-#: wp-admin/includes/dashboard.php:1445
+#: wp-admin/includes/dashboard.php:1455
msgid "We’ve assembled some links to get you started:"
msgstr "Vi har satt sammen noen lenker for at du skal komme i gang:"
-#: wp-admin/includes/dashboard.php:1449
+#: wp-admin/includes/dashboard.php:1459
msgid "Get Started"
msgstr "Kom i gang"
-#: wp-admin/includes/dashboard.php:1454
+#: wp-admin/includes/dashboard.php:1464
msgid "or, change your theme completely"
msgstr "eller, endre hele temaet"
-#: wp-admin/includes/dashboard.php:1458
+#: wp-admin/includes/dashboard.php:1468
msgid "Next Steps"
msgstr "Neste skritt"
-#: wp-admin/includes/dashboard.php:1461 wp-admin/includes/dashboard.php:1464
+#: wp-admin/includes/dashboard.php:1471 wp-admin/includes/dashboard.php:1474
msgid "Edit your front page"
msgstr "Rediger din forside"
-#: wp-admin/includes/dashboard.php:1462 wp-admin/includes/dashboard.php:1465
+#: wp-admin/includes/dashboard.php:1472 wp-admin/includes/dashboard.php:1475
msgid "Add additional pages"
msgstr "Legg til flere sider"
-#: wp-admin/includes/dashboard.php:1466
+#: wp-admin/includes/dashboard.php:1476
msgid "Add a blog post"
msgstr "Legg til et blogginnlegg"
-#: wp-admin/includes/dashboard.php:1468
+#: wp-admin/includes/dashboard.php:1478
msgid "Write your first blog post"
msgstr "Skriv ditt første blogginnlegg"
-#: wp-admin/includes/dashboard.php:1469
+#: wp-admin/includes/dashboard.php:1479
msgid "Add an About page"
msgstr "Legg til en Om meg- eller Om oss-side"
-#: wp-admin/includes/dashboard.php:1471
+#: wp-admin/includes/dashboard.php:1481
msgid "View your site"
msgstr "Vis ditt nettsted"
@@ -4065,25 +4351,25 @@ msgstr "Vis ditt nettsted"
msgid "Uploaded on: %1$s"
msgstr "Lastet opp: %1$s"
-#: wp-admin/includes/plugin-install.php:306
+#: wp-admin/includes/plugin-install.php:299
msgid "If you have marked plugins as favorites on WordPress.org, you can browse them here."
msgstr "Hvis du har merket utvidelser som favoritter på WordPress.org, kan du bla i dem her."
-#: wp-admin/includes/plugin-install.php:310 wp-admin/theme-install.php:170
+#: wp-admin/includes/plugin-install.php:303 wp-admin/theme-install.php:172
msgid "Your WordPress.org username:"
msgstr "Ditt brukernavn på WordPress.org:"
-#: wp-admin/includes/plugin-install.php:312 wp-admin/theme-install.php:173
+#: wp-admin/includes/plugin-install.php:305 wp-admin/theme-install.php:175
msgid "Get Favorites"
msgstr "Hent favoritter"
-#: wp-admin/includes/plugin.php:1776 wp-admin/includes/plugin.php:1781
-#: wp-admin/includes/plugin.php:1805 wp-admin/includes/plugin.php:1810
-#: wp-admin/includes/template.php:1200 wp-admin/includes/template.php:1205
+#: wp-admin/includes/plugin.php:1783 wp-admin/includes/plugin.php:1788
+#: wp-admin/includes/plugin.php:1812 wp-admin/includes/plugin.php:1817
+#: wp-admin/includes/template.php:1207 wp-admin/includes/template.php:1212
msgid "The \"%s\" options group has been removed. Use another settings group."
msgstr "Gruppen med innstillinger for \"%s\" har blitt fjernet. Bruk en annen gruppe med innstillinger."
-#: wp-admin/includes/update-core.php:1222 wp-admin/update-core.php:502
+#: wp-admin/includes/update-core.php:1224 wp-admin/update-core.php:502
msgid "Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here."
msgstr "Velkommen til WordPress %1$s. Du vil bli omdirigert til Om WordPress-skjermen. Hvis ikke, klikk her."
@@ -4110,23 +4396,23 @@ msgstr "Be søkemotorer om ikke å indeksere nettstedet"
msgid "It is up to search engines to honor this request."
msgstr "Det er opp til søkemotorene å oppfylle ditt ønske."
-#: wp-admin/plugin-install.php:79
-msgid "If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress.org 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."
-msgstr "Hvis du vet hva du leter etter, er det best å søke. Søkeskjermen har valg for å søke i utvidelseskatalogen til WordPress.org for et bestemt nøkkelord, forfatter eller stikkord. Du kan også søke i katalogen ved å velge populære stikkord. Stikkord i større skrift betyr at flere utvidelser har blitt merket med det stikkordet."
+#: wp-admin/plugin-install.php:90
+msgid "If you know what you’re 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."
+msgstr "Hvis du vet hva du leter etter, er det best å søke. Søkeskjermen har valg for å søke i utvidelseskatalogen til WordPress.org for et bestemt nøkkelord, forfatter eller stikkord. Du kan også søke i katalogen ved å velge populære stikkord. Stikkord i større skrift betyr at flere utvidelser har blitt merket med det stikkordet."
-#: wp-admin/plugin-install.php:81
-msgid "You can also browse a user’s favorite plugins, by using the Favorites link in the upper left of the screen and entering their WordPress.org username."
-msgstr "Du kan også bla i en brukers favorittutvidelser, ved å bruke lenken Favoritter oppe til venstre i skjermen og ved å skrive inn deres WordPress.org-brukernavn"
+#: wp-admin/plugin-install.php:92
+msgid "You can also browse a user’s favorite plugins, by using the Favorites link above the plugins list and entering their WordPress.org username."
+msgstr "Du kan også bla i en brukers favorittutvidelser, ved å bruke lenken Favoritter over lenken med utvidelser og å skrive inn deres WordPress.org-brukernavn."
-#: wp-admin/plugin-install.php:82
-msgid "If you want to install a plugin that you’ve downloaded elsewhere, click the Upload link in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin."
-msgstr "Hvis du vil installere en utvidelse som du har lastet ned andre steder, klikke på Last opp-lenken oppe til venstre. Du vil bli bedt om å laste opp .zip-filen, og når den er lastet opp kan du aktivere den nye utvidelsen."
+#: wp-admin/plugin-install.php:93
+msgid "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."
+msgstr "Hvis du vil installere en utvidelse som du har lastet ned andre steder, klikke på Last opp-lenken over listen med utvidelser. Du vil bli bedt om å laste opp .zip-filen, og når den er lastet opp kan du aktivere den nye utvidelsen."
-#: wp-admin/setup-config.php:186
+#: wp-admin/setup-config.php:188
msgid "Below you should enter your database connection details. If you’re not sure about these, contact your host."
msgstr "Under skal du skrive inn databasedetaljene. Hvis du ikke er sikker på disse, kontakt din nettjener."
-#: wp-admin/setup-config.php:366
+#: wp-admin/setup-config.php:374
msgid "After you’ve done that, click “Run the install.”"
msgstr "Etter at du har gjort dette, klikk «Kjør installering»."
@@ -4143,11 +4429,11 @@ msgctxt "Plugin Installer"
msgid "Favorites"
msgstr "Favoritter"
-#: wp-admin/includes/theme.php:257
+#: wp-admin/includes/theme.php:256
msgid "Flexible Header"
msgstr "Fleksibel sidetopp"
-#: wp-admin/theme-install.php:97
+#: wp-admin/theme-install.php:98
msgid "To install the theme so you can preview it with your site’s content and customize its theme options, click the \"Install\" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the \"Activate\" link, or by navigating to your Manage Themes screen and clicking the \"Live Preview\" link under any installed theme’s thumbnail image."
msgstr "For å installere tema slik at du kan forhåndsvise det med innholdet til din nettside og skreddersy temaets egenskaper, klikk knappen «Installer» på toppen i den venstre boksen. Temafilene vil lastes ned til ditt nettsted automatisk. Når dette er fullført vil temaet være tilgjengelig for aktivering. Dette gjør du ved å klikke lenken «Aktiver», eller ved å navigere til skjermen Temaer og klikke på lenken «Live forhåndsvisning» under miniatyrbildet til hvilket som helst installert tema."
@@ -4161,7 +4447,7 @@ msgctxt "widget"
msgid "Edit"
msgstr "Rediger "
-#: wp-admin/includes/upgrade.php:214
+#: wp-admin/includes/upgrade.php:217
msgid ""
"This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:\n"
"\n"
@@ -4183,14 +4469,6 @@ msgstr ""
"\n"
"Som ny WordPress-bruker burde du gå til ditt kontrollpanel for å slette denne siden og lage nye sider for ditt innhold. Lykke til!"
-#: wp-admin/includes/upgrade.php:196
-msgid ""
-"Hi, this is a comment.\n"
-"To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them."
-msgstr ""
-"Hei, dette er en kommentar.\n"
-"For å slette en kommentar, er det bare å logge inn og se på innleggets kommentarer. Der vil du ha muligheten til å redigere eller slette kommentarer."
-
#: wp-admin/includes/theme-install.php:80
msgid "Search by tag"
msgstr "Søk etter stikkord"
@@ -4208,11 +4486,11 @@ msgstr "Søk etter nøkkelord"
msgid "Type of search"
msgstr "Type søk"
-#: wp-admin/includes/class-wp-screen.php:980
+#: wp-admin/includes/class-wp-screen.php:978
msgid "Screen Options Tab"
msgstr "Fane for Visningsinnstillinger"
-#: wp-admin/includes/class-wp-screen.php:796
+#: wp-admin/includes/class-wp-screen.php:794
msgid "Contextual Help Tab"
msgstr "Fane for kontekstbasert hjelp"
@@ -4220,11 +4498,11 @@ msgstr "Fane for kontekstbasert hjelp"
msgid "Sorry, you have used your space allocation. Please delete some files to upload more files."
msgstr "Beklager, du har brukt opp all tilgjengelig plass. Du må slette noen filer for å kunne laste opp flere."
-#: wp-admin/includes/media.php:2695
+#: wp-admin/includes/media.php:2697
msgid "Sorry, you have used all of your storage quota of %s MB."
msgstr "Beklager, du har brukt opp din lagringskvote på %s MB."
-#: wp-admin/includes/class-wp-comments-list-table.php:628
+#: wp-admin/includes/class-wp-comments-list-table.php:627
msgid "Select comment"
msgstr "Velg kommentar"
@@ -4232,19 +4510,19 @@ msgstr "Velg kommentar"
#. translators: %s: theme name
#: wp-admin/includes/class-wp-links-list-table.php:172
#: wp-admin/includes/class-wp-media-list-table.php:351
-#: wp-admin/includes/class-wp-plugins-list-table.php:691
-#: wp-admin/includes/class-wp-posts-list-table.php:801
+#: wp-admin/includes/class-wp-plugins-list-table.php:731
+#: wp-admin/includes/class-wp-posts-list-table.php:829
#: wp-admin/includes/class-wp-terms-list-table.php:338
-#: wp-admin/includes/class-wp-users-list-table.php:430
+#: wp-admin/includes/class-wp-users-list-table.php:432
#: wp-admin/update-core.php:300 wp-admin/update-core.php:371
msgid "Select %s"
msgstr "Velg %s"
-#: wp-admin/edit-tags.php:365
+#: wp-admin/edit-tags.php:596
msgid "Tags can be selectively converted to categories using the tag to category converter."
msgstr "Stikkord kan bli konvertert til kategorier ved å bruke stikkord til kategori-konvertereren."
-#: wp-admin/edit-tags.php:234
+#: wp-admin/edit-tags.php:243
msgid "You can delete Link Categories in the Bulk Action pull-down, but that action does not delete the links within the category. Instead, it moves them to the default Link Category."
msgstr "Du kan slette lenkekategorier i massehandlinger-menyen, men den handlingen sletter ikke lenkene innenfor den kategorien. Lenkene her blir isteden flyttet til standardkategorien for lenker."
@@ -4282,7 +4560,7 @@ msgstr "Eller velg et bilde fra ditt mediabibliotek:"
#: wp-admin/customize.php:173
#: wp-admin/includes/class-wp-theme-install-list-table.php:341
-#: wp-admin/theme-install.php:293
+#: wp-admin/theme-install.php:324
msgid "Collapse"
msgstr "Trekk sammen"
@@ -4294,7 +4572,7 @@ msgstr "Hvis du ikke ønsker å vise et toppbilde på nettstedet ditt, klikk på
msgid "You attempted to edit an item that isn’t an attachment. Please go back and try again."
msgstr "Du har prøvd å redigere en fil som ikke er et vedlegg. Vennligst gå tilbake og prøv igjen."
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:475
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:501
msgctxt "plugin"
msgid "Installed"
msgstr "Installert"
@@ -4306,16 +4584,16 @@ msgstr "Dette temaet er allerede installert og oppdatert"
#: wp-admin/includes/class-wp-theme-install-list-table.php:282
#: wp-admin/includes/class-wp-theme-install-list-table.php:405
-#: wp-admin/theme-install.php:259
+#: wp-admin/theme-install.php:274
msgctxt "theme"
msgid "Installed"
msgstr "Installert"
-#: wp-admin/theme-install.php:96
+#: wp-admin/theme-install.php:97
msgid "Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look."
msgstr "Når du har lagt generert en liste med temaer, kan du forhåndsvise og installere et eller flere. Klikk på miniatyrbildet til temaet du ønsker å se, så åpner det seg i en fullskjermsvisning for at du skal få et bedre inntrykk av hvordan temaet kommer til å se ut."
-#: wp-admin/theme-install.php:101
+#: wp-admin/theme-install.php:102
msgid "Previewing and Installing"
msgstr "Forhåndsviser og installerer"
@@ -4323,11 +4601,13 @@ msgstr "Forhåndsviser og installerer"
msgid "Previewing and Customizing"
msgstr "Forhåndsviser og tilpasser"
-#: wp-admin/includes/media.php:2653
+#: wp-admin/includes/media.php:2655
msgid "You are using the browser’s built-in file uploader. The WordPress uploader includes multiple file selection and drag and drop capability. Switch to the multi-file uploader."
msgstr "Du bruker nettleserens innebygde opplaster. Med WordPress' flerfilopplaster kan du velge mange filer samtidig med dra-og-slipp. Bytt til flerfilopplaster"
+#. translators: %s: Theme name
#: wp-admin/includes/class-wp-theme-install-list-table.php:290
+#: wp-admin/includes/theme.php:652
msgid "Preview %s"
msgstr "Forhåndsvis %s"
@@ -4376,8 +4656,8 @@ msgstr "Bruker slettet."
msgid "New user created. Edit user"
msgstr "Ny bruker opprettet. Rediger bruker."
-#: wp-admin/includes/class-wp-upgrader.php:2239 wp-admin/includes/file.php:654
-#: wp-admin/includes/file.php:760
+#: wp-admin/includes/class-core-upgrader.php:36 wp-admin/includes/file.php:668
+#: wp-admin/includes/file.php:774
msgid "Could not copy files. You may have run out of disk space."
msgstr "Kunne ikke kopiere filer. Du kan ha gått tom for lagringsplass."
@@ -4389,7 +4669,7 @@ msgstr "Søk blant temaer etter nøkkelord."
msgid "Find a theme based on specific features."
msgstr "Finn et tema basert på spesielle egenskaper."
-#: wp-admin/setup-config.php:172
+#: wp-admin/setup-config.php:174
msgid "In all likelihood, these items were supplied to you by your Web Host. If you don’t have this information, then you will need to contact them before you can continue. If you’re all ready…"
msgstr "Sannsynligvis har du fått denne informasjonen fra din web-admin. Hvis du ikke har denne informasjonen, må du kontakte dem før du kan fortsette. Hvis du er klar…"
@@ -4405,11 +4685,11 @@ msgstr "Bruk som bakgrunnsbilde"
msgid "Set as header"
msgstr "Bruk som topptekst"
-#: wp-admin/includes/class-wp-upgrader-skins.php:743
+#: wp-admin/includes/class-theme-upgrader-skin.php:55
msgid "Customize “%s”"
msgstr "Tilpass temaet «%s»"
-#: wp-admin/about.php:23
+#: wp-admin/about.php:43
msgid "About"
msgstr "Om"
@@ -4434,38 +4714,39 @@ msgstr "Mål"
msgid "All"
msgstr "Alle"
-#: wp-admin/includes/class-wp-comments-list-table.php:301
-#: wp-admin/includes/class-wp-comments-list-table.php:575
+#: wp-admin/includes/class-wp-comments-list-table.php:300
+#: wp-admin/includes/class-wp-comments-list-table.php:574
#: wp-admin/includes/class-wp-media-list-table.php:144
-#: wp-admin/includes/class-wp-media-list-table.php:713
+#: wp-admin/includes/class-wp-media-list-table.php:715
#: wp-admin/includes/class-wp-posts-list-table.php:397
-#: wp-admin/includes/class-wp-posts-list-table.php:1203
+#: wp-admin/includes/class-wp-posts-list-table.php:1231
msgid "Restore"
msgstr "Gjenopprett"
+#. translators: %s: Time since the last update
#: wp-admin/includes/class-wp-media-list-table.php:449
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:536
-#: wp-admin/includes/class-wp-posts-list-table.php:944
-#: wp-admin/includes/plugin-install.php:552 wp-admin/includes/revision.php:209
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:563
+#: wp-admin/includes/class-wp-posts-list-table.php:972
+#: wp-admin/includes/plugin-install.php:547 wp-admin/includes/revision.php:209
#: wp-admin/includes/revision.php:251
msgid "%s ago"
msgstr "%s siden"
-#: wp-admin/includes/media.php:2236 wp-admin/users.php:60
+#: wp-admin/includes/media.php:2238 wp-admin/users.php:60
msgid "Actions"
msgstr "Handlinger"
-#: wp-admin/includes/class-wp-plugins-list-table.php:345
+#: wp-admin/includes/class-wp-plugins-list-table.php:385
msgid "Plugin"
msgstr "Utvidelse"
#: wp-admin/includes/class-wp-theme-install-list-table.php:420
#: wp-admin/includes/class-wp-themes-list-table.php:235
-#: wp-admin/includes/plugin-install.php:547
+#: wp-admin/includes/plugin-install.php:540
msgid "Version:"
msgstr "Versjon:"
-#: wp-admin/includes/dashboard.php:190 wp-admin/setup-config.php:219
+#: wp-admin/includes/dashboard.php:198 wp-admin/setup-config.php:221
msgid "Submit"
msgstr "Send"
@@ -4477,84 +4758,32 @@ msgstr "Ingen kommentarer ennå."
msgid "Scale"
msgstr "Skaler"
-#: wp-admin/includes/media.php:1217
+#: wp-admin/includes/media.php:1219
msgid "Link URL"
msgstr "Lenke-URL"
-#: wp-admin/includes/media.php:1220 wp-admin/includes/media.php:2604
+#: wp-admin/includes/media.php:1222 wp-admin/includes/media.php:2606
msgid "Enter a link URL or click above for presets."
msgstr "Skriv inn en lenke-URL eller klikk ovenfor for standardvalg."
-#: wp-admin/export.php:261 wp-admin/includes/media.php:2234
+#: wp-admin/export.php:261 wp-admin/includes/media.php:2236
#: wp-admin/menu.php:49 wp-admin/menu.php:253
msgid "Media"
msgstr "Media"
-#: wp-admin/includes/class-wp-press-this.php:908
-#: wp-admin/includes/class-wp-press-this.php:957
+#: wp-admin/includes/class-wp-press-this.php:880
+#: wp-admin/includes/class-wp-press-this.php:929
#: wp-admin/includes/meta-boxes.php:434 wp-admin/includes/meta-boxes.php:969
msgid "Add"
msgstr "Legg til"
-#: wp-admin/includes/class-wp-list-table.php:1069
-#: wp-admin/includes/nav-menu.php:553 wp-admin/includes/nav-menu.php:744
+#: wp-admin/includes/class-wp-list-table.php:1070
+#: wp-admin/includes/nav-menu.php:566 wp-admin/includes/nav-menu.php:764
#: wp-admin/update-core.php:249 wp-admin/update-core.php:325
#: wp-admin/update-core.php:357 wp-admin/update-core.php:396
msgid "Select All"
msgstr "Velg alle"
-#: wp-admin/includes/theme.php:217
-msgid "Black"
-msgstr "Svart"
-
-#: wp-admin/includes/theme.php:218
-msgid "Blue"
-msgstr "Blå"
-
-#: wp-admin/includes/theme.php:219
-msgid "Brown"
-msgstr "Brun"
-
-#: wp-admin/includes/theme.php:220
-msgid "Gray"
-msgstr "Grå"
-
-#: wp-admin/includes/theme.php:221
-msgid "Green"
-msgstr "Grønn"
-
-#: wp-admin/includes/theme.php:222
-msgid "Orange"
-msgstr "Oransje"
-
-#: wp-admin/includes/theme.php:223
-msgid "Pink"
-msgstr "Rosa"
-
-#: wp-admin/includes/theme.php:224
-msgid "Purple"
-msgstr "Lilla"
-
-#: wp-admin/includes/theme.php:225
-msgid "Red"
-msgstr "Rød"
-
-#: wp-admin/includes/theme.php:226
-msgid "Silver"
-msgstr "Sølv"
-
-#: wp-admin/includes/theme.php:228
-msgid "White"
-msgstr "Hvit"
-
-#: wp-admin/includes/theme.php:229
-msgid "Yellow"
-msgstr "Gul"
-
-#: wp-admin/includes/theme.php:248
-msgid "Blavatar"
-msgstr "Blavatar"
-
#: wp-admin/includes/user.php:113
msgid "ERROR: Please enter a nickname."
msgstr "FEIL: Vennligst skriv inn et kallenavn."
@@ -4564,37 +4793,37 @@ msgid "Edit Link"
msgstr "Rediger lenke"
#: wp-admin/install.php:159 wp-admin/user-edit.php:349
-#: wp-admin/user-edit.php:394 wp-admin/user-new.php:394
-#: wp-admin/user-new.php:398 wp-admin/user-new.php:418
-#: wp-admin/user-new.php:441
+#: wp-admin/user-edit.php:394 wp-admin/user-new.php:395
+#: wp-admin/user-new.php:399 wp-admin/user-new.php:419
+#: wp-admin/user-new.php:442
msgid "(required)"
msgstr "(obligatorisk)"
-#: wp-admin/includes/plugin-install.php:267
+#: wp-admin/includes/plugin-install.php:261
#: wp-admin/includes/theme-install.php:67
msgid "Keyword"
msgstr "Nøkkelord"
-#: wp-admin/includes/class-wp-upgrader.php:1350
+#: wp-admin/includes/class-theme-upgrader.php:75
msgid "This theme requires a parent theme. Checking if it is installed…"
msgstr "Temaet forutsetter et foreldretema. Sjekker om det er installert…"
#. translators: 1: theme name, 2: version
-#: wp-admin/includes/class-wp-upgrader.php:1352
+#: wp-admin/includes/class-theme-upgrader.php:77
msgid "Preparing to install %1$s %2$s…"
msgstr "Forbereder installasjon av %1$s %2$s…"
#. translators: 1: theme name, 2: version
-#: wp-admin/includes/class-wp-upgrader.php:1354
+#: wp-admin/includes/class-theme-upgrader.php:79
msgid "The parent theme, %1$s %2$s, is currently installed."
msgstr "Foreldretemaet, %1$s %2$s, er installert."
#. translators: 1: theme name, 2: version
-#: wp-admin/includes/class-wp-upgrader.php:1356
+#: wp-admin/includes/class-theme-upgrader.php:81
msgid "Successfully installed the parent theme, %1$s %2$s."
msgstr "Vellykket installasjon av foreldretema, %1$s %2$s."
-#: wp-admin/includes/class-wp-upgrader.php:1357
+#: wp-admin/includes/class-theme-upgrader.php:82
msgid "The parent theme could not be found. You will need to install the parent theme, %s, before you can use this child theme."
msgstr "Foreldretemaet ble ikke funnet. Du må installere foreldretemaet, %s, før du kan bruke dette dattertemaet."
@@ -4607,13 +4836,18 @@ msgstr "Tittelfelt"
msgid "Show header text with your image."
msgstr "Vis tittelfelt sammen med bildet."
-#. translators: 1: theme name, 2: theme details URL, 3: accessibility text, 4:
-#. version number, 5: update URL, 6: accessibility text
-#: wp-admin/includes/theme.php:188
-msgid "There is a new version of %1$s available. View version %4$s details or update now."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Se detaljer for %4$s eller oppdater nå."
+#. translators: 1: theme name, 2: theme details URL, 3: additional link
+#. attributes, 4: version number, 5: update URL, 6: additional link attributes
+#. translators: 1: plugin name, 2: details URL, 3: additional link attributes,
+#. 4: version number, 5: update URL, 6: additional link attributes
+#. translators: 1: theme name, 2: details URL, 3: additional link attributes,
+#. 4: version number, 5: update URL, 6: additional link attributes
+#: wp-admin/includes/theme.php:201 wp-admin/includes/update.php:394
+#: wp-admin/includes/update.php:539
+msgid "There is a new version of %1$s available. View version %4$s details or update now."
+msgstr "Det er en ny versjon av %1$s tilgjengelig. Se detaljer for versjon %4$s eller oppdater nå."
-#: wp-admin/includes/plugin.php:171
+#: wp-admin/includes/plugin.php:179
msgid "By %s."
msgstr "Av %s."
@@ -4629,10 +4863,6 @@ msgstr "Legg til ny kommentar"
msgid "Add Comment"
msgstr "Legg til kommentar"
-#: wp-admin/includes/theme.php:231
-msgid "Light"
-msgstr "Lyst"
-
#. Plugin Name of the plugin/theme
msgid "Hello Dolly"
msgstr "Hello Dolly"
@@ -4649,15 +4879,17 @@ msgstr "Matt Mullenweg"
msgid "http://ma.tt/"
msgstr "http://ma.tt/"
-#: wp-admin/index.php:76
+#: wp-admin/index.php:86
msgid "Welcome — Shows links for some of the most common tasks when setting up a new site."
msgstr "Velkommen – Viser lenker for noen av de vanligste tingene som man gjør når man setter opp et nytt nettsted."
-#. translators: 1: theme name, 2: theme details URL, 3: accessibility text, 4:
-#. version number
-#: wp-admin/includes/theme.php:179
-msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s. Automatisk oppdatering er ikke tilgjengelig for dette temaet."
+#. translators: 1: theme name, 2: theme details URL, 3: additional link
+#. attributes, 4: version number
+#. translators: 1: theme name, 2: details URL, 3: additional link attributes,
+#. 4: version number
+#: wp-admin/includes/theme.php:190 wp-admin/includes/update.php:528
+msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme."
+msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s. Automatisk oppdatering er ikke tilgjengelig for dette temaet."
#. translators: 1: month number (01, 02, etc.), 2: month abbreviation
#: wp-admin/includes/template.php:719
@@ -4697,10 +4929,6 @@ msgstr "Takk for at du brukte %s. Nettstedet ditt har blitt slettet. God tur vid
msgid "If you do not want to use your %s site any more, you can delete it using the form below. When you click Delete My Site Permanently you will be sent an email with a link in it. Click on this link to delete your site."
msgstr "Hvis du ikke vil bruke ditt nettsted %s mer kan du slette det ved å bruke skjemaet under. En e-post med en lenke i vil bli sendt til deg når du klikker Slett nettstedet mitt permanent. Klikk på lenken i e-posten for å slette nettstedet ditt."
-#: wp-admin/ms-delete-site.php:16
-msgid "You do not have sufficient permissions to delete this site."
-msgstr "Du har ikke nok rettigheter til å slette dette nettstedet."
-
#: wp-admin/ms-delete-site.php:78
msgid "Thank you. Please check your email for a link to confirm your action. Your site will not be deleted until this link is clicked."
msgstr "Takk. Vennligst sjekk e-posten din for en lenke til å bekrefte forespørselen. Nettstedet ditt vil ikke bli slettet før du klikker på lenken."
@@ -4801,125 +5029,126 @@ msgstr "Hovednettstedet du valgte, finnes ikke."
msgid "Up until WordPress version 3.0, what is now called a Multisite Network had to be installed separately as WordPress MU (multi-user)."
msgstr "Frem til WordPress versjon 3.0, måtte det som nå heter Nettstedsnettverk bli installert separat som WordPress MU (multi-user)."
-#: wp-admin/setup-config.php:49
+#: wp-admin/setup-config.php:51
msgid "Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file to your WordPress installation."
msgstr "Beklager, vi trenger filen wp-config-sample.php for å ha noe å jobbe med. Venligst last opp denne igjen til din WordPress-installasjon."
#. translators: %s: install.php
-#: wp-admin/setup-config.php:55
+#: wp-admin/setup-config.php:57
msgid "The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now."
msgstr "Filen 'wp-config.php' finnes allerede. Hvis du må tilbakestille noen konfigurasjoner i denne filen, vennligst slett den først. Du kan prøve å installere nå."
#. translators: %s: install.php
-#: wp-admin/setup-config.php:64
+#: wp-admin/setup-config.php:66
msgid "The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now."
msgstr "Filen «wp-config.php» finnes allerede i mappen over din WordPress-installasjon. Hvis du må lage en ny, vennligst slett denne først. Du kan prøve å installere nå."
-#: wp-admin/setup-config.php:98
+#: wp-admin/setup-config.php:100
msgid "WordPress › Setup Configuration File"
msgstr "WordPress › Lag konfigurasjonsfil"
-#: wp-admin/setup-config.php:145
+#: wp-admin/setup-config.php:147
msgid "Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding."
msgstr "Velkommen til WordPress. Før vi starter, trenger vi litt informasjon om databasen. Du må vite følgende før vi fortsetter."
-#: wp-admin/setup-config.php:147
+#: wp-admin/setup-config.php:149
msgid "Database name"
msgstr "Navn på databasen"
-#: wp-admin/setup-config.php:148
+#: wp-admin/setup-config.php:150
msgid "Database username"
msgstr "Databasebruker"
-#: wp-admin/setup-config.php:149
+#: wp-admin/setup-config.php:151
msgid "Database password"
msgstr "Databasepassord"
-#: wp-admin/setup-config.php:150
+#: wp-admin/setup-config.php:152
msgid "Database host"
msgstr "Database-tjener (host)"
-#: wp-admin/setup-config.php:151
+#: wp-admin/setup-config.php:153
msgid "Table prefix (if you want to run more than one WordPress in a single database)"
msgstr "Tabellprefiks (hvis du vil kjøre mer enn én WordPress-installasjon i en enkelt database)"
-#: wp-admin/setup-config.php:174
+#: wp-admin/setup-config.php:176
msgid "Let’s go!"
msgstr "La oss fortsette!"
-#: wp-admin/setup-config.php:189
+#: wp-admin/setup-config.php:191
msgid "Database Name"
msgstr "Databasenavn"
-#: wp-admin/setup-config.php:195
+#: wp-admin/setup-config.php:197
msgctxt "example username"
msgid "username"
msgstr "brukernavn"
-#: wp-admin/setup-config.php:200
+#: wp-admin/setup-config.php:202
msgctxt "example password"
msgid "password"
msgstr "passord"
-#: wp-admin/setup-config.php:204
+#: wp-admin/setup-config.php:206
msgid "Database Host"
msgstr "Databasetjener"
-#: wp-admin/setup-config.php:212
+#: wp-admin/setup-config.php:214
msgid "Table Prefix"
msgstr "Tabellprefiks"
-#: wp-admin/setup-config.php:214
+#: wp-admin/setup-config.php:216
msgid "If you want to run multiple WordPress installations in a single database, change this."
msgstr "Hvis du vil kjøre flere WordPress-installasjoner i samme database, må du endre dette."
-#: wp-admin/setup-config.php:367 wp-admin/setup-config.php:399
+#: wp-admin/setup-config.php:375 wp-admin/setup-config.php:407
msgid "Run the install"
msgstr "Kjør installering"
-#: wp-admin/maint/repair.php:34
-msgid "To allow use of this page to automatically repair database problems, please add the following line to your wp-config.php file. Once this line is added to your config, reload this page."
-msgstr "For å go denne siden muligheten til å automatisk reparere databaseproblemer, vennligst legg til følgende linje i din wp-config.php-fil. Når linjen er lagt til din config, last inn denne siden på nytt."
+#. translators: %s: wp-config.php
+#: wp-admin/maint/repair.php:37
+msgid "To allow use of this page to automatically repair database problems, please add the following line to your %s file. Once this line is added to your config, reload this page."
+msgstr "For å gi denne siden muligheten til å automatisk reparere databaseproblemer, vennligst legg til følgende linje i din %s-fil. Når linjen er lagt til din config, last inn denne siden på nytt."
#: wp-admin/includes/class-wp-comments-list-table.php:187
msgid "No comments awaiting moderation."
msgstr "Ingen kommentarer venter på gjennomgang."
-#: wp-admin/includes/plugin-install.php:472
+#: wp-admin/includes/plugin-install.php:465
msgctxt "Plugin installer section title"
msgid "Changelog"
msgstr "Endringslogg"
-#: wp-admin/includes/plugin-install.php:474
+#: wp-admin/includes/plugin-install.php:467
msgctxt "Plugin installer section title"
msgid "Other Notes"
msgstr "Andre bemerkninger"
-#: wp-admin/includes/plugin-install.php:470
+#: wp-admin/includes/plugin-install.php:463
msgctxt "Plugin installer section title"
msgid "FAQ"
msgstr "Vanlige spørsmål"
-#: wp-admin/includes/plugin-install.php:469
+#: wp-admin/includes/plugin-install.php:462
msgctxt "Plugin installer section title"
msgid "Installation"
msgstr "Installasjon"
-#: wp-admin/includes/plugin-install.php:468
+#: wp-admin/includes/plugin-install.php:461
msgctxt "Plugin installer section title"
msgid "Description"
msgstr "Beskrivelse"
-#: wp-admin/includes/plugin-install.php:471
+#: wp-admin/includes/plugin-install.php:464
msgctxt "Plugin installer section title"
msgid "Screenshots"
msgstr "Skjermdumper"
-#: wp-admin/options-permalink.php:142
+#: wp-admin/options-permalink.php:133
msgid "You should update your web.config now."
msgstr "Du bør oppdatere din web.config nå."
-#: wp-admin/includes/plugin-install.php:569
+#: wp-admin/includes/plugin-install.php:571
msgid "Plugin Homepage »"
msgstr "Utvidelser →"
@@ -4928,7 +5157,7 @@ msgid "You can export a file of your site’s content in order to import it
msgstr "Du kan eksportere en fil med innholdet på ditt nettsted for så å importere det til en annen installasjon eller plattform. Den eksporterte filen vil være i et XML-format som heter WXR. Innlegg, sider, kommentarer, egendefinerte felt, kategorier og stikkord kan inkluderes. Du kan velge om WXR-filen kun skal inkludere noen innlegg eller sider ved å sette filtrene til kun å eksportere bestemte kategorier, forfattere, måneder eller innlegg med en bestemt publiseringsstatus."
#. translators: 1: table name, 2: error message,
-#: wp-admin/maint/repair.php:111
+#: wp-admin/maint/repair.php:117
msgid "Failed to repair the %1$s table. Error: %2$s"
msgstr "Rettingen av tabellen %1$s feilet. Feil: %2$s"
@@ -4936,13 +5165,13 @@ msgstr "Rettingen av tabellen %1$s feilet. Feil: %2$s"
msgid "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 don’t want the user to receive a welcome email."
msgstr "Nye brukere vil motta en e-post som forteller dem at de er lagt til på ditt nettsted. Denne e-posten inneholder også passord. Hvis du ikke vil sende e-post, må du merke dette i boksen."
-#: wp-admin/plugins.php:430
+#: wp-admin/plugins.php:429
msgid "The plugin generated %d characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin."
msgstr "Utvidelsen genererte %d tegn med uventet output under aktiveringen. Hvis du legger merke til «headers already sent»-meldinger, problemer med syndikerte strømmer eller andre feil, vennligst prøv å deaktivere eller slette denne utvidelsen."
#: wp-admin/users.php:42
-msgid "You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed."
-msgstr "Du kan filtrere listen med brukere etter brukerrolle ved hjelp av tekstlenkene opp til venstre for å vise alle, administratorer, redaktører, forfattere, bidragsytere eller abonnenter. Standardvisningen er satt til alle brukere. Roller som ikke er i bruk, vises ikke i listen."
+msgid "You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed."
+msgstr "Du kan filtrere listen med brukere etter brukerrolle ved hjelp av tekstlenkene over listen med brukere for å vise alle, administratorer, redaktører, forfattere, bidragsytere eller abonnenter. Standardvisningen er satt til alle brukere. Roller som ikke er i bruk, vises ikke i listen."
#: wp-admin/update-core.php:56
msgid "You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:"
@@ -4952,15 +5181,15 @@ msgstr "Du bruker en utviklingsversjon av WordPress. Du kan oppdatere til den ny
msgid "Post via email settings allow you to send your WordPress install 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."
msgstr "Publiser med e-post-innstillinger lar deg sende en e-post til din WordPress-installasjon med innholdet i ditt innlegg. Du må sette opp en hemmelig e-post konto med POP3-tilgang for å bruke dette. All e-post mottatt på denne adressen vil bli publisert, så det er en god idé å holde adressen strengt hemmelig."
-#: wp-admin/includes/image-edit.php:228
+#: wp-admin/includes/image-edit.php:227
msgid "There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor."
msgstr "Det er ulagrede endringer som vil gå tapt. «OK» for å fortsette, «Avbryt» for å gå tilbake til bilderedigereren."
-#: wp-admin/import.php:23
+#: wp-admin/import.php:24
msgid "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."
msgstr "I tidligere versjoner av WordPress var alle importfunksjoner innebygd. De er nå gjort om til utvidelser, fordi de fleste bruker dem lite eller ikke i det hele tatt."
-#: wp-admin/themes.php:162
+#: wp-admin/themes.php:163
msgid "The active theme is broken. Reverting to the default theme."
msgstr "Det aktiverte temaet er ufullstendig. Standardtemaet vil bli brukt i stedet."
@@ -4970,7 +5199,7 @@ msgid "Image could not be processed. Please go back and try again."
msgstr "Bildet ble ikke behandlet. Vennligst gå tilbake og prøv igjen."
#. translators: 1: table name, 2: error message,
-#: wp-admin/maint/repair.php:101
+#: wp-admin/maint/repair.php:107
msgid "The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…"
msgstr "Tabellen %1$s er ikke i orden. Den rapporterer følgende feil: %2$s. WordPress vil forsøke å rette denne tabellen…"
@@ -4978,19 +5207,19 @@ msgstr "Tabellen %1$s er ikke i orden. Den rapporterer følgende feil: %2$s. Wor
msgid "There is an autosave of this post that is more recent than the version below. View the autosave"
msgstr "Det finnes en autolagret versjon av dette innlegget som er nyere enn versjonen nedenfor. Se den autolagrede versjonen"
-#: wp-admin/maint/repair.php:147
+#: wp-admin/maint/repair.php:153
msgid "Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users."
msgstr "Ferdig med å reparere. Vennligst fjern følgende linje fra wp-config.php for å hindre at denne siden blir brukt av uautoriserte brukere."
-#: wp-admin/maint/repair.php:156
+#: wp-admin/maint/repair.php:162
msgid "WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient."
msgstr "WordPress kan automatisk sjekke databasen for vanlige problemer og rette dem. Rettingen kan ta litt tid, så vennligst vis tålmodighet."
-#: wp-admin/maint/repair.php:159
+#: wp-admin/maint/repair.php:165
msgid "WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing."
msgstr "WordPress kan også forsøke å optimere databasen. Dette kan i gitte situasjoner forbedre ytelsen til WordPress. Reparering og optimering av databasen kan ta lang tid og den forblir låst mens arbeidet pågår."
-#: wp-admin/user-new.php:313
+#: wp-admin/user-new.php:314
msgid "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."
msgstr "Skriv inn e-postadressen eller brukernavnet til en eksisterende bruker på nettverket for å invitere brukeren til dette nettstedet. Den personen vil få en e-post som spør om å bekrefte invitasjonen."
@@ -5002,11 +5231,11 @@ msgstr "En Avatar er et bilde som følger deg fra nettsted til nettsted, og oppt
msgid "Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated."
msgstr "Advarsel: Det er ikke anbefalt å gjøre endringer i aktive utvidelser. Medfører dine endringer en alvorlig feil, så vil utvidelsen automatisk bli deaktivert."
-#: wp-admin/user-new.php:309
+#: wp-admin/user-new.php:310
msgid "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."
msgstr "Skriv inn e-postadressen til en eksisterende bruker på nettverket for å invitere brukeren til dette nettstedet. Den personen vil få en e-post som spør om å bekrefte invitasjonen."
-#: wp-admin/credits.php:117
+#: wp-admin/credits.php:118
msgid "Contributing Developers"
msgstr "Medvirkende utviklere"
@@ -5016,54 +5245,54 @@ msgstr "Vis verktøylinjen når du ser på nettstedet"
#. translators: 1: WordPress version number, 2: plural number of bugs. Singular
#. security issue.
-#: wp-admin/about.php:220
+#: wp-admin/about.php:235
msgid "Version %1$s addressed a security issue and fixed %2$s bug."
msgid_plural "Version %1$s addressed a security issue and fixed %2$s bugs."
msgstr[0] "Versjon %1$s tettet et sikkerhetshull og rettet %2$s programfeil."
msgstr[1] "Versjon %1$s tettet et sikkerhetshull og rettet %2$s programfeil."
#. translators: %s: Codex URL
-#: wp-admin/about.php:44 wp-admin/about.php:48 wp-admin/about.php:228
+#: wp-admin/about.php:243
msgid "For more information, see the release notes."
msgstr "For mer informasjon, se versjonsmerknadene."
#. translators: 1: WordPress version number, 2: plural number of bugs. More
#. than one security issue.
-#: wp-admin/about.php:224
+#: wp-admin/about.php:239
msgid "Version %1$s addressed some security issues and fixed %2$s bug."
msgid_plural "Version %1$s addressed some security issues and fixed %2$s bugs."
msgstr[0] "Versjon %1$s tettet noen sikkerhetshull og rettet %2$s programfeil."
msgstr[1] "Versjon %1$s tettet noen sikkerhetshull og rettet %2$s programfeil."
#. translators: 1: WordPress version number, 2: plural number of bugs.
-#: wp-admin/about.php:46 wp-admin/about.php:216
+#: wp-admin/about.php:231
msgid "Version %1$s addressed %2$s bug."
msgid_plural "Version %1$s addressed %2$s bugs."
msgstr[0] "Versjon %1$s rettet %2$s programfeil."
msgstr[1] "Versjon %1$s rettet %2$s programfeil."
-#: wp-admin/index.php:32
-msgid "Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab in the upper corner."
-msgstr "Velkommen til kontrollpanelet i WordPress. Dette er det skjermbildet vil du se hver gang du logger inn på nettstedet, og gir deg tilgang alle administrative funksjoner i WordPress. Du kan få mer informasjon om hvert enkelt skjermbilde om du klikker Hjelp-fanen i øvre høyre hjørne."
+#: wp-admin/index.php:34
+msgid "Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab above the screen title."
+msgstr "Velkommen til kontrollpanelet i WordPress! Dette er det skjermbildet vil du se hver gang du logger inn på nettstedet, og gir deg tilgang alle administrative funksjoner i WordPress. Du kan få mer informasjon om hvert enkelt skjermbilde om du klikker Hjelp-fanen over skjermtittelen."
-#: wp-admin/about.php:207
+#: wp-admin/about.php:222
msgid "Maintenance and Security Release"
msgstr "Vedlikeholds- og sikkerhetsoppdatering"
-#: wp-admin/about.php:36 wp-admin/credits.php:28 wp-admin/freedoms.php:27
+#: wp-admin/about.php:56 wp-admin/credits.php:28 wp-admin/freedoms.php:27
msgid "What’s New"
msgstr "Hva er nytt"
-#: wp-admin/about.php:204
+#: wp-admin/about.php:219
msgid "Security Release"
msgstr "Sikkerhetsoppdatering"
-#: wp-admin/about.php:201
+#: wp-admin/about.php:216
msgid "Maintenance Release"
msgstr "Vedlikeholdsoppdatering"
#. translators: %s: WordPress version number
-#: wp-admin/about.php:43 wp-admin/about.php:213
+#: wp-admin/about.php:228
msgid "Version %s addressed some security issues."
msgstr "Versjon %s tettet noen sikkerhetshull."
@@ -5071,23 +5300,23 @@ msgstr "Versjon %s tettet noen sikkerhetshull."
msgid "This screen allows you to choose your permalink structure. You can choose from common settings or create custom URL structures."
msgstr "Dette skjermbildet lar deg velge strukturen på permalenkene dine. Du kan velge blant de vanligste eller opprette din egen URL-struktur."
-#: wp-admin/about.php:186
+#: wp-admin/about.php:202
msgid "Return to Updates"
msgstr "Tilbake til oppdateringer"
-#: wp-admin/includes/update-core.php:1223 wp-admin/update-core.php:503
+#: wp-admin/includes/update-core.php:1225 wp-admin/update-core.php:503
msgid "Welcome to WordPress %1$s. Learn more."
msgstr "Velkommen til WordPress %1$s. Lær mer."
-#: wp-admin/edit-tags.php:265
+#: wp-admin/edit-tags.php:274
msgid "Adding Categories"
msgstr "Legge til kategorier"
-#: wp-admin/edit-tags.php:265
+#: wp-admin/edit-tags.php:274
msgid "Adding Tags"
msgstr "Legge til stikkord"
-#: wp-admin/plugins.php:384
+#: wp-admin/plugins.php:383
msgid "Troubleshooting"
msgstr "Problemløsning"
@@ -5095,15 +5324,11 @@ msgstr "Problemløsning"
msgid "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:"
msgstr "Her kan du laste opp mediefiler uten å opprette innlegg først. Dette lar deg laste opp filer du kan bruke i innlegg og på sider senere, og/eller lage en lenke til en bestemt fil du ønsker å dele. Det er tre alternativer for opplasting av filer:"
-#: wp-admin/user-new.php:178
-msgid "You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed."
-msgstr "Du må tilordne passord for nye brukere, som de kan kan skifte etter at de har logget inn. Brukernavnet kan de derimot ikke endre."
-
#: wp-admin/tools.php:104
msgid "If you want to convert your categories to tags (or vice versa), use the Categories and Tags Converter available from the Import screen."
msgstr "Hvis du vil konvertere kategorier til stikkord (og omvendt), bruker du Kategorier og stikkord konverterer, som er tilgjengelig i Import-skjermen."
-#: wp-admin/user-new.php:182
+#: wp-admin/user-new.php:183
msgid "Remember to click the Add New User button at the bottom of this screen when you are finished."
msgstr "Husk å klikke på knappen Legg til ny bruker i bunnen av dette skjermbildet når du er ferdig."
@@ -5119,11 +5344,11 @@ msgstr "Skjermvisning"
msgid "Attaching Files"
msgstr "Legge ved filer"
-#: wp-admin/user-new.php:193
+#: wp-admin/user-new.php:194
msgid "Here is a basic overview of the different user roles and the permissions associated with each one:"
msgstr "Her følger en grunnleggende oversikt over de ulike rollene en bruker kan ha, og tillatelsene knyttet til hver enkelt:"
-#: wp-admin/user-new.php:192
+#: wp-admin/user-new.php:193
msgid "User Roles"
msgstr "Brukerroller"
@@ -5135,11 +5360,11 @@ msgstr "For å legge til en ny bruker på nettstedet ditt fyller du ut dette skj
msgid "Moderating Comments"
msgstr "Moderering av kommentarer"
-#: wp-admin/user-new.php:195
+#: wp-admin/user-new.php:196
msgid "Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content."
msgstr "Abonnenter kan lese kommentarer, kommentere, motta nyhetsbrev osv., men kan ikke skrive ordinært innhold, som innlegg og sider."
-#: wp-admin/import.php:128
+#: wp-admin/import.php:197
msgid "If the importer you need is not listed, search the plugin directory to see if an importer is available."
msgstr "Importøren du trenger er ikke oppført. Søk i utvidelseskatalogen for å se om en importør er tilgjengelig."
@@ -5151,7 +5376,7 @@ msgstr "Når du bruker Massehandlinger, kan du endre metadata (kategorier, forfa
msgid "Available Actions"
msgstr "Tilgjengelige handlinger"
-#: wp-admin/user-new.php:197
+#: wp-admin/user-new.php:198
msgid "Authors can publish and manage their own posts, and are able to upload files."
msgstr "Forfattere kan publisere og endre sine egne innlegg, i tillegg til å laste opp filer."
@@ -5167,7 +5392,7 @@ msgstr "Dette skjermbildet gir deg tilgang til alle dine innlegg. Du kan tilpass
msgid "You can also edit or move multiple posts to the trash at once. Select the posts you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply."
msgstr "Du kan redigere eller slette mange innlegg samtidig. Velg de innleggene du vil endre ved å krysse dem av i boksen til venstre for tittlfeltet. Så velger du hva du vil gjøre i boksen Massehandlinger, før du klikker Bruk."
-#: wp-admin/plugin-install.php:77
+#: wp-admin/plugin-install.php:88
msgid "Adding Plugins"
msgstr "Legge til utvidelser"
@@ -5183,15 +5408,11 @@ msgstr "Du kan endre innstillingene til dette skjermbildet på mange måter:"
msgid "Adding Themes"
msgstr "Legge til temaer"
-#: wp-admin/plugin-install.php:73
-msgid "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.org Plugin Directory are compatible with the license WordPress uses. You can find new plugins to install by searching or browsing the Directory right here in your own Plugins section."
-msgstr "Utvidelser kobler seg på WordPress for å utvide funksjonaliteten. Utvidelser er utviklet uavhengig av WordPress-kjernen av tusenvis av utviklere over hele verden. Alle utvidelser i den offisielle WordPress.org utvidelseskatalogen er kompatible med den brukerlisensen WordPress selv har. Du kan finne nye utvidelser ved å søke etter, eller bla gjennom katalogen direkte her fra administrasjonsområdet."
-
#: wp-admin/options-permalink.php:21
msgid "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."
msgstr "Permalenker er permanente URL-er til dine individuelle sider og innlegg, samt til kategori- og stikkordsarkivene. En permalenke er nettadressen som brukes til å lenke til innholdet ditt. URL-en til hvert innlegg bør være permanent og aldri endre seg, og derav navnet permalenke."
-#: wp-admin/options-permalink.php:187
+#: wp-admin/options-permalink.php:178
msgid "Common Settings"
msgstr "Vanlige innstillinger"
@@ -5247,7 +5468,7 @@ msgstr "Dra og slipp filene dine inn i feltet under. Gjerne fle
msgid "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."
msgstr "Klikker du på Velg Filer åpnes et navigasjonsvindu som viser filene på din datamaskin. Når du klikker på Åpne, etter å ha valgt fil, vil det komme en fremdrifstindikator på opplastingssiden."
-#: wp-admin/edit-tags.php:229
+#: wp-admin/edit-tags.php:238
msgid "You can create groups of links by using Link Categories. Link Category names must be unique and Link Categories are separate from the categories you use for posts."
msgstr "Du kan gruppere lenkene ved å bruke lenkekategorier. Navnet på lenkekategorien må være unikt. Lenkekategorier er uavhengig av de kategoriene du måtte ha for innlegg."
@@ -5255,7 +5476,7 @@ msgstr "Du kan gruppere lenkene ved å bruke lenkekategorier. Navnet på lenkeka
msgid "Removing and Reusing"
msgstr "Fjerning og gjenbruk"
-#: wp-admin/edit-tags.php:231
+#: wp-admin/edit-tags.php:240
msgid "You can assign keywords to your posts using tags. Unlike categories, tags have no hierarchy, meaning there’s no relationship from one tag to another."
msgstr "Du kan knytte nøkkelord til dine innlegg ved å bruke stikkord. Til forskjell fra kategorier har stikkord ikke noe hierarki. Det betyr at det ikke er noen relasjon mellom ulike stikkord."
@@ -5271,7 +5492,7 @@ msgstr "Du kan redigere kommentarer på nettstedet på samme måte som du redige
msgid "In the Author column, in addition to the author’s name, email address, and blog URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address."
msgstr "I forfatter-kolonnen vises - i tillegg til navn, epost-adresse og bloggadresse - IP-addressen til den som kommenterer. Når du klikker på denne lenken vises alle kommentarer som er gjort fra denne IP-adressen."
-#: wp-admin/index.php:46
+#: wp-admin/index.php:48
msgid "Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information."
msgstr "Lenker i verktøylinjen på toppen av siden tar deg til kontrollpanelet og til forsiden av netttedet. De gir deg også tilgang til profilen din og nyttig informasjon om WordPress."
@@ -5355,7 +5576,7 @@ msgstr "Du kan få fram alle innlegg for hver enkelt bruker ved å klikke på an
msgid "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."
msgstr "Fordi dette er en nettverksinstallasjon, kan du legge til brukerkontoer som allerede eksisterer i nettverket ved enten å spesifisere brukernavn eller e-post, og i tillegg definere roller. For flere valg, som å sette passord, må du være nettverksadministrator. Beveg musa over den enkelte brukerens navn for å redigere profilen under Nettverksadministrasjon → Alle brukere."
-#: wp-admin/includes/template.php:1983
+#: wp-admin/includes/template.php:1999
msgid "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead."
msgstr "Sannsynligvis direkte inkludering av wp-admin/includes/template.php for å bruke add_meta_box(). Dette er veldig feil. Knytt oppkallet add_meta_box() til handlingen add_meta_boxes i stedet."
@@ -5363,23 +5584,23 @@ msgstr "Sannsynligvis direkte inkludering av wp-admin/includes/template.php for
msgid "Welcome to WordPress %s"
msgstr "Velkommen til WordPress %s"
-#: wp-admin/about.php:189
+#: wp-admin/about.php:205
msgid "Go to Dashboard → Home"
msgstr "Gå til Kontrollpanel → Hjem"
-#: wp-admin/about.php:186
+#: wp-admin/about.php:202
msgid "Return to Dashboard → Updates"
msgstr "Tilbake til Kontrollpanel → Oppdateringer"
-#: wp-admin/credits.php:49
+#: wp-admin/credits.php:50
msgid "WordPress is created by a worldwide team of passionate individuals."
msgstr "WordPress er blitt til av et nettverk med ihuga entusiaster i hele verden."
-#: wp-admin/about.php:115
+#: wp-admin/about.php:124
msgid "Under the Hood"
msgstr "Under panseret"
-#: wp-admin/includes/dashboard.php:1450 wp-admin/includes/dashboard.php:1452
+#: wp-admin/includes/dashboard.php:1460 wp-admin/includes/dashboard.php:1462
msgid "Customize Your Site"
msgstr "Tilpass nettstedet ditt"
@@ -5406,23 +5627,23 @@ msgstr ""
"Vennligst klikk denne lenken for å bekrefte invitasjonen:\n"
"%4$s"
-#: wp-admin/credits.php:123
+#: wp-admin/credits.php:124
msgid "Core Developer"
msgstr "Kjerneutvikler"
-#: wp-admin/includes/class-wp-upgrader.php:142
+#: wp-admin/includes/class-wp-upgrader.php:171
msgid "The package could not be installed."
msgstr "Pakken kunne ikke installeres."
-#: wp-admin/includes/class-wp-upgrader.php:880
+#: wp-admin/includes/class-plugin-upgrader.php:72
msgid "The plugin contains no files."
msgstr "Utvidelsen inneholder ingen filer."
-#: wp-admin/includes/class-wp-upgrader.php:1176
+#: wp-admin/includes/class-plugin-upgrader.php:358
msgid "No valid plugins were found."
msgstr "Ingen gyldige utvidelser ble funnet."
-#: wp-admin/includes/media.php:1071
+#: wp-admin/includes/media.php:1073
msgid "Attachment Post URL"
msgstr "URL til vedleggsbeskrivelse"
@@ -5431,40 +5652,40 @@ msgctxt "admin menu"
msgid "All Links"
msgstr "Alle lenker"
-#: wp-admin/includes/media.php:1916
+#: wp-admin/includes/media.php:1918
msgid "Drop files here"
msgstr "Slipp filer her"
-#: wp-admin/includes/plugin-install.php:240
+#: wp-admin/includes/plugin-install.php:241
msgid "%s plugins"
msgstr "%s utvidelser"
-#: wp-admin/includes/plugin-install.php:240
+#: wp-admin/includes/plugin-install.php:241
msgid "%s plugin"
msgstr "%s utvidelse"
#. translators: %s: table name
-#: wp-admin/maint/repair.php:130
+#: wp-admin/maint/repair.php:136
msgid "Successfully optimized the %s table."
msgstr "Optimalisering av tabellen %s var vellykket."
#. translators: 1: table name, 2: error message,
-#: wp-admin/maint/repair.php:133
+#: wp-admin/maint/repair.php:139
msgid "Failed to optimize the %1$s table. Error: %2$s"
msgstr "Klarte ikke å optimalisere tabellen %1$s. Feil: %2$s"
#. translators: %s: table name
-#: wp-admin/maint/repair.php:108
+#: wp-admin/maint/repair.php:114
msgid "Successfully repaired the %s table."
msgstr "Reparasjon av tabellen %s var vellykket."
#. translators: %s: table name
-#: wp-admin/maint/repair.php:123
+#: wp-admin/maint/repair.php:129
msgid "The %s table is already optimized."
msgstr "Tabellen %s er allerede optimalisert."
#. translators: %s: table name
-#: wp-admin/maint/repair.php:98
+#: wp-admin/maint/repair.php:104
msgid "The %s table is okay."
msgstr "Tabellen %s er OK."
@@ -5473,82 +5694,78 @@ msgstr "Tabellen %s er OK."
msgid "View version %s details."
msgstr "Se detaljene for versjon %1$s."
-#: wp-admin/includes/import.php:195
+#: wp-admin/includes/import.php:200
msgid "Tumblr"
msgstr "Tumblr mikroblogg"
-#: wp-admin/includes/import.php:196
-msgid "Install the Tumblr importer to import posts & media from Tumblr using their API."
-msgstr "Importer innlegg & media fra Tumblrs mikroblogg ved hjelp av deres API."
-
-#: wp-admin/includes/dashboard.php:1350
+#: wp-admin/includes/dashboard.php:1360
msgid "Update %2$s or learn how to browse happy"
msgstr "Oppdater %2$s eller lær hvordan å glad-surfe"
#. translators: %1$s is link start tag, %2$s is link end tag, %3$d is width,
#. %4$d is height
-#: wp-admin/includes/media.php:2683
+#: wp-admin/includes/media.php:2685
msgid "Scale images to match the large size selected in %1$simage options%2$s (%3$d × %4$d)."
msgstr "Skalere bilder for å matche den store størrelsen som er valgt i %1$sbilde-alternativer%2$s (%3$d × %4$d)."
-#: wp-admin/includes/media.php:2554
+#: wp-admin/includes/media.php:2556
msgid "Audio, Video, or Other File"
msgstr "Lyd, film eller en annen fil"
-#: wp-admin/includes/media.php:2070
+#: wp-admin/includes/media.php:2072
msgid "Insert media from another website"
msgstr "Sett inn media fra en annen nettside"
-#: wp-admin/options.php:159
+#: wp-admin/options.php:160
msgid "ERROR: options page not found."
msgstr "FEIL: Siden for innstillinger ble ikke funnet."
-#: wp-admin/includes/file.php:1131
+#: wp-admin/includes/file.php:1145
msgid "ERROR: There was an error connecting to the server, Please verify the settings are correct."
msgstr "FEIL: Det skjedde en feil i servertilkoblingen, vennligst kontroller innstillingene."
-#: wp-admin/includes/ajax-actions.php:995
+#: wp-admin/includes/ajax-actions.php:1011
msgid "ERROR: you are replying to a comment on a draft post."
msgstr "FEIL: du svarer på en kommentar til et innleggsutkast."
-#: wp-admin/includes/ajax-actions.php:1019
-#: wp-admin/includes/ajax-actions.php:1108
+#: wp-admin/includes/ajax-actions.php:1035
+#: wp-admin/includes/ajax-actions.php:1124
msgid "ERROR: please type a comment."
msgstr "FEIL: vennligst skriv en kommentar."
-#: wp-admin/index.php:45
+#: wp-admin/index.php:47
msgid "The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom."
msgstr "Den venstre navigasjonsmenyen inneholder koblinger til alle administrasjonsskjermene til WordPress, med undermenyelementer som vises når musen holdes over. Du kan trekke sammen denne menyen til en smal ikonstripe ved å klikke på Trekk sammen meny-pilen nederst."
-#: wp-admin/index.php:50
+#: wp-admin/index.php:52
msgid "Navigation"
msgstr "Navigasjon"
-#: wp-admin/index.php:56
+#: wp-admin/index.php:58
msgid "Drag and Drop — To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box."
msgstr "Dra og slipp – For å omorganisere boksene, dra og slipp ved å klikke på tittellinjen for den valgte boksen og slipp når du ser en rektangel med en grå stiplet linje på stedet der du vil plassere boksen."
-#: wp-admin/index.php:54
+#: wp-admin/index.php:56
msgid "You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well."
msgstr "Du kan bruke følgende kontroller til å ordne kontrollpanelet slik at det passer din arbeidsflyt. Dette gjelder på de fleste andre administrasjonsskjermene også."
#: wp-admin/comment.php:43 wp-admin/custom-background.php:90
#: wp-admin/custom-header.php:100 wp-admin/edit-comments.php:147
#: wp-admin/edit-form-advanced.php:403 wp-admin/edit-link-form.php:56
-#: wp-admin/edit-tags.php:240 wp-admin/edit.php:186 wp-admin/edit.php:231
-#: wp-admin/export.php:47 wp-admin/import.php:21
-#: wp-admin/includes/class-wp-screen.php:781 wp-admin/index.php:39
+#: wp-admin/edit-tags.php:249 wp-admin/edit.php:186 wp-admin/edit.php:231
+#: wp-admin/export.php:47 wp-admin/import.php:22
+#: wp-admin/includes/class-wp-screen.php:779 wp-admin/index.php:41
#: wp-admin/link-manager.php:45 wp-admin/media-new.php:45 wp-admin/media.php:73
-#: wp-admin/my-sites.php:40 wp-admin/nav-menus.php:546
-#: wp-admin/nav-menus.php:581 wp-admin/options-discussion.php:21
+#: wp-admin/my-sites.php:40 wp-admin/nav-menus.php:528
+#: wp-admin/nav-menus.php:563 wp-admin/options-discussion.php:21
#: wp-admin/options-general.php:39 wp-admin/options-media.php:28
#: wp-admin/options-permalink.php:20 wp-admin/options-reading.php:22
#: wp-admin/options-writing.php:20 wp-admin/plugin-editor.php:131
-#: wp-admin/plugin-install.php:71 wp-admin/plugins.php:371
+#: wp-admin/plugin-install.php:80 wp-admin/plugins.php:371
#: wp-admin/revision.php:114 wp-admin/theme-editor.php:25
-#: wp-admin/theme-install.php:91 wp-admin/themes.php:82
+#: wp-admin/theme-install.php:92 wp-admin/themes.php:82
#: wp-admin/update-core.php:557 wp-admin/upload.php:48 wp-admin/upload.php:186
-#: wp-admin/user-edit.php:48 wp-admin/user-new.php:186 wp-admin/users.php:31
+#: wp-admin/user-edit.php:48 wp-admin/user-new.php:187 wp-admin/users.php:31
#: wp-admin/widgets.php:51
msgid "Overview"
msgstr "Oversikt"
@@ -5557,18 +5774,11 @@ msgstr "Oversikt"
msgid "Updates %s"
msgstr "Oppdateringer %s"
-#. translators: %s: search keywords
-#: wp-admin/edit-comments.php:197 wp-admin/edit-tags.php:313
-#: wp-admin/edit.php:309 wp-admin/link-manager.php:79 wp-admin/plugins.php:489
-#: wp-admin/upload.php:229 wp-admin/users.php:494
-msgid "Search results for “%s”"
-msgstr "Søkeresultater for «%s»"
-
#: wp-admin/includes/user.php:62 wp-admin/users.php:113
msgid "You can’t give users that role."
msgstr "Du kan ikke gi brukere den rollen."
-#: wp-admin/includes/class-wp-plugins-list-table.php:391
+#: wp-admin/includes/class-wp-plugins-list-table.php:431
msgid "Update Available (%s)"
msgid_plural "Update Available (%s)"
msgstr[0] "Oppdatering tilgjengelig (%s)"
@@ -5580,16 +5790,10 @@ msgid "Caution:"
msgstr "Advarsel:"
#: wp-admin/menu.php:233 wp-admin/menu.php:235 wp-admin/user-new.php:165
-#: wp-admin/user-new.php:369 wp-admin/user-new.php:484
+#: wp-admin/user-new.php:370 wp-admin/user-new.php:485
msgid "Add New User"
msgstr "Legg til ny bruker"
-#: wp-admin/options-discussion.php:12 wp-admin/options-general.php:16
-#: wp-admin/options-media.php:13 wp-admin/options-permalink.php:13
-#: wp-admin/options-reading.php:13 wp-admin/options-writing.php:13
-msgid "You do not have sufficient permissions to manage options for this site."
-msgstr "Du har ikke nok rettigheter til å endre innstillinger på dette nettstedet."
-
#: wp-admin/menu.php:209
msgctxt "plugin editor"
msgid "Editor"
@@ -5599,32 +5803,33 @@ msgstr "Redigering"
msgid "Installed Plugins"
msgstr "Installerte utvidelser"
-#: wp-admin/includes/ms.php:1099 wp-admin/users.php:295
+#: wp-admin/includes/ms.php:1003 wp-admin/users.php:295
msgid "Confirm Deletion"
msgstr "Bekreft slettingen"
-#: wp-admin/includes/class-wp-plugins-list-table.php:421
-#: wp-admin/includes/class-wp-plugins-list-table.php:586
+#: wp-admin/includes/class-wp-plugins-list-table.php:461
+#: wp-admin/includes/class-wp-plugins-list-table.php:626
msgid "Deactivate"
msgstr "Deaktiver"
-#: wp-admin/about.php:33 wp-admin/credits.php:25 wp-admin/freedoms.php:24
-#: wp-admin/includes/ajax-actions.php:3089
-#: wp-admin/includes/ajax-actions.php:3131
-#: wp-admin/includes/class-wp-plugins-list-table.php:735
+#. translators: %s: Plugin version
+#: wp-admin/about.php:53 wp-admin/credits.php:25 wp-admin/freedoms.php:24
+#: wp-admin/includes/ajax-actions.php:3698
+#: wp-admin/includes/ajax-actions.php:3741
+#: wp-admin/includes/class-wp-plugins-list-table.php:775
#: wp-admin/includes/update.php:186 wp-admin/includes/update.php:210
msgid "Version %s"
msgstr "Versjon %s"
-#: wp-admin/user-new.php:265
+#: wp-admin/user-new.php:266
msgid "User added."
msgstr "Bruker lagt til."
-#: wp-admin/includes/class-wp-media-list-table.php:683
-#: wp-admin/includes/class-wp-media-list-table.php:742
-#: wp-admin/includes/class-wp-posts-list-table.php:1243
+#: wp-admin/includes/class-wp-media-list-table.php:685
+#: wp-admin/includes/class-wp-media-list-table.php:744
+#: wp-admin/includes/class-wp-posts-list-table.php:1271
#: wp-admin/includes/class-wp-terms-list-table.php:467
-#: wp-admin/includes/dashboard.php:634
+#: wp-admin/includes/dashboard.php:641
msgid "View"
msgstr "Vis"
@@ -5638,7 +5843,7 @@ msgid "You can’t remove users."
msgstr "Du kan ikke fjerne brukere."
#: wp-admin/my-sites.php:55 wp-admin/options-head.php:15
-#: wp-admin/options.php:232
+#: wp-admin/options.php:233
msgid "Settings saved."
msgstr "Innstillinger lagret."
@@ -5650,18 +5855,18 @@ msgstr "Rollene er byttet."
msgid "User removed from this site."
msgstr "Bruker fjernet fra dette nettstedet."
-#: wp-admin/includes/dashboard.php:420 wp-admin/includes/dashboard.php:422
+#: wp-admin/includes/dashboard.php:428 wp-admin/includes/dashboard.php:430
#: wp-admin/users.php:503
msgid "Search Users"
msgstr "Søk i brukere"
-#: wp-admin/user-new.php:307 wp-admin/user-new.php:362
+#: wp-admin/user-new.php:308 wp-admin/user-new.php:363
msgid "Add Existing User"
msgstr "Legg til eksisterende bruker"
-#: wp-admin/includes/class-wp-users-list-table.php:318
-#: wp-admin/user-edit.php:308 wp-admin/user-new.php:335
-#: wp-admin/user-new.php:461
+#: wp-admin/includes/class-wp-users-list-table.php:321
+#: wp-admin/user-edit.php:308 wp-admin/user-new.php:336
+#: wp-admin/user-new.php:462
msgid "Role"
msgstr "Rolle"
@@ -5669,19 +5874,19 @@ msgstr "Rolle"
#: wp-admin/custom-header.php:126 wp-admin/edit-comments.php:164
#: wp-admin/edit-form-advanced.php:380 wp-admin/edit-form-advanced.php:395
#: wp-admin/edit-form-advanced.php:412 wp-admin/edit-link-form.php:64
-#: wp-admin/edit-tags.php:270 wp-admin/edit.php:223 wp-admin/edit.php:244
-#: wp-admin/export.php:53 wp-admin/import.php:27 wp-admin/index.php:87
+#: wp-admin/edit-tags.php:279 wp-admin/edit.php:223 wp-admin/edit.php:244
+#: wp-admin/export.php:53 wp-admin/import.php:28 wp-admin/index.php:97
#: wp-admin/link-manager.php:59 wp-admin/media-new.php:55 wp-admin/media.php:82
-#: wp-admin/my-sites.php:47 wp-admin/nav-menus.php:587
+#: wp-admin/my-sites.php:47 wp-admin/nav-menus.php:569
#: wp-admin/options-discussion.php:27 wp-admin/options-general.php:44
#: wp-admin/options-media.php:33 wp-admin/options-permalink.php:43
#: wp-admin/options-reading.php:37 wp-admin/options-writing.php:44
-#: wp-admin/plugin-editor.php:142 wp-admin/plugin-install.php:86
-#: wp-admin/plugins.php:395 wp-admin/revision.php:118
-#: wp-admin/theme-editor.php:38 wp-admin/theme-install.php:106
+#: wp-admin/plugin-editor.php:142 wp-admin/plugin-install.php:97
+#: wp-admin/plugins.php:394 wp-admin/revision.php:118
+#: wp-admin/theme-editor.php:38 wp-admin/theme-install.php:107
#: wp-admin/themes.php:117 wp-admin/tools.php:27 wp-admin/update-core.php:575
#: wp-admin/upload.php:65 wp-admin/upload.php:206 wp-admin/user-edit.php:53
-#: wp-admin/user-new.php:204 wp-admin/users.php:66 wp-admin/widgets.php:73
+#: wp-admin/user-new.php:205 wp-admin/users.php:66 wp-admin/widgets.php:73
msgid "For more information:"
msgstr "For mer informasjon:"
@@ -5693,17 +5898,17 @@ msgstr "Legg til ny"
#: wp-admin/includes/class-wp-links-list-table.php:84
#: wp-admin/includes/class-wp-links-list-table.php:330
-#: wp-admin/includes/class-wp-plugins-list-table.php:427
-#: wp-admin/includes/class-wp-plugins-list-table.php:572
-#: wp-admin/includes/class-wp-plugins-list-table.php:593
+#: wp-admin/includes/class-wp-plugins-list-table.php:467
+#: wp-admin/includes/class-wp-plugins-list-table.php:612
+#: wp-admin/includes/class-wp-plugins-list-table.php:633
#: wp-admin/includes/class-wp-terms-list-table.php:154
#: wp-admin/includes/class-wp-terms-list-table.php:458
#: wp-admin/includes/class-wp-themes-list-table.php:197
#: wp-admin/includes/class-wp-users-list-table.php:244
-#: wp-admin/includes/class-wp-users-list-table.php:410
-#: wp-admin/includes/media.php:1491 wp-admin/includes/meta-boxes.php:906
+#: wp-admin/includes/class-wp-users-list-table.php:412
+#: wp-admin/includes/media.php:1493 wp-admin/includes/meta-boxes.php:906
#: wp-admin/includes/template.php:560 wp-admin/includes/widgets.php:253
-#: wp-admin/themes.php:328 wp-admin/themes.php:458 wp-admin/widgets.php:318
+#: wp-admin/themes.php:336 wp-admin/themes.php:478 wp-admin/widgets.php:318
msgid "Delete"
msgstr "Slett"
@@ -5716,8 +5921,8 @@ msgid "Attributes"
msgstr "Attributter"
#: wp-admin/includes/class-wp-theme-install-list-table.php:409
-#: wp-admin/includes/dashboard.php:1250 wp-admin/theme-install.php:243
-#: wp-admin/theme-install.php:261
+#: wp-admin/includes/dashboard.php:1260 wp-admin/theme-install.php:268
+#: wp-admin/theme-install.php:287
msgid "Install"
msgstr "Installer"
@@ -5745,22 +5950,23 @@ msgstr "Tittel- og innleggsredigerer"
msgid "Note: Neither of these options blocks access to your site — it is up to search engines to honor your request."
msgstr "Advarsel: Ingen av disse alternativene blokkerer adgang til nettstedet — det er opp til den enkelte søkemotoren å respektere dette."
-#: wp-admin/options-permalink.php:206
+#: wp-admin/options-permalink.php:197
msgid "Post name"
msgstr "Innleggsnavn"
-#: wp-admin/options-permalink.php:195 wp-admin/options-permalink.php:199
-#: wp-admin/options-permalink.php:207
+#: wp-admin/options-permalink.php:186 wp-admin/options-permalink.php:190
+#: wp-admin/options-permalink.php:198
msgctxt "sample permalink structure"
msgid "sample-post"
msgstr "prove-innlegg"
-#: wp-admin/options-permalink.php:183 wp-admin/options-permalink.php:203
+#: wp-admin/options-permalink.php:174 wp-admin/options-permalink.php:194
msgctxt "sample permalink base"
msgid "archives"
msgstr "arkiv"
-#: wp-admin/import.php:108
+#. translators: URL to wp-admin/import.php
+#: wp-admin/import.php:142
msgid "This importer is not installed. Please install importers from the main site."
msgstr "Denne importøren er ikke installert. Vennligst installer importører fra hovednettstedet."
@@ -5777,7 +5983,7 @@ msgid "Attempt to notify any blogs linked to from the article"
msgstr "Prøv å varsle blogger som er lenket i innlegget"
#. translators: 1: Site name, 2: site URL, 3: role
-#: wp-admin/includes/user.php:515
+#: wp-admin/includes/user.php:517
msgid ""
"Hi,\n"
"You've been invited to join '%1$s' at\n"
@@ -5801,34 +6007,34 @@ msgstr ""
msgid "Full Width Template"
msgstr "Fullbreddemal"
-#: wp-admin/includes/class-wp-press-this.php:854
+#: wp-admin/includes/class-wp-press-this.php:826
#: wp-admin/includes/meta-boxes.php:376 wp-admin/includes/theme.php:261
msgid "Post Formats"
msgstr "Innleggsformater"
-#: wp-admin/includes/theme.php:256
+#: wp-admin/includes/theme.php:255
msgid "Featured Images"
msgstr "Fremhevede bilder"
-#: wp-admin/includes/theme.php:255
+#: wp-admin/includes/theme.php:254
msgid "Featured Image Header"
msgstr "Fremhevet bilde som toppbilde"
#. translators: %s: browser name and link
-#: wp-admin/includes/dashboard.php:1331
+#: wp-admin/includes/dashboard.php:1341
msgid "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser."
msgstr "Det ser ut til at du bruker en gammel versjon av %s. For best mulig opplevelse av WordPress bør du oppdatere nettleseren din."
#. translators: %s: browser name and link
-#: wp-admin/includes/dashboard.php:1326
+#: wp-admin/includes/dashboard.php:1336
msgid "It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser."
msgstr "Det ser ut til at du bruker en usikker versjon av %s. Bruk av en utdatert nettleser gjør datamaskinen din utrygg. For best mulig opplevelse av WordPress bør du oppdatere nettleseren din."
-#: wp-admin/includes/nav-menu.php:923
+#: wp-admin/includes/nav-menu.php:944
msgid "There are some invalid menu items. Please check or delete them."
msgstr "Det er noen ugyldige menyelementer. Vennligst rett opp eller slett dem."
-#: wp-admin/edit-tag-form.php:121 wp-admin/edit-tags.php:470
+#: wp-admin/edit-tag-form.php:127 wp-admin/edit-tags.php:413
#: wp-admin/includes/class-wp-terms-list-table.php:177
#: wp-admin/includes/class-wp-terms-list-table.php:595
msgctxt "term name"
@@ -5841,29 +6047,34 @@ msgctxt "meta name"
msgid "Name"
msgstr "Navn"
-#: wp-admin/themes.php:306
+#: wp-admin/themes.php:314
msgctxt "theme name"
msgid "Name"
msgstr "Navn"
#. translators: %s: Theme Directory URL
-#: wp-admin/theme-install.php:78
-msgid "You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress.org Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses."
+#: wp-admin/theme-install.php:79
+msgid "You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses."
msgstr "Du kan finne flere temaer for nettstedet ditt ved hjelp av Tema-installereren på denne skjermen, som vil vise temaer fra WordPress.org Theme Directory. Disse temaene er designet og utviklet av tredjeparter, er gratis tilgjengelig, og er kompatible med lisensen som WordPress bruker."
+#. translators: %s: WordPress Plugin Directory URL
+#: wp-admin/plugins.php:377
+msgid "If you would like to see more plugins to choose from, click on the “Add New” button and you will be able to browse or search for additional plugins from the WordPress Plugin Directory. Plugins in the WordPress Plugin Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!"
+msgstr "Hvis du ønsker å få flere utvidelser å velge mellom, klikk på «Installer ny»-knappen, og du kan bla gjennom eller søke etter flere utvidelser fra WordPress.org Plugin Directory. Disse utvidelsene er designet og utviklet av tredjeparter og er kompatible med lisensen som WordPress bruker. Og forresten, de er gratis!"
+
#: wp-admin/update-core.php:61
msgid "Re-install Now"
msgstr "Re-installer nå"
-#: wp-admin/includes/file.php:288
+#: wp-admin/includes/file.php:294
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
msgstr "Den opplastede filen er større enn upload_max_filesize-regelen i php.ini."
-#: wp-admin/includes/file.php:289
+#: wp-admin/includes/file.php:295
msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form."
msgstr "Den opplastede filen er større enn MAX_FILE_SIZE-regelen som ble spesifisert i HTML-skjemaet."
-#: wp-admin/credits.php:124
+#: wp-admin/credits.php:125
msgid "External Libraries"
msgstr "Eksterne programbibliotek"
@@ -5875,7 +6086,7 @@ msgstr "Tilgjengelige verktøy"
msgid "Network Setup"
msgstr "Nettverksoppsett"
-#: wp-admin/credits.php:55
+#: wp-admin/credits.php:56
msgctxt "Translate this to be the equivalent of English Translators in your language for the credits page Translators section"
msgid "Translators"
msgstr "Oversettere til norsk (bokmål)"
@@ -5892,16 +6103,16 @@ msgstr "Hver utvidelse og hvert tema i WordPress.org-katalogen er 100%% GPL elle
msgid "WordPress is Free and open source software, built by a distributed community of mostly volunteer developers from around the world. WordPress comes with some awesome, worldview-changing rights courtesy of its license, the GPL."
msgstr "WordPress er gratis og bruker åpen kildekode, som er bygget av et distribuert fellesskap av hovedsakelig frivillige utviklere fra hele verden. WordPress kommer med noen kule rettigheter, som følge av sin lisens, GPL."
-#: wp-admin/credits.php:119
+#: wp-admin/credits.php:120
msgid "Lead Developer"
msgstr "Ledende utvikler"
#. translators: %s: https://make.wordpress.org/
-#: wp-admin/credits.php:102
+#: wp-admin/credits.php:103
msgid "Want to see your name in lights on this page? Get involved in WordPress."
msgstr "Ønsker du å se navnet ditt her? Delta i utviklingen av WordPress."
-#: wp-admin/about.php:37 wp-admin/credits.php:13 wp-admin/credits.php:29
+#: wp-admin/about.php:57 wp-admin/credits.php:13 wp-admin/credits.php:29
#: wp-admin/freedoms.php:28
msgid "Credits"
msgstr "Takk til"
@@ -5911,11 +6122,11 @@ msgctxt "removing-widget"
msgid "Deactivate"
msgstr "Deaktiver"
-#: wp-admin/credits.php:118
+#: wp-admin/credits.php:119
msgid "Cofounder, Project Lead"
msgstr "Grunnlegger, prosjektleder"
-#: wp-admin/credits.php:116
+#: wp-admin/credits.php:117
msgid "Core Contributors to WordPress %s"
msgstr "Bidragsytere til WordPress-kjernen i %s"
@@ -5928,7 +6139,7 @@ msgstr "Alle kommentarer"
msgid "WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress."
msgstr "WordPress er laget av et verdensomspennede nett av dedikerte personer. Bli med og gi ditt bidrag til WordPress."
-#: wp-admin/credits.php:115
+#: wp-admin/credits.php:116
msgid "Project Leaders"
msgstr "Prosjektledere"
@@ -5957,10 +6168,10 @@ msgid "Your browser is out of date!"
msgstr "Nettleseren din er ikke oppdatert!"
#: wp-admin/freedoms.php:50
-msgid "Don’t you wish all software came with these freedoms? So do we! For more information, check out the Free Software Foundation."
-msgstr "Skulle ikke du ønske at all programvare kom med samme frihet? Det mener vi! For nærmere opplysninger, sjekk Stiftelsen for fri programvare."
+msgid "Don’t you wish all software came with these freedoms? So do we! For more information, check out the Free Software Foundation."
+msgstr "Skulle ikke du ønske at all programvare kom med samme frihet? Det mener vi! For nærmere opplysninger, sjekk Stiftelsen for fri programvare."
-#: wp-admin/about.php:38 wp-admin/credits.php:30 wp-admin/freedoms.php:12
+#: wp-admin/about.php:58 wp-admin/credits.php:30 wp-admin/freedoms.php:12
#: wp-admin/freedoms.php:29
msgid "Freedoms"
msgstr "Friheter"
@@ -5979,10 +6190,10 @@ msgstr "Du kan velge en av toppbildene du lastet opp tidligere, eller å vise et
#: wp-admin/menu-header.php:238
msgid "Collapse menu"
-msgstr "Trekk sammen meny"
+msgstr "Trekk sammen"
#. translators: %s: wp-content directory name
-#: wp-admin/includes/class-wp-plugins-list-table.php:467
+#: wp-admin/includes/class-wp-plugins-list-table.php:507
msgid "Drop-ins are advanced plugins in the %s directory that replace WordPress functionality when present."
msgstr "Innslipp er avanserte utvidelser i %s-mappen som erstatter WordPress-funksjonalitet når de er tilstede."
@@ -5994,8 +6205,8 @@ msgstr "Tilfeldige: Vis forskjellige bilder på hver side."
msgid "Uploaded Images"
msgstr "Opplastede bilder"
-#: wp-admin/includes/class-wp-screen.php:1115 wp-admin/includes/theme.php:234
-#: wp-admin/includes/theme.php:295 wp-admin/index.php:61
+#: wp-admin/includes/class-wp-screen.php:1113 wp-admin/includes/theme.php:235
+#: wp-admin/includes/theme.php:300 wp-admin/index.php:63
msgid "Layout"
msgstr "Layout"
@@ -6007,12 +6218,12 @@ msgstr "Du har angitt denne brukeren for sletting:"
msgid "← Back to Users"
msgstr "← Tilbake til brukere"
-#: wp-admin/includes/class-wp-list-table.php:824
+#: wp-admin/includes/class-wp-list-table.php:825
msgctxt "paging"
msgid "%1$s of %2$s"
msgstr "%1$s av %2$s"
-#: wp-admin/includes/file.php:81
+#: wp-admin/includes/file.php:87
msgid "%s Page Template"
msgstr "%s Sidemal"
@@ -6020,7 +6231,7 @@ msgstr "%s Sidemal"
msgid "This plugin may be active on other sites in the network."
msgstr "Denne utvidelsen kan være aktivt på andre nettsteder i ditt nettverk."
-#: wp-admin/plugins.php:428
+#: wp-admin/includes/ajax-actions.php:3798 wp-admin/plugins.php:427
msgid "You cannot delete a plugin while it is active on the main site."
msgstr "Du kan ikke slette en utvidelse som er aktivt på hovednettstedet."
@@ -6028,18 +6239,12 @@ msgstr "Du kan ikke slette en utvidelse som er aktivt på hovednettstedet."
msgid "Default Post Format"
msgstr "Standardformat for innlegg"
-#: wp-admin/update-core.php:23 wp-admin/update-core.php:626
-#: wp-admin/update-core.php:650 wp-admin/update-core.php:678
-#: wp-admin/update-core.php:708
-msgid "You do not have sufficient permissions to update this site."
-msgstr "Du har ikke tilstrekkelige rettigheter til å oppdatere dette nettstedet."
-
#: wp-admin/user-edit.php:207 wp-admin/users.php:489
msgctxt "user"
msgid "Add Existing"
msgstr "Legg til eksisterende"
-#: wp-admin/user-new.php:272
+#: wp-admin/user-new.php:273
msgctxt "user"
msgid "Add New User"
msgstr "Legg til ny bruker"
@@ -6048,7 +6253,7 @@ msgstr "Legg til ny bruker"
msgid "Any edits to files from this screen will be reflected on all sites in the network."
msgstr "All redigering i filene i dette skjermbildet vil påvirke alle nettstedene i nettverket."
-#: wp-admin/user-new.php:274
+#: wp-admin/user-new.php:275
msgctxt "user"
msgid "Add Existing User"
msgstr "Legg til eksisterende bruker"
@@ -6057,7 +6262,7 @@ msgstr "Legg til eksisterende bruker"
msgid "Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options."
msgstr "«Skriv om dette» er et bokmerkeskript som gjør det enkelt å blogge om noe du kommer over på nettet. Du kan bruke den til å bare ta en lenke, eller å legge inn et utdrag. «Skriv om dette» vil også la deg velge fra bilder som er inkludert på siden og bruke dem i ditt innlegg. Bare dra «Skriv om dette»-lenken på denne skjermen til bokmerkelinjen i nettleseren din, og du vil være på vei til enklere innhold. Ved å klikke på den mens du er på et annet nettsted, åpner du et vindu med alle disse alternativene."
-#: wp-admin/index.php:65
+#: wp-admin/index.php:67
msgid "The boxes on your Dashboard screen are:"
msgstr "Boksene på Kontrollpanel-skjermen er:"
@@ -6070,11 +6275,11 @@ msgid "If you want to make changes but don’t want them to be overwritten w
msgstr "Hvis du ønsker å gjøre endringer, men ikke vil at de skal bli overskrevet når utvidelsen blir oppdatert, kanskje du er klar til å tenke på å skrive din egen utvidelse. For informasjon om hvordan du redigerer utvidelser, skriver dine egne fra bunnen av, eller bare bedre forstå deres anatomi, sjekk ut lenkene nedenfor."
#. translators: Default page slug
-#: wp-admin/includes/upgrade.php:235
+#: wp-admin/includes/upgrade.php:238
msgid "sample-page"
msgstr "testside"
-#: wp-admin/includes/upgrade.php:233
+#: wp-admin/includes/upgrade.php:236
msgid "Sample Page"
msgstr "Testside"
@@ -6095,14 +6300,14 @@ msgid "Super admin privileges cannot be removed because this user has the networ
msgstr "Rettighetene som superadmin kan ikke fjernes fordi denne brukeren har nettverkets admin-e-post."
#: wp-admin/includes/class-wp-themes-list-table.php:107
-msgid "You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above."
+msgid "You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress Theme Directory at any time: just click on the Install Themes tab above."
msgstr "Du har bare ett tema installert akkurat nå. Lev litt! Du kan velge blant over 1000 gratis temaer i WordPress.org Theme Directory når som helst: klikk på Installer temaer-fanen ovenfor."
-#: wp-admin/maint/repair.php:154
+#: wp-admin/maint/repair.php:160
msgid "One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient."
msgstr "En eller flere databasetabeller er utilgjengelige. For å la WordPress forsøke å reparere disse tabellene, trykker du på «Reparer database»-knappen. Reparasjonen kan ta en stund, så vær tålmodig."
-#: wp-admin/includes/file.php:48
+#: wp-admin/includes/file.php:54
msgid "Visual Editor RTL Stylesheet"
msgstr "Stilsett for visuell redigering for RTL"
@@ -6114,10 +6319,6 @@ msgstr "Dette dattertemaet arver maler fra et foreldretema, %s."
msgid "This is a file in your current parent theme."
msgstr "Dette er en fil i ditt gjeldende foreldretema."
-#: wp-admin/includes/class-wp-upgrader-skins.php:673
-msgid "Network Enable"
-msgstr "Gjør tilgjengelig i nettverk"
-
#: wp-admin/upgrade.php:110
msgid "Your WordPress database has been successfully updated!"
msgstr "Din WordPress-database har blitt oppdatert!"
@@ -6154,42 +6355,42 @@ msgstr "WordPress er oppdatert! Før vi sender deg videre, må vi oppdatere data
msgid "No Update Required"
msgstr "Ingen oppdatering påkrevd"
-#: wp-admin/includes/class-wp-upgrader.php:865
+#: wp-admin/includes/class-plugin-upgrader.php:57
msgid "Plugin updated successfully."
msgstr "Utvidelse oppdatert."
-#: wp-admin/includes/class-wp-upgrader-skins.php:714 wp-admin/update.php:179
+#: wp-admin/includes/class-theme-upgrader-skin.php:26 wp-admin/update.php:179
msgid "Update Theme"
msgstr "Oppdater tema"
-#: wp-admin/includes/ajax-actions.php:3123
-#: wp-admin/includes/ajax-actions.php:3152
-#: wp-admin/includes/class-wp-upgrader.php:864
+#. translators: 1: plugin name, 2: details URL, 3: additional link attributes,
+#. 4: version number
+#: wp-admin/includes/update.php:383
+msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin."
+msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s. Automatisk oppdatering er ikke tilgjengelig for denne utvidelsen."
+
+#: wp-admin/includes/ajax-actions.php:3732
+#: wp-admin/includes/ajax-actions.php:3759
+#: wp-admin/includes/class-plugin-upgrader.php:56
msgid "Plugin update failed."
msgstr "Utvidelsesoppdateringen mislyktes."
-#: wp-admin/includes/class-wp-upgrader.php:1330
+#: wp-admin/includes/class-theme-upgrader.php:55
msgid "Theme update failed."
msgstr "Temaoppdateringen mislyktes."
-#: wp-admin/includes/class-wp-upgrader.php:1331
+#: wp-admin/includes/class-theme-upgrader.php:56
msgid "Theme updated successfully."
msgstr "Tema oppdatert."
-#: wp-admin/includes/class-wp-upgrader-skins.php:210 wp-admin/update.php:54
+#: wp-admin/includes/class-plugin-upgrader-skin.php:28 wp-admin/update.php:54
msgid "Update Plugin"
msgstr "Oppdater utvidelse"
-#. translators: 1: theme name, 2: details URL, 3: accessibility text, 4:
-#. version number
-#: wp-admin/includes/update.php:481
-msgid "There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s. Automatisk oppdatering er ikke tilgjengelig for dette temaet."
-
-#: wp-admin/includes/class-wp-upgrader.php:859
-#: wp-admin/includes/class-wp-upgrader.php:1325
-#: wp-admin/includes/class-wp-upgrader.php:1981
-#: wp-admin/includes/class-wp-upgrader.php:2235
+#: wp-admin/includes/class-core-upgrader.php:32
+#: wp-admin/includes/class-language-pack-upgrader.php:118
+#: wp-admin/includes/class-plugin-upgrader.php:51
+#: wp-admin/includes/class-theme-upgrader.php:50
msgid "Update package not available."
msgstr "Oppdateringspakken ikke tilgjengelig."
@@ -6213,7 +6414,7 @@ msgstr "Forfattere:"
msgid "All content"
msgstr "Alt innhold"
-#: wp-admin/includes/file.php:345
+#: wp-admin/includes/file.php:351
msgid "Sorry, this file type is not permitted for security reasons."
msgstr "Beklager, denne filtypen er ikke tillatt av sikkerhetsgrunner."
@@ -6241,7 +6442,7 @@ msgstr "For bilder kan du klikke på Rediger bilde under bildene for å utvide e
msgid "This screen allows you to edit five fields for metadata in a file within the media library."
msgstr "Dette skjermbildet lar deg redigere fem felt for metadata i en fil i mediebiblioteket."
-#: wp-admin/user-new.php:314
+#: wp-admin/user-new.php:315
msgid "Email or Username"
msgstr "E-post eller brukernavn"
@@ -6281,11 +6482,11 @@ msgstr "Sist sjekket %1$s kl. %2$s."
msgid "Check Again"
msgstr "Sjekk igjen"
-#: wp-admin/includes/class-wp-upgrader-skins.php:284
+#: wp-admin/includes/class-bulk-upgrader-skin.php:40
msgid "The update process is starting. This process may take a while on some hosts, so please be patient."
msgstr "Oppdateringen starter. Denne prosessen kan ta en stund på noen verter, så vær tålmodig."
-#: wp-admin/theme-install.php:179
+#: wp-admin/theme-install.php:181
msgid "Apply Filters"
msgstr "Bruk filtre"
@@ -6293,11 +6494,11 @@ msgstr "Bruk filtre"
msgid "RTL Language Support"
msgstr "RTL-språkstøtte"
-#: wp-admin/includes/theme.php:249
+#: wp-admin/includes/theme.php:247
msgid "BuddyPress"
msgstr "BuddyPress"
-#: wp-admin/includes/theme.php:254
+#: wp-admin/includes/theme.php:253
msgid "Editor Style"
msgstr "Visuell redigering"
@@ -6310,15 +6511,15 @@ msgid "Translation Ready"
msgstr "Klar for oversettelse"
#: wp-admin/comment.php:64
-msgid "You are not allowed to edit this comment."
-msgstr "Du har ikke tillatelse til å redigere denne kommentaren."
+msgid "Sorry, you are not allowed to edit this comment."
+msgstr "Beklager, du har ikke lov til å redigere denne kommentaren."
-#: wp-admin/includes/file.php:1186
+#: wp-admin/includes/file.php:1188
msgid "To perform the requested action, WordPress needs to access your web server."
msgstr "For å utføre denne handlingen trenger WordPress å lese filer på din server."
-#: wp-admin/includes/class-wp-list-table.php:815
-#: wp-admin/includes/class-wp-list-table.php:818
+#: wp-admin/includes/class-wp-list-table.php:816
+#: wp-admin/includes/class-wp-list-table.php:819
msgid "Current Page"
msgstr "Gjeldende side"
@@ -6326,35 +6527,35 @@ msgstr "Gjeldende side"
msgid "No themes match your request."
msgstr "Ingen temaer passer til ditt søk."
-#: wp-admin/includes/dashboard.php:428 wp-admin/includes/dashboard.php:430
+#: wp-admin/includes/dashboard.php:436 wp-admin/includes/dashboard.php:438
msgid "Search Sites"
msgstr "Søk i nettsteder"
-#: wp-admin/includes/dashboard.php:382
+#: wp-admin/includes/dashboard.php:390
msgid "Create a New User"
msgstr "Opprett ny bruker"
-#: wp-admin/includes/dashboard.php:390
+#: wp-admin/includes/dashboard.php:398
msgid "You have %1$s and %2$s."
msgstr "Du har %1$s og %2$s."
-#: wp-admin/includes/dashboard.php:388
+#: wp-admin/includes/dashboard.php:396
msgid "%s site"
msgid_plural "%s sites"
msgstr[0] "%s nettsted"
msgstr[1] "%s nettsteder"
-#: wp-admin/includes/dashboard.php:387
+#: wp-admin/includes/dashboard.php:395
msgid "%s user"
msgid_plural "%s users"
msgstr[0] "%s bruker"
msgstr[1] "%s brukere"
-#: wp-admin/includes/dashboard.php:1075
+#: wp-admin/includes/dashboard.php:1085
msgid "https://wordpress.org/news/"
msgstr "https://wordpress.org/news/"
-#: wp-admin/includes/dashboard.php:1084
+#: wp-admin/includes/dashboard.php:1094
msgid "http://wordpress.org/news/feed/"
msgstr "http://wordpress.org/news/feed/"
@@ -6362,25 +6563,26 @@ msgstr "http://wordpress.org/news/feed/"
msgid "(Signup has been disabled. Only members of this site can comment.)"
msgstr "(Brukerregistrering er deaktivert. Kun medlemmer på nettstedet kan kommentere.)"
-#: wp-admin/user-new.php:179
-msgid "New users will receive an email letting them know they’ve been added as a user for your site. By default, this email will also contain their password. Uncheck the box if you don’t want the password to be included in the welcome email."
-msgstr "Nye brukere vil motta en e-post som lar dem vite at de har blitt lagt til som brukere for nettstedet. Som standard vil denne e-posten også inneholde passordet deres. Fjern merkingen i boksen hvis du ikke vil at passordet skal være inkludert i velkomstmeldingen."
+#. translators: 1: theme name, 2: theme details URL, 3: additional link
+#. attributes, 4: version number
+#. translators: 1: plugin name, 2: details URL, 3: additional link attributes,
+#. 4: version number
+#. translators: 1: theme name, 2: details URL, 3: additional link attributes,
+#. 4: version number
+#: wp-admin/includes/theme.php:179 wp-admin/includes/update.php:372
+#: wp-admin/includes/update.php:517
+msgid "There is a new version of %1$s available. View version %4$s details."
+msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s."
-#. translators: 1: theme name, 2: theme details URL, 3: accessibility text, 4:
-#. version number
-#: wp-admin/includes/theme.php:170
-msgid "There is a new version of %1$s available. View version %4$s details."
-msgstr "Det er en ny versjon av %1$s tilgjengelig. Vis detaljene for versjon %4$s."
-
-#: wp-admin/includes/nav-menu.php:920
+#: wp-admin/includes/nav-menu.php:940
msgid "Click Save Menu to make pending menu items public."
msgstr "Trykk \"Lagre meny\" for å gjøre ventende menyelementer tilgjengelige."
-#: wp-admin/includes/dashboard.php:1284
+#: wp-admin/includes/dashboard.php:1294
msgid "Storage Space"
msgstr "Lagringsplass"
-#: wp-admin/includes/dashboard.php:380
+#: wp-admin/includes/dashboard.php:388
msgid "Create a New Site"
msgstr "Lag et nytt nettsted"
@@ -6392,29 +6594,23 @@ msgstr "Bilder med nøyaktig %1$d × %2$d piksler brukes s
msgid "Crop and Publish"
msgstr "Beskjær og publiser"
-#. translators: 1: Plugin Browser/Installer URL, 2: WordPress Plugin Directory
-#. URL 3: local plugin directory
-#: wp-admin/plugins.php:376
-msgid "You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your %3$s directory. Once a plugin has been installed, you can activate it here."
-msgstr "Du kan finne flere utvidelser til nettstedet ditt ved å bruke Utvidelsessøk/-installering, eller ved å søke i WordPress-utvidelseskatalogen direkte og så installere manuelt. For å installere utvidelser manuelt må du laste opp filen med utvidelsen til din %3$s-mappe. Når en utvidelse er installert, kan du aktivere den her."
-
#: wp-admin/edit-link-form.php:60
msgid "XFN stands for XHTML Friends Network, which is optional. WordPress allows the generation of XFN attributes to show how you are related to the authors/owners of the site to which you are linking."
msgstr "XFN står for XHTML Friends Network, som er valgfritt. WordPress tillater generering av XFN-attributter som viser hvordan du er relatert til forfattere/eiere av nettstedet som du lenker til."
-#: wp-admin/includes/file.php:1196
+#: wp-admin/includes/file.php:1198
msgid "FTP Password"
msgstr "FTP passord"
-#: wp-admin/includes/file.php:1195
+#: wp-admin/includes/file.php:1197
msgid "FTP Username"
msgstr "FTP brukernavn"
-#: wp-admin/includes/file.php:1192
+#: wp-admin/includes/file.php:1194
msgid "FTP/SSH Password"
msgstr "FTP/SSH passord"
-#: wp-admin/includes/file.php:1191
+#: wp-admin/includes/file.php:1193
msgid "FTP/SSH Username"
msgstr "FTP/SSH brukernavn"
@@ -6458,20 +6654,20 @@ msgstr "De fleste temaer viser sidetittelen på toppen av alle sider, i tittelen
msgid "Order — Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field."
msgstr "Rekkefølge – Sider sorteres vanligvis alfabetisk, men du kan angi et tall i dette feltet for å endre rekkefølgen de sorteres i (1 for første, etc.)."
-#: wp-admin/includes/file.php:1190
+#: wp-admin/includes/file.php:1192
msgid "Please enter your FTP or SSH credentials to proceed."
msgstr "Vennligst skriv inn dine FTP- eller SSH-detaljer for å fortsette."
-#: wp-admin/includes/file.php:1194
+#: wp-admin/includes/file.php:1196
msgid "Please enter your FTP credentials to proceed."
msgstr "Vennligst skriv inn innloggingsdetaljene for FTP-tilgang for å fortsette."
-#: wp-admin/includes/file.php:1200
+#: wp-admin/includes/file.php:1202
msgid "If you do not remember your credentials, you should contact your web host."
msgstr "Hvis du ikke husker brukernavn og passord, bør du kontakte din nettjener."
#. translators: %s: /wp-content/themes
-#: wp-admin/theme-install.php:85
+#: wp-admin/theme-install.php:86
msgid "You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your %s directory."
msgstr "Du kan laste opp et tema manuelt hvis du allerede har lastet ned ZIP-arkivet til din datamaskin (forsikre deg om at du stoler på originalkilden). Du kan også gjøre det på gamle-måten og kopiere en nedlastet temamappe via FTP til din %s-mappe."
@@ -6483,11 +6679,11 @@ msgstr "Din profil inneholder informasjon om deg (din «konto»), i ti
msgid "Send Trackbacks — Trackbacks are a way to notify legacy blog systems that you’ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they’ll be notified automatically using pingbacks, and this field is unnecessary."
msgstr "Send tilbakesporinger – Tilbakesporinger er en måte å si ifra til eldre bloggsystemer at du har lenket til dem. Skriv inn URL(-ene) som du vil sende tilbakesporinger til. Hvis du lenker til andre WordPress-nettsteder vil de bli fortalt dette automatisk med tilbakeping, og dette feltet er unødvendig."
-#: wp-admin/user-new.php:196
+#: wp-admin/user-new.php:197
msgid "Contributors can write and manage their posts but not publish posts or upload media files."
msgstr "Bidragsytere kan skrive og håndtere sine innlegg, men ikke publisere innlegg eller laste opp mediefiler."
-#: wp-admin/user-new.php:199
+#: wp-admin/user-new.php:200
msgid "Administrators have access to all the administration features."
msgstr "Administratorer har tilgang til alle administrative funksjoner."
@@ -6511,7 +6707,7 @@ msgstr "Ikke velg å trykke på \"Lagre endringer\"-knappen når du er ferdig."
msgid "You can customize the look of your site without touching any of your theme’s code by using a custom background. Your background can be an image or a color."
msgstr "Du kan endre utseendet til nettstedet ditt uten å røre noe av temakoden ved å bruke en egendefinert bakgrunn. Din bakgrunn kan være et bilde eller en farge."
-#: wp-admin/edit-tags.php:254
+#: wp-admin/edit-tags.php:263
msgid "Slug — The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens."
msgstr "Permalenke – Den URL-vennlige versjonen av navnet. Den er vanligvis i små bokstaver og inneholder bare bokstaver, tall og bindestreker."
@@ -6531,7 +6727,7 @@ msgstr "Obligatoriske felt er merket; resten er valgfrie. Profilinformasjon vil
msgid "Remember to click the Update Profile button when you are finished."
msgstr "Husk å klikke på Oppdater profil-knappen når du er ferdig."
-#: wp-admin/user-new.php:198
+#: wp-admin/user-new.php:199
msgid "Editors can publish posts, manage posts as well as manage other people’s posts, etc."
msgstr "Redaktører kan publisere innlegg og håndtere innlegg i tillegg til å håndtere andre brukeres innlegg, etc."
@@ -6594,23 +6790,19 @@ msgstr "Det finnes en oppdatert versjon av WordPress tilgjengelig."
msgid "Function Name…"
msgstr "Funksjonsnavn…"
-#: wp-admin/import.php:98
-msgid "Activate importer"
-msgstr "Aktiver importverktøy"
-
#: wp-admin/edit-link-form.php:58
msgid "You can add or edit links on this screen by entering information in each of the boxes. Only the link’s web address and name (the text you want to display on your site as the link) are required fields."
msgstr "Du kan legge til eller redigere lenker på denne skjermen ved å skrive inn informasjon i disse boksene. Kun lenkens nettadresse og navn (teksten du vil vise på ditt nettsted som lenken) er obligatoriske felt."
-#: wp-admin/includes/class-wp-upgrader-skins.php:579
+#: wp-admin/includes/class-plugin-installer-skin.php:65
msgid "Return to Importers"
msgstr "Gå tilbake til importererne"
-#: wp-admin/includes/class-wp-upgrader-skins.php:569
+#: wp-admin/includes/class-plugin-installer-skin.php:55
msgid "Activate Plugin & Run Importer"
msgstr "Aktiver utvidelse & kjør import"
-#: wp-admin/edit-tags.php:360
+#: wp-admin/edit-tags.php:591
msgid "Categories can be selectively converted to tags using the category to tag converter."
msgstr "Kategorier kan selektivt konverteres til stikkord ved hjelp av kategori til stikkord-omformer."
@@ -6619,7 +6811,7 @@ msgctxt "nav menu front page title"
msgid "Home: %s"
msgstr "Hjem: %s"
-#: wp-admin/import.php:58 wp-admin/users.php:235
+#: wp-admin/import.php:62 wp-admin/users.php:235
msgid "ERROR:"
msgstr "FEIL:"
@@ -6627,11 +6819,7 @@ msgstr "FEIL:"
msgid "Page Attributes"
msgstr "Sideattributter"
-#: wp-admin/includes/meta-boxes.php:856
-msgid "Need help? Use the Help tab in the upper right of your screen."
-msgstr "Trenger du hjelp? Bruk hjelpefanen øverst til høyre på skjermen."
-
-#: wp-admin/import.php:22
+#: wp-admin/import.php:23
msgid "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."
msgstr "Dette skjermbildet lister lenker til utvidleser for å importere data fra blogge- og publiseringsplattformer. Velg plattformen du vil importere fra, og klikk Installer nå når du blir bedt i popup-vinduet. Hvis plattformen ikke er oppført, klikker du på lenken for å søke i utvidelseskatalogen etter andre importutvidelser for å se om det er noen for din plattform."
@@ -6644,10 +6832,10 @@ msgid "You can customize the display of this screen using the Screen Options tab
msgstr "Du kan tilpasse visningen av denne skjermen ved å bruke fanen for Visningsinnstillinger og/eller nedtrekksmenyene over lenketabellen."
#: wp-admin/plugin-editor.php:134
-msgid "Choose a plugin to edit from the menu in the upper right and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished."
+msgid "Choose a plugin to edit from the dropdown menu and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished."
msgstr "Velg en utvidelse som du vil redigere oppe til høyre og klikk Velg-knappen. Klikk én gang på et filnavn for å laste den inn i redigereren, og gjør dine endringer. Husk å lagre dine endringer (Oppdater fil) når du er ferdig."
-#: wp-admin/plugins.php:386
+#: wp-admin/plugins.php:385
msgid "Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue."
msgstr "For det meste fungerer utvidelser fint med WordPress-kjernen og andre utvidelser. Men, noen ganger vil koden til en utvidelse komme i veien for en annen utvidelse, og da får vi kompabilitetsproblemer. Hvis ditt nettsted begynner å gjøre uventede ting, kan dette være problemet. Prøv å deaktivere alle utvidelsene og så reaktivere dem enkeltvis eller i ulike kombinasjoner inntil du finner ut av hvilke(t) som laget problemet."
@@ -6664,7 +6852,7 @@ msgid "You can use the Theme Editor to edit the individual CSS and PHP files whi
msgstr "Du kan bruke temaredigereren for å endre individuelle CSS- og PHP-filene som utgjør ditt tema."
#: wp-admin/theme-editor.php:28
-msgid "Begin by choosing a theme to edit from the dropdown menu and clicking Select. A list then appears of the theme's template files. Clicking once on any file name causes the file to appear in the large Editor box."
+msgid "Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme’s template files. Clicking once on any file name causes the file to appear in the large Editor box."
msgstr "Begynn med å velge et tema som du skal redigere fra nedtrekksmenyen og klikk Velg. Da ser du en liste med alle mal-filene. Når du klikker på en fil, vil du se innholdet i den store redigeringsboksen."
#: wp-admin/widgets.php:53
@@ -6691,35 +6879,35 @@ msgstr "Mal – Noen temaer har egendefinerte maler som du kan
msgid "Parent — You can arrange your pages in hierarchies. For example, you could have an “About” page that has “Life Story” and “My Dog” pages under it. There are no limits to how many levels you can nest pages."
msgstr "Forelder – Du kan organisere sidene dine i hierarkier. Du kan for eksempel ha en «Om meg»-side som har «Livshistorie»- og «Min hund»-sider under seg. Det er ingen begrensning på hvor mange sider du kan ha under hverandre."
-#: wp-admin/includes/class-wp-upgrader-skins.php:291
+#: wp-admin/includes/class-bulk-upgrader-skin.php:47
msgid "All updates have been completed."
msgstr "Alle oppgraderinger har blitt fullført."
-#: wp-admin/edit-tags.php:248
+#: wp-admin/edit-tags.php:257
msgid "When adding a new tag on this screen, you’ll fill in the following fields:"
msgstr "Når du legger til et nytt stikkord på denne skjermen, kommer du til å fylle inn følgende felter:"
-#: wp-admin/edit-tags.php:227
+#: wp-admin/edit-tags.php:236
msgid "You can use categories to define sections of your site and group related posts. The default category is “Uncategorized” until you change it in your writing settings."
msgstr "Du kan bruke kategorier for å definere seksjoner av ditt nettsted og grupperelaterte innlegg. Standardkategorien er «Ukategorisert» inntil du endrer dette i skriveinnstillingene."
-#: wp-admin/edit-tags.php:236
+#: wp-admin/edit-tags.php:245
msgid "What’s the difference between categories and tags? Normally, tags are ad-hoc keywords that identify important information in your post (names, subjects, etc) that may or may not recur in other posts, while categories are pre-determined sections. If you think of your site like a book, the categories are like the Table of Contents and the tags are like the terms in the index."
msgstr "Hva er forskjellen mellom kategorier og stikkord? Normalt er stikkord ad-hoc-nøkler som viser viktig informasjon i ditt innlegg (navn, emne, osv.) som kan (men trenger ikke å) gjentas i andre innlegg, mens kategorier er forhåndsbestemte seksjoner. Hvis du tenker på ditt nettsted som en bok, er kategoriene som innholdsfortegnelsen mens stikkordene er som registeret."
-#: wp-admin/edit-tags.php:261
+#: wp-admin/edit-tags.php:270
msgid "You can change the display of this screen using the Screen Options tab to set how many items are displayed per screen and to display/hide columns in the table."
msgstr "Du kan endre visningen på denne skjermen ved å bruke fanen Visningsinnstillinger, for eksempel for å bestemme hvor mange elementer som skal vises på hvert skjermbilde og for å vise eller skjule kolonner i tabellen."
-#: wp-admin/edit-tags.php:259
+#: wp-admin/edit-tags.php:268
msgid "Description — The description is not prominent by default; however, some themes may display it."
msgstr "Beskrivelse – Beskrivelsen vises ikke som standard, men noen temaer kan gjøre det."
-#: wp-admin/edit-tags.php:251
+#: wp-admin/edit-tags.php:260
msgid "Name — The name is how it appears on your site."
msgstr "Navn – Navnet, slik det vises på nettstedet ditt."
-#: wp-admin/edit-tags.php:246
+#: wp-admin/edit-tags.php:255
msgid "When adding a new category on this screen, you’ll fill in the following fields:"
msgstr "Når du legger til en ny kategori på denne skjermen, kommer du til å fylle inn følgende felter:"
@@ -6763,12 +6951,12 @@ msgstr "Bildeopplastingsfeil"
msgid "You need JavaScript to choose a part of the image."
msgstr "Du trenger JavaScript for å velge en del av bildet."
-#: wp-admin/includes/class-wp-comments-list-table.php:575
+#: wp-admin/includes/class-wp-comments-list-table.php:574
msgid "Restore this comment from the Trash"
msgstr "Gjenopprett denne kommentaren fra papirkurven"
-#: wp-admin/includes/class-wp-comments-list-table.php:579
-#: wp-admin/includes/dashboard.php:628
+#: wp-admin/includes/class-wp-comments-list-table.php:578
+#: wp-admin/includes/dashboard.php:636
msgid "Delete this comment permanently"
msgstr "Slett denne kommentaren permanent"
@@ -6776,13 +6964,9 @@ msgstr "Slett denne kommentaren permanent"
msgid "Allow comments."
msgstr "Tillat kommentarer."
-#: wp-admin/includes/import.php:172
-msgid "Install the LiveJournal importer to import posts from LiveJournal using their API."
-msgstr "Installer LiveJournal-importereren for å importere innlegg fra LiveJournal med deres API."
-
-#: wp-admin/includes/class-wp-upgrader-skins.php:453
-#: wp-admin/includes/class-wp-upgrader-skins.php:505
-#: wp-admin/includes/class-wp-upgrader-skins.php:835
+#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:50
+#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:50
+#: wp-admin/includes/class-language-pack-upgrader-skin.php:73
msgid "Return to WordPress Updates page"
msgstr "Gå tilbake til WordPress-oppdateringer"
@@ -6807,10 +6991,6 @@ msgstr "Du kan snevre inn listen slik at du kun viser innlegg i en bestemt kateg
msgid "You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab."
msgstr "Du kan vise eller skjule kolonner basert på dine behov og velge hvor mange innlegg som skal vises per skjermbilde ved å bruke fanen Visningsinnstillinger."
-#: wp-admin/edit.php:197
-msgid "You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts."
-msgstr "Du kan filtrere listen med innlegg etter innleggsstatus ved å bruke tekstlenkene oppe til venstre for å vise alle, publiserte, kladder eller slettede innlegg. Standardvisningen viser alle innlegg."
-
#: wp-admin/users.php:39
msgid "You can customize the display of this screen in a number of ways:"
msgstr "Du kan tilpasse visningen på denne skjermen på mange ulike måter:"
@@ -6819,7 +6999,7 @@ msgstr "Du kan tilpasse visningen på denne skjermen på mange ulike måter:"
msgid "Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:"
msgstr "Når du fører pekeren over en rad i innleggslisten vil du se handlingslenker som lar deg håndtere innlegget. Du kan utføre disse handlingene:"
-#: wp-admin/plugins.php:513
+#: wp-admin/plugins.php:512
msgid "Search Installed Plugins"
msgstr "Søk i installerte utvidelser"
@@ -6827,16 +7007,12 @@ msgstr "Søk i installerte utvidelser"
msgid "Your theme does not support navigation menus or widgets."
msgstr "Det aktive temaet støtter ikke menyer eller widgeter."
-#: wp-admin/includes/import.php:165 wp-admin/tools.php:21
+#: wp-admin/includes/import.php:170 wp-admin/tools.php:21
#: wp-admin/tools.php:103
msgid "Categories and Tags Converter"
msgstr "Kategorier og stikkord konverterer"
-#: wp-admin/includes/import.php:166
-msgid "Install the category/tag converter to convert existing categories to tags or tags to categories, selectively."
-msgstr "Installer kategori/stikkord-konvertereren for å selektivt konvertere eksisterende kategorier til stikkord eller stikkord til kategorier."
-
-#: wp-admin/includes/nav-menu.php:378
+#: wp-admin/includes/nav-menu.php:389
msgid "Most Recent"
msgstr "Siste"
@@ -6844,36 +7020,12 @@ msgstr "Siste"
msgid "Start date:"
msgstr "Startdato:"
-#: wp-admin/includes/import.php:202
-msgid "Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file."
-msgstr "Installer WordPress-importereren for å importere innlegg, sider, kommentarer, egendefinerte felter, kategorier og stikkord fra en WordPress-eksportfil."
-
-#: wp-admin/includes/import.php:190
-msgid "Install the RSS importer to import posts from an RSS feed."
-msgstr "Installer RSS-importereren for å importere innlegg fra en RSS-strøm."
-
-#: wp-admin/includes/import.php:184
-msgid "Install the blogroll importer to import links in OPML format."
-msgstr "Installer blogroll-importereren for å importere lenker i OPML-format."
-
-#: wp-admin/includes/import.php:178
-msgid "Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog."
-msgstr "Installer Movable Type-importereren for å importere innlegg og kommentarer fra en Movable Type eller Typepad-blogg."
-
-#: wp-admin/includes/import.php:160
-msgid "Install the Blogger importer to import posts, comments, and users from a Blogger blog."
-msgstr "Installer Blogger-importereren for å importere innlegg, kommentarer og brukere fra en Blogger-blogg."
-
-#: wp-admin/import.php:105
-msgid "Install importer"
-msgstr "Installer importverktøy."
-
#: wp-admin/theme-editor.php:222
msgctxt "Theme stylesheets in theme editor"
msgid "Styles"
msgstr "Stiler"
-#: wp-admin/includes/plugin-install.php:269
+#: wp-admin/includes/plugin-install.php:263
msgctxt "Plugin Installer"
msgid "Tag"
msgstr "Stikkord"
@@ -6883,13 +7035,13 @@ msgctxt "Theme Installer"
msgid "Tag"
msgstr "Stikkord"
-#: wp-admin/includes/media.php:2227
+#: wp-admin/includes/media.php:2229
msgctxt "verb"
msgid "Clear"
msgstr "Fjern"
#: wp-admin/comment.php:115
-#: wp-admin/includes/class-wp-comments-list-table.php:298
+#: wp-admin/includes/class-wp-comments-list-table.php:297
msgctxt "comment"
msgid "Mark as Spam"
msgstr "Merk som spam"
@@ -6904,7 +7056,7 @@ msgstr "Fjern bakgrunnsbilde"
msgid "Comments on “%s”"
msgstr "Kommentarer til «%s»"
-#: wp-admin/includes/nav-menu.php:944
+#: wp-admin/includes/nav-menu.php:966
msgid "Show advanced menu properties"
msgstr "Vis avanserte menyegenskaper"
@@ -6919,8 +7071,8 @@ msgstr "+ %s"
msgid "You have version %1$s installed. Update to %2$s."
msgstr "Du bruker versjon %1$s. Oppgrader til %2$s."
-#: wp-admin/includes/class-wp-comments-list-table.php:303
-#: wp-admin/includes/class-wp-comments-list-table.php:571
+#: wp-admin/includes/class-wp-comments-list-table.php:302
+#: wp-admin/includes/class-wp-comments-list-table.php:570
msgctxt "comment"
msgid "Not Spam"
msgstr "Ikke spam"
@@ -6929,7 +7081,7 @@ msgstr "Ikke spam"
msgid "This will restore the original background image. You will not be able to restore any customizations."
msgstr "Dette vil gjenopprette det originale bakgrunnsbildet. Alle tilpasninger du har gjort vil bli borte."
-#: wp-admin/includes/dashboard.php:1093
+#: wp-admin/includes/dashboard.php:1103
msgid "WordPress Blog"
msgstr "WordPress blogg"
@@ -6945,119 +7097,63 @@ msgstr "Bruk «Skriv om dette» for å klippe tekst, bilder og film fr
msgid "Remove Users from Site"
msgstr "Fjern brukere fra nettstedet"
-#: wp-admin/includes/post.php:719
-msgid "You are not allowed to create posts or drafts on this site."
-msgstr "Du har ikke lov til å lage innlegg eller kladder på dette nettstedet."
+#: wp-admin/includes/post.php:726
+msgid "Sorry, you are not allowed to create posts or drafts on this site."
+msgstr "Beklager, du har ikke lov til å opprette innlegg eller utkast på dette nettstedet."
-#: wp-admin/includes/plugin.php:421
+#: wp-admin/includes/plugin.php:429
msgid "Custom site deleted message."
msgstr "Tilpasset beskjed for slettet nettsted."
-#: wp-admin/includes/plugin.php:423
+#: wp-admin/includes/plugin.php:431
msgid "Custom site suspended message."
msgstr "Tilpasset melding for suspendert nettsted"
-#: wp-admin/includes/plugin.php:422
+#: wp-admin/includes/plugin.php:430
msgid "Custom site inactive message."
msgstr "Tilpasset beskjed for ikke aktivt nettsted."
-#: wp-admin/includes/post.php:717
-msgid "You are not allowed to create pages on this site."
-msgstr "Du har ikke lov til å lage sider på dette nettstedet."
+#: wp-admin/includes/post.php:724
+msgid "Sorry, you are not allowed to create pages on this site."
+msgstr "Beklager, du har ikke lov til å opprette sider på dette nettstedet."
-#: wp-admin/includes/schema.php:401
+#: wp-admin/includes/schema.php:396
msgid "My Site"
msgstr "Mitt nettsted"
-#: wp-admin/includes/upgrade.php:388
+#: wp-admin/includes/upgrade.php:392
msgid "New WordPress Site"
msgstr "Nytt WordPress-nettsted"
-#: wp-admin/update.php:172 wp-admin/update.php:193
-msgid "You do not have sufficient permissions to update themes for this site."
-msgstr "Du har ikke nok rettigheter til å oppdatere tema på dette nettstedet."
-
-#: wp-admin/includes/ajax-actions.php:3093 wp-admin/update.php:24
-#: wp-admin/update.php:50 wp-admin/update.php:71
-msgid "You do not have sufficient permissions to update plugins for this site."
-msgstr "Du har ikke nok rettigheter til å oppdatere utvidelser på dette nettstedet."
-
-#: wp-admin/theme-install.php:16 wp-admin/update.php:219
-#: wp-admin/update.php:249
-msgid "You do not have sufficient permissions to install themes on this site."
-msgstr "Du har ikke nok rettigheter til å installere temaer på dette nettstedet."
-
-#: wp-admin/theme-editor.php:18
-msgid "You do not have sufficient permissions to edit templates for this site."
-msgstr "Du har ikke nok rettigheter til å redigere malene på dette nettstedet."
-
-#: wp-admin/plugins.php:33 wp-admin/plugins.php:72 wp-admin/plugins.php:150
-msgid "You do not have sufficient permissions to activate plugins for this site."
-msgstr "Du har ikke nok rettigheter til å aktivere utvidelser på dette nettstedet."
-
-#: wp-admin/plugin-install.php:18 wp-admin/update.php:96
-#: wp-admin/update.php:144
-msgid "You do not have sufficient permissions to install plugins on this site."
-msgstr "Du har ikke nok rettigheter til å installere utvidelser på dette nettstedet."
-
-#: wp-admin/plugins.php:171 wp-admin/plugins.php:196
-msgid "You do not have sufficient permissions to deactivate plugins for this site."
-msgstr "Du har ikke nok rettigheter til å deaktivere utvidelser på dette nettstedet."
-
-#: wp-admin/plugins.php:231
-msgid "You do not have sufficient permissions to delete plugins for this site."
-msgstr "Du har ikke nok rettigheter til å slette utvidelser på dette nettstedet."
-
-#: wp-admin/link-add.php:13
-msgid "You do not have sufficient permissions to add links to this site."
-msgstr "Du har ikke nok rettigheter til å legge til lenker på dette nettstedet."
-
-#: wp-admin/includes/bookmark.php:32 wp-admin/includes/bookmark.php:315
-#: wp-admin/link-manager.php:12 wp-admin/link-manager.php:71
-msgid "You do not have sufficient permissions to edit the links for this site."
-msgstr "Du har ikke nok rettigheter til å redigere lenkene på dette nettstedet."
-
-#: wp-admin/export.php:13
-msgid "You do not have sufficient permissions to export the content of this site."
-msgstr "Du har ikke nok rettigheter til å eksportere innholdet fra dette nettstedet."
-
-#: wp-admin/import.php:15
-msgid "You do not have sufficient permissions to import content in this site."
-msgstr "Du har ikke nok rettigheter til å importere innhold til dette nettstedet."
-
-#: wp-admin/import.php:64
+#: wp-admin/import.php:68
msgid "If you have posts or comments in another system, WordPress can import those into this site. To get started, choose a system to import from below:"
msgstr "Hvis du har innlegg eller kommentarer i et annet system, kan WordPress importere dem til dette nettstedet. Velg systemet du vil importere fra for å komme i gang:"
-#: wp-admin/plugin-editor.php:18
-msgid "You do not have sufficient permissions to edit plugins for this site."
-msgstr "Du har ikke nok rettigheter til å endre utvidelser på dette nettstedet."
-
-#: wp-admin/includes/nav-menu.php:326 wp-admin/includes/nav-menu.php:601
+#: wp-admin/includes/nav-menu.php:337 wp-admin/includes/nav-menu.php:621
msgid "No items."
msgstr "Ingen valg."
#. translators: %s: asterisk symbol (*)
-#: wp-admin/includes/schema.php:1102
+#: wp-admin/includes/schema.php:1097
msgid "To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s hostname record pointing at your web server in your DNS configuration tool."
msgstr "For å bruke en underdomenekonfigurasjon må du ha en wildcard-innstilling i DNS-en din. Dette betyr vanligvis å legge til hostname-oppføringen %s som peker til din nettjener i din DNS-konfigurasjon."
#. translators: %s: host name
-#: wp-admin/includes/schema.php:1091
+#: wp-admin/includes/schema.php:1086
msgid "The installer attempted to contact a random hostname (%s) on your domain."
msgstr "Installeringen forsøkte å kontakte en tilfeldig tjener (%s) på ditt domene."
-#: wp-admin/nav-menus.php:263
+#: wp-admin/nav-menus.php:245
msgid "The menu item has been successfully deleted."
msgstr "Menyvalget ble slettet."
#: wp-admin/includes/class-wp-plugin-install-list-table.php:236
#: wp-admin/includes/class-wp-theme-install-list-table.php:145
-#: wp-admin/setup-config.php:247
+#: wp-admin/setup-config.php:249
msgid "Try again"
msgstr "Prøv igjen"
-#: wp-admin/includes/ajax-actions.php:1280
+#: wp-admin/includes/ajax-actions.php:1296
msgid "Please provide a custom field name."
msgstr "Vennligst angi et egendefinert feltnavn."
@@ -7098,15 +7194,15 @@ msgid "Other users have been removed."
msgstr "Andre brukere har blitt slettet."
#. translators: 1: Title of an update
-#: wp-admin/includes/class-wp-upgrader-skins.php:290
+#: wp-admin/includes/class-bulk-upgrader-skin.php:46
msgid "%1$s updated successfully."
msgstr "Oppdateringen av %1$s var vellykket."
-#: wp-admin/includes/class-wp-upgrader-skins.php:290
+#: wp-admin/includes/class-bulk-upgrader-skin.php:46
msgid "Show Details"
msgstr "Vis detaljer"
-#: wp-admin/includes/class-wp-upgrader-skins.php:290
+#: wp-admin/includes/class-bulk-upgrader-skin.php:46
msgid "Hide Details"
msgstr "Skjul detaljer"
@@ -7122,10 +7218,6 @@ msgstr "Ditt valgte passord."
msgid "No thanks, do not remind me again"
msgstr "Nei takk og ikke minn meg på dette igjen"
-#: wp-admin/upload.php:147
-msgid "You are not allowed to move this item out of the Trash."
-msgstr "Du har ikke lov til å flytte dette ut av papirkurven."
-
#: wp-admin/edit.php:144 wp-admin/edit.php:147 wp-admin/post.php:260
#: wp-admin/post.php:263 wp-admin/upload.php:162
msgid "Error in deleting."
@@ -7135,9 +7227,9 @@ msgstr "Feil under sletting."
msgid "Error in restoring from Trash."
msgstr "Feil under gjenoppretting fra papirkurven."
-#: wp-admin/edit.php:125 wp-admin/post.php:237
-msgid "You are not allowed to restore this item from the Trash."
-msgstr "Du har ikke lov til å gjenopprette dette fra papirkurven."
+#: wp-admin/edit.php:125 wp-admin/post.php:237 wp-admin/upload.php:147
+msgid "Sorry, you are not allowed to restore this item from the Trash."
+msgstr "Beklager, du har ikke lov til å gjenopprette dette fra papirkurven."
#: wp-admin/edit.php:114 wp-admin/post.php:222 wp-admin/upload.php:138
msgid "Error in moving to Trash."
@@ -7158,22 +7250,22 @@ msgstr[0] "%s kommentar flyttet til papirkurven."
msgstr[1] "%s kommentarer flyttet til papirkurven."
#: wp-admin/edit.php:106 wp-admin/post.php:214 wp-admin/upload.php:135
-msgid "You are not allowed to move this item to the Trash."
-msgstr "Du har ikke lov til å flytte dette til papirkurven."
+msgid "Sorry, you are not allowed to move this item to the Trash."
+msgstr "Beklager, du har ikke lov til å flytte dette til papirkurven."
#: wp-admin/update-core.php:348
msgid "The following themes have new versions available. Check the ones you want to update and then click “Update Themes”."
msgstr "Følgende temaer har nye versjoner tilgjengelig. Merk de du vil oppdatere og klikk «Oppdater tema»."
-#: wp-admin/user-new.php:247
+#: wp-admin/user-new.php:248
msgid "User has been added to your site."
msgstr "Bruker har blitt lagt til ditt nettsted."
-#: wp-admin/user-new.php:254
+#: wp-admin/user-new.php:255
msgid "That user is already a member of this site."
msgstr "Den brukeren er allerede medlem på dette nettstedet."
-#: wp-admin/user-new.php:243
+#: wp-admin/user-new.php:244
msgid "Invitation email sent to user. A confirmation link must be clicked for them to be added to your site."
msgstr "Invitasjon er sendt til bruker på e-post. Der er en aktiveringslenke som må trykkes på for at brukeren skal legges til på nettstedet."
@@ -7193,7 +7285,7 @@ msgstr "Kun det aktive temaet er tilgjengelig for deg nå. Kontakt administrator
msgid "Author Template"
msgstr "Forfattermal"
-#: wp-admin/includes/file.php:47
+#: wp-admin/includes/file.php:53
msgid "Visual Editor Stylesheet"
msgstr "Visuell tekstbehandlermal"
@@ -7205,17 +7297,14 @@ msgstr "Stikkordmal"
msgid "Page saved."
msgstr "Side lagret."
+#. translators: %s: Importer name
#. translators: 1: Plugin name and version.
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:484
-#: wp-admin/includes/class-wp-plugins-list-table.php:748
+#: wp-admin/import.php:175
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:511
+#: wp-admin/includes/class-wp-plugins-list-table.php:788
msgid "More information about %s"
msgstr "Mer informasjon om %s"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:469
-#: wp-admin/update-core.php:50
-msgid "Update Now"
-msgstr "Oppdater nå"
-
#: wp-admin/user-edit.php:331
msgid "Grant this user super admin privileges for the Network."
msgstr "Gi denne brukeren superadminrettigheter for nettverket."
@@ -7241,14 +7330,10 @@ msgstr "saker"
msgid "Usernames cannot be changed."
msgstr "Brukernavn kan ikke endres."
-#: wp-admin/nav-menus.php:282
+#: wp-admin/nav-menus.php:264
msgid "The menu has been successfully deleted."
msgstr "Menyen har blitt slettet."
-#: wp-admin/plugins.php:13
-msgid "You do not have sufficient permissions to manage plugins for this site."
-msgstr "Du har ikke nok rettigheter til å administrere utvidelser på dette nettstedet."
-
#: wp-admin/options-general.php:66
msgid "In a few words, explain what this site is about."
msgstr "Forklar med få ord hva dette nettstedet handler om."
@@ -7259,15 +7344,11 @@ msgstr "Forklar med få ord hva dette nettstedet handler om."
msgid "Site Visibility"
msgstr "Nettstedets synlighet"
-#: wp-admin/includes/template.php:1251
+#: wp-admin/includes/template.php:1258
msgid "The miscellaneous options group has been removed. Use another settings group."
msgstr "Gruppen med diverse innstillinger er fjernet. Bruk en annen gruppe med innstillinger."
-#: wp-admin/options.php:163
-msgid "You do not have sufficient permissions to modify unregistered settings for this site."
-msgstr "Du har ikke nok rettigheter til å redigere uregistrerte innstillinger på dette nettstedet."
-
-#: wp-admin/includes/nav-menu.php:946
+#: wp-admin/includes/nav-menu.php:968
msgid "Link Target"
msgstr "Lenkemål"
@@ -7275,36 +7356,36 @@ msgstr "Lenkemål"
msgid "CSS Classes (optional)"
msgstr "CSS-klasser (valgfritt)"
-#: wp-admin/nav-menus.php:780 wp-admin/nav-menus.php:857
+#: wp-admin/nav-menus.php:762 wp-admin/nav-menus.php:839
msgid "Save Menu"
msgstr "Lagre meny"
-#: wp-admin/includes/class-wp-upgrader-skins.php:478
+#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:23
msgid "Updating Theme %1$s (%2$d/%3$d)"
msgstr "Oppdaterer tema %1$s (%2$d/%3$d)"
-#: wp-admin/includes/schema.php:909
+#: wp-admin/includes/schema.php:904
msgid "You must provide a domain name."
msgstr "Du må skrive inn et domenenavn."
-#: wp-admin/includes/schema.php:911
+#: wp-admin/includes/schema.php:906
msgid "You must provide a name for your network of sites."
msgstr "Du må oppgi et navn for ditt nettverk med nettsteder."
-#: wp-admin/includes/schema.php:915
+#: wp-admin/includes/schema.php:910
msgid "The network already exists."
msgstr "Nettverket finnes allerede."
-#: wp-admin/includes/schema.php:918
+#: wp-admin/includes/schema.php:913
msgid "You must provide a valid email address."
msgstr "Du må skrive inn en gyldig e-postadresse."
#. translators: %s: error message
-#: wp-admin/includes/schema.php:1096
+#: wp-admin/includes/schema.php:1091
msgid "This resulted in an error message: %s"
msgstr "Dette medførte en feilmelding: %s"
-#: wp-admin/includes/schema.php:1106
+#: wp-admin/includes/schema.php:1101
msgid "You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message."
msgstr "Du kan fortsatt bruke nettstedet, men underdomener du lager kan bli utilgjengelige. Ignorer denne beskjeden hvis du vet at din DNS er riktig."
@@ -7316,12 +7397,12 @@ msgstr "Merk:"
msgid "Get Shortlink"
msgstr "Få kortlenke"
-#: wp-admin/includes/class-wp-upgrader-skins.php:426
+#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:23
msgid "Updating Plugin %1$s (%2$d/%3$d)"
msgstr "Oppdaterer utvidelse %1$s (%2$d/%3$d)"
#. translators: 1: Title of an update
-#: wp-admin/includes/class-wp-upgrader-skins.php:288
+#: wp-admin/includes/class-bulk-upgrader-skin.php:44
msgid "The update of %1$s failed."
msgstr "Oppdatering av %1$s feilet."
@@ -7333,8 +7414,8 @@ msgstr "Passordet du valgte under installeringen."
msgid "User already exists. Password inherited."
msgstr "Brukeren finnes allerede. Det gamle passordet ble beholdt."
-#: wp-admin/includes/class-wp-upgrader.php:3030
-#: wp-admin/includes/update-core.php:1219 wp-admin/update-core.php:501
+#: wp-admin/includes/class-wp-automatic-updater.php:355
+#: wp-admin/includes/update-core.php:1221 wp-admin/update-core.php:501
msgid "WordPress updated successfully"
msgstr "Oppdateringen av WordPress var vellykket"
@@ -7376,25 +7457,25 @@ msgstr "Er du sikker på at du vil slette disse filene og data?"
msgid "Yes, delete these files and data"
msgstr "Ja, slett disse filene og dataene"
-#: wp-admin/includes/class-wp-plugins-list-table.php:541
+#: wp-admin/includes/class-wp-plugins-list-table.php:581
msgid "Inactive:"
msgstr "Inaktive:"
-#: wp-admin/includes/class-wp-plugins-list-table.php:385
+#: wp-admin/includes/class-wp-plugins-list-table.php:425
msgid "Must-Use (%s)"
msgid_plural "Must-Use (%s)"
msgstr[0] "Må bruke (%s)"
msgstr[1] "Må bruke (%s)"
-#: wp-admin/about.php:189
+#: wp-admin/about.php:205
msgid "Go to Dashboard"
msgstr "Gå til kontrollpanel"
-#: wp-admin/nav-menus.php:359 wp-admin/nav-menus.php:369
+#: wp-admin/nav-menus.php:341 wp-admin/nav-menus.php:351
msgid "Please enter a valid menu name."
msgstr "Vennligst oppgi et gyldig menynavn."
-#: wp-admin/includes/nav-menu.php:383 wp-admin/includes/nav-menu.php:658
+#: wp-admin/includes/nav-menu.php:394 wp-admin/includes/nav-menu.php:678
msgid "View All"
msgstr "Vis alle"
@@ -7406,47 +7487,50 @@ msgstr "Denne tidssonen er nå i sommertid."
msgid "This timezone does not observe daylight saving time."
msgstr "Denne tidssonen bruker ikke sommertid."
-#: wp-admin/includes/class-wp-plugins-list-table.php:388
+#: wp-admin/includes/class-wp-plugins-list-table.php:428
msgid "Drop-ins (%s)"
msgid_plural "Drop-ins (%s)"
msgstr[0] "Innslipp (%s)"
msgstr[1] "Innslipp (%s)"
-#: wp-admin/includes/plugin.php:420
+#: wp-admin/includes/plugin.php:428
msgid "Executed before Multisite is loaded."
msgstr "Kjørt før flernettsted lastes."
-#: wp-admin/includes/plugin.php:416
+#: wp-admin/includes/plugin.php:424
msgid "External object cache."
msgstr "Ekstern objekt-cache."
-#: wp-admin/includes/plugin.php:415
+#: wp-admin/includes/plugin.php:423
msgid "Custom maintenance message."
msgstr "Egendefinert vedlikeholdsbeskjed."
-#: wp-admin/includes/plugin.php:414
+#: wp-admin/includes/plugin.php:422
msgid "Custom install script."
msgstr "Tilpasset installeringsskript."
-#: wp-admin/includes/plugin.php:413
+#: wp-admin/includes/plugin.php:421
msgid "Custom database error message."
msgstr "Egendefinert beskjed for databasefeil."
-#: wp-admin/includes/file.php:320
+#: wp-admin/includes/file.php:326
msgid "File is empty. Please upload something more substantial."
msgstr "Filen er tom. Vennligst last opp noe mer innholdsrikt."
+#. translators: %s: Importer name
#. translators: %s: plugin name
+#. translators: %s: Theme name
+#: wp-admin/import.php:136
#: wp-admin/includes/class-wp-theme-install-list-table.php:286
-#: wp-admin/includes/dashboard.php:1250
+#: wp-admin/includes/dashboard.php:1260 wp-admin/theme-install.php:266
msgid "Install %s"
msgstr "Installer %s"
-#: wp-admin/includes/plugin.php:412
+#: wp-admin/includes/plugin.php:420
msgid "Custom database class."
msgstr "Egendefinert databaseklasse."
-#: wp-admin/includes/plugin.php:411
+#: wp-admin/includes/plugin.php:419
msgid "Advanced caching plugin."
msgstr "Avansert hurtiglagringsutvidelse."
@@ -7486,51 +7570,43 @@ msgstr "Vis papirkurven"
msgid "This comment is already marked as spam."
msgstr "Denne kommentaren er allerede merket som spam."
-#: wp-admin/includes/class-wp-screen.php:895
+#: wp-admin/includes/class-wp-screen.php:893
msgid "Screen Options"
msgstr "Visningsinnstillinger"
-#: wp-admin/includes/theme-install.php:101 wp-admin/theme-install.php:153
+#: wp-admin/includes/theme-install.php:101 wp-admin/theme-install.php:155
msgid "Feature Filter"
msgstr "Funksjonalitetsfilter"
-#: wp-admin/includes/theme.php:227
-msgid "Tan"
-msgstr "Beige"
-
-#: wp-admin/includes/theme.php:230
-msgid "Dark"
-msgstr "Mørk"
-
-#: wp-admin/includes/theme.php:238
+#: wp-admin/includes/theme.php:237
msgid "One Column"
msgstr "En kolonne"
-#: wp-admin/includes/theme.php:239
+#: wp-admin/includes/theme.php:238
msgid "Two Columns"
msgstr "To kolonner"
-#: wp-admin/includes/theme.php:240
+#: wp-admin/includes/theme.php:239
msgid "Three Columns"
msgstr "Tre kolonner"
-#: wp-admin/includes/theme.php:241
+#: wp-admin/includes/theme.php:240
msgid "Four Columns"
msgstr "Fire kolonner"
-#: wp-admin/includes/theme.php:242
+#: wp-admin/includes/theme.php:241
msgid "Left Sidebar"
msgstr "Venstre sidekolonne"
-#: wp-admin/includes/theme.php:243
+#: wp-admin/includes/theme.php:242
msgid "Right Sidebar"
msgstr "Høyre sidekolonne"
-#: wp-admin/includes/theme.php:246 wp-admin/includes/theme.php:296
+#: wp-admin/includes/theme.php:245 wp-admin/includes/theme.php:301
msgid "Features"
msgstr "Egenskaper"
-#: wp-admin/includes/theme.php:251
+#: wp-admin/includes/theme.php:249
msgid "Custom Colors"
msgstr "Egendefinerte farger"
@@ -7550,22 +7626,14 @@ msgstr "Klebrig innlegg"
msgid "Microformats"
msgstr "Mikroformat"
-#: wp-admin/includes/theme.php:269 wp-admin/includes/theme.php:297
+#: wp-admin/includes/theme.php:269 wp-admin/includes/theme.php:302
msgid "Subject"
msgstr "Emne"
-#: wp-admin/includes/theme.php:270
+#: wp-admin/includes/theme.php:275
msgid "Holiday"
msgstr "Ferie"
-#: wp-admin/includes/theme.php:271
-msgid "Photoblogging"
-msgstr "Fotoblogging"
-
-#: wp-admin/includes/theme.php:272
-msgid "Seasonal"
-msgstr "Sesong"
-
#: wp-admin/includes/theme-install.php:133
msgid "Find Themes"
msgstr "Finn temaer"
@@ -7574,6 +7642,7 @@ msgstr "Finn temaer"
msgid "If you have a theme in a .zip format, you may install it by uploading it here."
msgstr "Hvis du har et tema i .zip format kan du installere det ved å laste det opp her."
+#: wp-admin/import.php:176
#: wp-admin/includes/class-wp-theme-install-list-table.php:316
#: wp-admin/includes/class-wp-themes-list-table.php:227
msgid "Details"
@@ -7583,40 +7652,41 @@ msgstr "Detaljer"
msgid "Theme Install"
msgstr "Installer tema"
-#: wp-admin/includes/theme.php:628 wp-admin/theme-install.php:280
-#: wp-admin/themes.php:424
+#. translators: %s: Theme version
+#: wp-admin/includes/theme.php:633 wp-admin/theme-install.php:314
+#: wp-admin/themes.php:440
msgid "Version: %s"
msgstr "Versjon: %s"
-#: wp-admin/includes/theme.php:63
+#: wp-admin/includes/class-wp-upgrader.php:162 wp-admin/includes/theme.php:67
msgid "Unable to locate WordPress theme directory."
msgstr "Klarte ikke å finne WordPress temamappen."
-#: wp-admin/includes/theme.php:71
+#: wp-admin/includes/theme.php:75
msgid "Could not fully remove the theme %s."
msgstr "Kunne ikke fjerne %s-temaet fullstendig."
-#: wp-admin/includes/update-core.php:873
+#: wp-admin/includes/update-core.php:875
msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s."
msgstr "Oppdateringen kunne ikke installeres fordi WordPress %1$s krever PHP versjon %2$s eller høyere og MySQL versjon %3$s eller høyere. Du bruker PHP versjon %4$s og MySQL verson %5$s."
-#: wp-admin/includes/update-core.php:875
+#: wp-admin/includes/update-core.php:877
msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s."
msgstr "Oppdateringen kunne ikke installeres fordi WordPress %1$s krever PHP versjon %2$s eller høyere. Du bruker versjon %3$s."
-#: wp-admin/includes/update-core.php:877
+#: wp-admin/includes/update-core.php:879
msgid "The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s."
msgstr "Oppdateringen kunne ikke installeres fordi WordPress %1$s krever MySQL versjon %2$s eller høyere. Du bruker versjon %3$s."
-#: wp-admin/includes/update-core.php:822
+#: wp-admin/includes/update-core.php:824
msgid "Verifying the unpacked files…"
msgstr "Verifiserer utpakkede filer…"
-#: wp-admin/includes/update-core.php:835
+#: wp-admin/includes/update-core.php:837
msgid "The update could not be unpacked"
msgstr "Oppdateringen kunne ikke pakkes ut"
-#: wp-admin/includes/update-core.php:1093
+#: wp-admin/includes/update-core.php:1095
msgid "Upgrading database…"
msgstr "Oppgraderer database…"
@@ -7624,19 +7694,19 @@ msgstr "Oppgraderer database…"
msgid "You are using a development version (%1$s). Cool! Please stay updated."
msgstr "Du bruker en utviklingsversjon (%1$s). Kult! Vennligst hold deg oppdatert."
-#: wp-admin/includes/update.php:254
+#: wp-admin/includes/update.php:274
msgid "Update to %s"
msgstr "Oppdater til %s"
-#: wp-admin/includes/update.php:254
+#: wp-admin/includes/update.php:274
msgid "Latest"
msgstr "Siste"
-#: wp-admin/includes/update.php:554
+#: wp-admin/includes/update.php:608
msgid "An automated WordPress update has failed to complete - please attempt the update again now."
msgstr "En automatisk WordPress-oppdatering feilet—vennligst prøv igjen nå."
-#: wp-admin/includes/update.php:556
+#: wp-admin/includes/update.php:610
msgid "An automated WordPress update has failed to complete! Please notify the site administrator."
msgstr "En automatisk WordPress-oppdatering feilet! Vennligst si ifra til nettstedets administrator."
@@ -7659,15 +7729,11 @@ msgid "Hello world!"
msgstr "Hei, verden!"
#. translators: Default post slug
-#: wp-admin/includes/upgrade.php:182
+#: wp-admin/includes/upgrade.php:182 wp-admin/includes/upgrade.php:326
msgctxt "Default post slug"
msgid "hello-world"
msgstr "hei-verden"
-#: wp-admin/includes/upgrade.php:194
-msgid "Mr WordPress"
-msgstr "Herr WordPress"
-
#: wp-admin/includes/user.php:129
msgid "ERROR: Please enter a password."
msgstr "FEIL: Vennligst skriv inn et passordet."
@@ -7753,15 +7819,15 @@ msgstr "Fant ikke lenken"
msgid "WordPress › Database Repair"
msgstr "WordPress › Databasereparasjon"
-#: wp-admin/maint/repair.php:141
+#: wp-admin/maint/repair.php:147
msgid "Some database problems could not be repaired. Please copy-and-paste the following list of errors to the WordPress support forums to get additional assistance."
msgstr "Noen databaseproblemer kunne ikke repareres. Vennligst kopier og lim følgende liste med feil til WordPress-forumet for mer hjelp."
-#: wp-admin/maint/repair.php:158
+#: wp-admin/maint/repair.php:164
msgid "Repair Database"
msgstr "Reparer database"
-#: wp-admin/maint/repair.php:160
+#: wp-admin/maint/repair.php:166
msgid "Repair and Optimize Database"
msgstr "Reparer og optimaliser database"
@@ -7770,8 +7836,8 @@ msgid "Upload New Media"
msgstr "Last opp ny media"
#: wp-admin/media.php:23 wp-admin/media.php:57
-msgid "You are not allowed to edit this attachment."
-msgstr "Du har ikke lov til å redigere dette vedlegget."
+msgid "Sorry, you are not allowed to edit this attachment."
+msgstr "Beklager, du har ikke lov til å redigere dette vedlegget."
#: wp-admin/media.php:61
msgid "You attempted to edit an attachment that doesn’t exist. Perhaps it was deleted?"
@@ -7805,7 +7871,7 @@ msgid "Appearance"
msgstr "Utseende"
#. translators: add new plugin
-#: wp-admin/menu.php:208 wp-admin/plugins.php:483
+#: wp-admin/menu.php:208 wp-admin/plugins.php:482
msgctxt "plugin"
msgid "Add New"
msgstr "Legg til ny"
@@ -7969,22 +8035,26 @@ msgstr "Vis avatarer"
msgid "Maximum Rating"
msgstr "Maks klassifisering"
-#. translators: Content suitability rating: http://bit.ly/89QxZA
+#. translators: Content suitability rating:
+#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system
#: wp-admin/options-discussion.php:199
msgid "G — Suitable for all audiences"
msgstr "G — Passende for alle"
-#. translators: Content suitability rating: http://bit.ly/89QxZA
+#. translators: Content suitability rating:
+#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system
#: wp-admin/options-discussion.php:201
msgid "PG — Possibly offensive, usually for audiences 13 and above"
msgstr "PG — Mulig støtende, vanligvis for lesere på 13 år eller eldre"
-#. translators: Content suitability rating: http://bit.ly/89QxZA
+#. translators: Content suitability rating:
+#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system
#: wp-admin/options-discussion.php:203
msgid "R — Intended for adult audiences above 17"
msgstr "R — Ment for voksne over 17 år"
-#. translators: Content suitability rating: http://bit.ly/89QxZA
+#. translators: Content suitability rating:
+#. https://en.wikipedia.org/wiki/Motion_Picture_Association_of_America_film_rating_system
#: wp-admin/options-discussion.php:205
msgid "X — Even more mature than above"
msgstr "X — Enda mer støtende enn det over"
@@ -8117,53 +8187,52 @@ msgstr "Mine opplastinger skal organiseres i måneds- og årsbaserte mapper"
msgid "Permalink Settings"
msgstr "Permalenkeinnstillinger"
-#: wp-admin/options-permalink.php:144
+#: wp-admin/options-permalink.php:135
msgid "Permalink structure updated. Remove write access on web.config file now!"
msgstr "Permalenkestruktur oppdatert. Fjern skrivetilgang på web.config filen nå!"
-#: wp-admin/options-permalink.php:152
+#: wp-admin/options-permalink.php:138
msgid "You should update your .htaccess now."
msgstr "Du bør oppdatere .htaccess nå."
-#: wp-admin/options-permalink.php:146 wp-admin/options-permalink.php:149
-#: wp-admin/options-permalink.php:154 wp-admin/options-permalink.php:158
+#: wp-admin/options-permalink.php:129
msgid "Permalink structure updated."
msgstr "Strukturen for permalenker er oppdatert"
-#: wp-admin/options-permalink.php:194
+#: wp-admin/options-permalink.php:185
msgid "Day and name"
msgstr "Dag og navn"
-#: wp-admin/options-permalink.php:198
+#: wp-admin/options-permalink.php:189
msgid "Month and name"
msgstr "Måned og navn"
-#: wp-admin/options-permalink.php:202
+#: wp-admin/options-permalink.php:193
msgid "Numeric"
msgstr "Numerisk"
-#: wp-admin/options-permalink.php:212
+#: wp-admin/options-permalink.php:203
msgid "Custom Structure"
msgstr "Egendefinert stuktur"
-#: wp-admin/options-permalink.php:222
+#: wp-admin/options-permalink.php:213
msgid "Optional"
msgstr "Valgfritt"
#. translators: prefix for category permalinks
-#: wp-admin/options-permalink.php:229
+#: wp-admin/options-permalink.php:220
msgid "Category base"
msgstr "Kategoriprefiks"
-#: wp-admin/options-permalink.php:233
+#: wp-admin/options-permalink.php:224
msgid "Tag base"
msgstr "Stikkordprefiks"
-#: wp-admin/options-permalink.php:252
+#: wp-admin/options-permalink.php:243
msgid "If you temporarily make your web.config file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved."
msgstr "ikke glem å tilbakestille rettighetene etter at reglene har blitt lagret, hvis du midlertidig gjør din web.config fil skrivbar så vi kan lage omskrivningsregler automatisk."
-#: wp-admin/options-permalink.php:259
+#: wp-admin/options-permalink.php:250
msgid "If you temporarily make your site’s root directory writable for us to generate the web.config file automatically, do not forget to revert the permissions after the file has been created."
msgstr "Har du midlertidig gitt oss skriverettigheter til toppnivået for nettstedet ditt, så vi kan lage web.config-filen automatisk? Ikke glem å tilbakestille rettighetene etter at filen er opptrettet."
@@ -8243,31 +8312,32 @@ msgstr "Standardkategori for lenker"
msgid "Post via email"
msgstr "Publiser med e-post"
-#: wp-admin/options-writing.php:117
-msgid "To post to WordPress by email you must set up a secret email account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: %s, %s, %s."
-msgstr "For å publisere til WordPress med e-post må du sette opp en hemmelig e-post konto med POP3-tilgang. All e-post mottatt på denne adressen vil bli publisert, så det er en god idé å holde adressen veldig hemmelig. Her er noen tilfeldige tekstbiter du kan bruke: %s, %s, %s."
+#. translators: 1, 2, 3: examples of random email addresses
+#: wp-admin/options-writing.php:120
+msgid "To post to WordPress by email you must set up a secret email account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: %1$s, %2$s, %3$s."
+msgstr "For å publisere til WordPress med e-post må du sette opp en hemmelig e-post konto med POP3-tilgang. All e-post mottatt på denne adressen vil bli publisert, så det er en god idé å holde adressen veldig hemmelig. Her er noen tilfeldige tekstbiter du kan bruke: %1$s, %2$s, %3$s."
-#: wp-admin/options-writing.php:121
+#: wp-admin/options-writing.php:129
msgid "Mail Server"
msgstr "E-posttjener"
-#: wp-admin/options-writing.php:123
+#: wp-admin/options-writing.php:131
msgid "Port"
msgstr "Port"
-#: wp-admin/options-writing.php:128
+#: wp-admin/options-writing.php:136
msgid "Login Name"
msgstr "Login navn"
-#: wp-admin/options-writing.php:138
+#: wp-admin/options-writing.php:146
msgid "Default Mail Category"
msgstr "Standardkategori for e-post"
-#: wp-admin/options-writing.php:38 wp-admin/options-writing.php:159
+#: wp-admin/options-writing.php:38 wp-admin/options-writing.php:167
msgid "Update Services"
msgstr "Oppdateringstjenester"
-#: wp-admin/options.php:246
+#: wp-admin/options.php:247
msgid "All Settings"
msgstr "Alle innstillinger"
@@ -8338,106 +8408,95 @@ msgid "Plugins extend and expand the functionality of WordPress. Once a plugin i
msgstr "Utvidelser kan gi WordPress ny funksjonalitet. Når en utvidelse er installert kan du aktivere og deaktivere den her."
#. translators: WP_PLUGIN_DIR constant value
-#: wp-admin/plugins.php:389
+#: wp-admin/plugins.php:388
msgid "If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated."
msgstr "Med noen utvidelser kan ting gå galt, slik at du ikke kan bruke WordPress. Da må du slette eller endre navn på filen i %s-mappen, og utvidelsen blir deaktivert automatisk."
#. translators: 1: plugin file 2: error message
-#: wp-admin/plugins.php:417
+#: wp-admin/plugins.php:416
msgid "The plugin %1$s has been deactivated due to an error: %2$s"
msgstr "Utvidelsen %1$s har blitt deaktivert på grunn av en feil: %2$s"
-#: wp-admin/plugins.php:432
+#: wp-admin/plugins.php:431
msgid "Plugin could not be activated because it triggered a fatal error."
msgstr "Utvidelsen kunne ikke aktiveres fordi det utløste en fatal feil."
-#: wp-admin/plugins.php:454
+#: wp-admin/plugins.php:453
msgid "Plugin could not be deleted due to an error: %s"
msgstr "Utvidelsen kunne ikke slettes på grunn av en feil: %s"
-#: wp-admin/plugins.php:462
+#: wp-admin/plugins.php:461
msgid "The selected plugins have been deleted."
msgstr "Valgte utvidelser har blitt slettet."
-#: wp-admin/plugins.php:469
+#: wp-admin/plugins.php:468
msgid "Plugin activated."
msgstr "Utvidelse aktivert"
-#: wp-admin/plugins.php:471
+#: wp-admin/plugins.php:470
msgid "Selected plugins activated."
msgstr "Valgte utvidelser aktivert."
-#: wp-admin/plugins.php:473
+#: wp-admin/plugins.php:472
msgid "Plugin deactivated."
msgstr "Utvidelse deaktivert"
-#: wp-admin/plugins.php:475
+#: wp-admin/plugins.php:474
msgid "Selected plugins deactivated."
msgstr "Valgte utvidelser deaktivert."
-#: wp-admin/includes/class-wp-plugins-list-table.php:421
-#: wp-admin/includes/class-wp-plugins-list-table.php:563
+#: wp-admin/includes/class-wp-plugins-list-table.php:461
+#: wp-admin/includes/class-wp-plugins-list-table.php:603
msgid "Network Deactivate"
msgstr "Deaktiver nettverk"
-#: wp-admin/includes/class-wp-plugins-list-table.php:418
-#: wp-admin/includes/class-wp-plugins-list-table.php:568
-#: wp-admin/includes/class-wp-upgrader-skins.php:574
-msgid "Network Activate"
-msgstr "Aktiver nettverk"
-
-#: wp-admin/includes/class-wp-plugins-list-table.php:755
+#: wp-admin/includes/class-wp-plugins-list-table.php:795
msgid "Visit plugin site"
msgstr "Gå til utvidelsens hjemmeside"
-#: wp-admin/includes/class-wp-plugins-list-table.php:459
+#: wp-admin/includes/class-wp-plugins-list-table.php:499
msgid "Clear List"
msgstr "Tøm liste"
-#: wp-admin/includes/class-wp-plugins-list-table.php:373
+#: wp-admin/includes/class-wp-plugins-list-table.php:413
msgctxt "plugins"
msgid "All (%s)"
msgid_plural "All (%s)"
msgstr[0] "Alle (%s)"
msgstr[1] "Alle (%s)"
-#: wp-admin/includes/class-wp-plugins-list-table.php:376
+#: wp-admin/includes/class-wp-plugins-list-table.php:416
msgid "Active (%s)"
msgid_plural "Active (%s)"
msgstr[0] "Aktiv (%s)"
msgstr[1] "Aktive (%s)"
-#: wp-admin/includes/class-wp-plugins-list-table.php:379
+#: wp-admin/includes/class-wp-plugins-list-table.php:419
msgid "Recently Active (%s)"
msgid_plural "Recently Active (%s)"
msgstr[0] "Nylig aktiv (%s)"
msgstr[1] "Nylig aktive (%s)"
-#: wp-admin/includes/class-wp-plugins-list-table.php:382
+#: wp-admin/includes/class-wp-plugins-list-table.php:422
msgid "Inactive (%s)"
msgid_plural "Inactive (%s)"
msgstr[0] "Inaktiv (%s)"
msgstr[1] "Inaktive (%s)"
-#: wp-admin/includes/class-wp-plugins-list-table.php:330
+#: wp-admin/includes/class-wp-plugins-list-table.php:339
msgid "No plugins found."
msgstr "Ingen utvidelser funnet."
-#: wp-admin/includes/class-wp-plugins-list-table.php:332
-#: wp-admin/plugin-editor.php:32
-msgid "You do not appear to have any plugins available at this time."
-msgstr "Det virker som om du ikke har noen tilgjengelige utvidelser nå."
-
#: wp-admin/edit-tags.php:161 wp-admin/edit-tags.php:181 wp-admin/post.php:107
#: wp-admin/term.php:26
msgid "You attempted to edit an item that doesn’t exist. Perhaps it was deleted?"
msgstr "Du forsøkte å redigere noe som ikke eksisterer. Kanskje den ble slettet?"
#: wp-admin/async-upload.php:57 wp-admin/edit-tags.php:174
-#: wp-admin/edit-tags.php:291 wp-admin/includes/post.php:1779
+#: wp-admin/edit-tags.php:300 wp-admin/includes/post.php:1786
#: wp-admin/media-upload.php:46 wp-admin/post.php:117
-msgid "You are not allowed to edit this item."
-msgstr "Du har ikke lov til å redigere dette."
+msgid "Sorry, you are not allowed to edit this item."
+msgstr "Beklager, du har ikke lov til å redigere dette."
#: wp-admin/post.php:120
msgid "You can’t edit this item because it is in the Trash. Please restore it and try again."
@@ -8456,7 +8515,7 @@ msgstr "Vis innlegg"
msgid "Compare Revisions of “%1$s”"
msgstr "Sammenlign revisjoner av «%1$s»"
-#: wp-admin/includes/theme.php:637 wp-admin/themes.php:440
+#: wp-admin/includes/theme.php:642 wp-admin/themes.php:456
msgid "Tags:"
msgstr "Stikkord:"
@@ -8476,11 +8535,11 @@ msgstr "Maler"
msgid "Oops, no such file exists! Double check the name and try again, merci."
msgstr "Oops, jeg kjenner ingen filer som heter dette! Dobbelsjekk navnet og prøv igjen, er du grei."
-#: wp-admin/themes.php:170
+#: wp-admin/themes.php:171
msgid "Theme deleted."
msgstr "Tema er slettet."
-#: wp-admin/includes/theme.php:626 wp-admin/themes.php:422
+#: wp-admin/includes/theme.php:631 wp-admin/themes.php:438
msgid "Current Theme"
msgstr "Gjeldende tema"
@@ -8492,7 +8551,7 @@ msgstr ""
"Du er i ferd med å slette temaet '%s'\n"
" 'Avbryt' for å stoppe, 'OK' for å slette."
-#: wp-admin/themes.php:297
+#: wp-admin/themes.php:305
msgid "Broken Themes"
msgstr "Ødelagte temaer"
@@ -8536,7 +8595,8 @@ msgstr "Kompabilitet med WordPress %1$s: %2$d%% (%3$d \"virker\" av totalt %4$d
msgid "Compatibility with WordPress %1$s: Unknown"
msgstr "Kompabilitet med WordPress %1$s: Ukjent"
-#: wp-admin/includes/class-wp-upgrader.php:3028 wp-admin/update-core.php:496
+#: wp-admin/includes/class-wp-automatic-updater.php:353
+#: wp-admin/update-core.php:496
msgid "Installation Failed"
msgstr "Installasjon feilet"
@@ -8557,7 +8617,7 @@ msgid "Installing Plugin: %s"
msgstr "Installerer utvidelse: %s"
#: wp-admin/includes/class-wp-plugin-install-list-table.php:101
-#: wp-admin/plugin-install.php:112 wp-admin/update.php:151
+#: wp-admin/plugin-install.php:120 wp-admin/update.php:151
msgid "Upload Plugin"
msgstr "Last opp utvidelse"
@@ -8590,9 +8650,9 @@ msgstr "%s spørringer"
msgid "%s seconds"
msgstr "%s sekunder"
-#: wp-admin/edit-tags.php:131 wp-admin/options.php:79
-msgid "You are not allowed to delete these items."
-msgstr "Du har ikke lov til å slette disse elementene."
+#: wp-admin/edit-tags.php:131 wp-admin/options.php:80
+msgid "Sorry, you are not allowed to delete these items."
+msgstr "Beklager, du har ikke lov til å slette disse elementene."
#: wp-admin/upload.php:265 wp-admin/upload.php:298
msgid "Media file permanently deleted."
@@ -8614,19 +8674,14 @@ msgstr "Rediger bruker"
msgid "Invalid item ID."
msgstr "Ugyldig element-ID."
-#: wp-admin/includes/user.php:500
+#: wp-admin/includes/user.php:502
msgid "Use https"
msgstr "Bruk https"
-#: wp-admin/includes/user.php:501
+#: wp-admin/includes/user.php:503
msgid "Always use https when visiting the admin"
msgstr "Bruk alltid https ved bruk av administrasjonsmenyen"
-#: wp-admin/user-edit.php:80 wp-admin/user-edit.php:113
-#: wp-admin/user-edit.php:166
-msgid "You do not have permission to edit this user."
-msgstr "Du har ikke lov til å redigere denne brukeren."
-
#: wp-admin/user-edit.php:181
msgid "User updated."
msgstr "Brukeren er oppdatert."
@@ -8651,11 +8706,11 @@ msgstr "Adminfargeskjema"
msgid "Enable keyboard shortcuts for comment moderation."
msgstr "Aktiver tastatursnarveier for kommentarmoderasjon."
-#: wp-admin/user-edit.php:339 wp-admin/user-new.php:403
+#: wp-admin/user-edit.php:339 wp-admin/user-new.php:404
msgid "First Name"
msgstr "Fornavn"
-#: wp-admin/user-edit.php:344 wp-admin/user-new.php:407
+#: wp-admin/user-edit.php:344 wp-admin/user-new.php:408
msgid "Last Name"
msgstr "Etternavn"
@@ -8711,11 +8766,11 @@ msgstr "Oppdater bruker"
msgid "[%s] Joining confirmation"
msgstr "[%s] venter på aktivering"
-#: wp-admin/user-new.php:240
+#: wp-admin/user-new.php:241
msgid "Invitation email sent to new user. A confirmation link must be clicked before their account is created."
msgstr "Invitasjon er sendt til den nye brukeren på e-post. Der er en aktiveringslenke som må trykkes på før kontoen lages."
-#: wp-admin/user-new.php:343 wp-admin/user-new.php:473
+#: wp-admin/user-new.php:344 wp-admin/user-new.php:474
msgid "Skip Confirmation Email"
msgstr "Hopp over bekreftelses-e-post"
@@ -8790,7 +8845,7 @@ msgstr "Posisjon"
msgid "Save Widget"
msgstr "Lagre widget"
-#: wp-admin/includes/misc.php:882 wp-admin/includes/post.php:1773
+#: wp-admin/includes/misc.php:882 wp-admin/includes/post.php:1780
#: wp-admin/widgets.php:340
msgid "Error while saving."
msgstr "Feil under lagring."
@@ -8827,7 +8882,7 @@ msgstr "Godkjenn kommentar"
msgid "Unknown action."
msgstr "Ukjent handling"
-#: wp-admin/custom-background.php:183 wp-admin/includes/theme.php:250
+#: wp-admin/custom-background.php:183 wp-admin/includes/theme.php:248
msgid "Custom Background"
msgstr "Egendefinert bakgrunn"
@@ -8841,16 +8896,16 @@ msgstr "Velg et bilde fra maskinen din:"
#: wp-admin/custom-background.php:275 wp-admin/custom-header.php:579
#: wp-admin/includes/class-wp-theme-install-list-table.php:63
-#: wp-admin/includes/media.php:1941 wp-admin/includes/media.php:1943
+#: wp-admin/includes/media.php:1943 wp-admin/includes/media.php:1945
msgid "Upload"
msgstr "Last opp"
-#: wp-admin/includes/template.php:1906 wp-admin/nav-menus.php:674
-#: wp-admin/options.php:293
+#: wp-admin/includes/template.php:1922 wp-admin/nav-menus.php:656
+#: wp-admin/options.php:294
msgid "Save Changes"
msgstr "Lagre endringene"
-#: wp-admin/custom-header.php:456 wp-admin/includes/theme.php:252
+#: wp-admin/custom-header.php:456 wp-admin/includes/theme.php:250
msgid "Custom Header"
msgstr "Egendefinert sidetopp"
@@ -8866,34 +8921,30 @@ msgstr "Bildebehandlingsfeil"
msgid "Choose the part of the image you want to use as your header."
msgstr "Velg den delen av bildet du ønsker å bruke som toppbilde."
-#: wp-admin/custom-header.php:969
-msgid "You do not have permission to customize headers."
-msgstr "Du har ikke rettigheter til å endre sidetoppen."
-
#. translators: %s: link name
#. translators: %s: attachment title
#. translators: %s: post title
#. translators: %s: taxonomy term name
#. translators: %s: post title
#: wp-admin/includes/class-wp-links-list-table.php:190
-#: wp-admin/includes/class-wp-media-list-table.php:653
-#: wp-admin/includes/class-wp-media-list-table.php:702
-#: wp-admin/includes/class-wp-posts-list-table.php:1185
+#: wp-admin/includes/class-wp-media-list-table.php:655
+#: wp-admin/includes/class-wp-media-list-table.php:704
+#: wp-admin/includes/class-wp-posts-list-table.php:1213
#: wp-admin/includes/class-wp-terms-list-table.php:442
-#: wp-admin/includes/dashboard.php:567 wp-admin/includes/dashboard.php:853
+#: wp-admin/includes/dashboard.php:575 wp-admin/includes/dashboard.php:863
msgid "Edit “%s”"
msgstr "Endre «%s»"
#. translators: %s: attachment title
#. translators: %s: post title
-#: wp-admin/includes/class-wp-media-list-table.php:682
-#: wp-admin/includes/class-wp-media-list-table.php:741
-#: wp-admin/includes/class-wp-posts-list-table.php:1242
+#: wp-admin/includes/class-wp-media-list-table.php:684
+#: wp-admin/includes/class-wp-media-list-table.php:743
+#: wp-admin/includes/class-wp-posts-list-table.php:1270
msgid "View “%s”"
msgstr "Vis «%s»"
#: wp-admin/includes/class-wp-media-list-table.php:441
-#: wp-admin/includes/class-wp-posts-list-table.php:934
+#: wp-admin/includes/class-wp-posts-list-table.php:962
msgid "Unpublished"
msgstr "Upublisert"
@@ -8901,13 +8952,13 @@ msgstr "Upublisert"
msgid "%s from now"
msgstr "%s fra nå"
-#: wp-admin/includes/class-wp-media-list-table.php:504
+#: wp-admin/includes/class-wp-media-list-table.php:506
msgid "(Unattached)"
msgstr "(Frakoblet)"
#: wp-admin/includes/class-wp-media-list-table.php:154
-#: wp-admin/includes/class-wp-media-list-table.php:512
-#: wp-admin/includes/class-wp-media-list-table.php:692
+#: wp-admin/includes/class-wp-media-list-table.php:514
+#: wp-admin/includes/class-wp-media-list-table.php:694
msgid "Attach"
msgstr "Legg ved"
@@ -8951,46 +9002,46 @@ msgstr "Viser %s–%s av %s"
msgid "Bulk Actions"
msgstr "Massehandlinger"
-#: wp-admin/includes/class-wp-comments-list-table.php:294
-#: wp-admin/includes/class-wp-comments-list-table.php:559
-#: wp-admin/includes/class-wp-comments-list-table.php:565
-#: wp-admin/includes/dashboard.php:622
+#: wp-admin/includes/class-wp-comments-list-table.php:293
+#: wp-admin/includes/class-wp-comments-list-table.php:558
+#: wp-admin/includes/class-wp-comments-list-table.php:564
+#: wp-admin/includes/dashboard.php:630
msgid "Unapprove"
msgstr "Avslå"
-#: wp-admin/includes/class-wp-comments-list-table.php:296
-#: wp-admin/includes/class-wp-comments-list-table.php:561
-#: wp-admin/includes/class-wp-comments-list-table.php:564
-#: wp-admin/includes/dashboard.php:621
+#: wp-admin/includes/class-wp-comments-list-table.php:295
+#: wp-admin/includes/class-wp-comments-list-table.php:560
+#: wp-admin/includes/class-wp-comments-list-table.php:563
+#: wp-admin/includes/dashboard.php:629
msgid "Approve"
msgstr "Godkjenn"
#: wp-admin/comment.php:119 wp-admin/edit-form-comment.php:162
-#: wp-admin/includes/class-wp-comments-list-table.php:309
+#: wp-admin/includes/class-wp-comments-list-table.php:308
#: wp-admin/includes/class-wp-posts-list-table.php:407
-#: wp-admin/includes/media.php:1499 wp-admin/includes/meta-boxes.php:242
+#: wp-admin/includes/media.php:1501 wp-admin/includes/meta-boxes.php:242
msgid "Move to Trash"
msgstr "Flytt til papirkurven"
-#: wp-admin/includes/class-wp-comments-list-table.php:341
-#: wp-admin/includes/class-wp-posts-list-table.php:1551
+#: wp-admin/includes/class-wp-comments-list-table.php:340
+#: wp-admin/includes/class-wp-posts-list-table.php:1579
msgid "Pings"
msgstr "Ping"
-#: wp-admin/includes/class-wp-comments-list-table.php:355
+#: wp-admin/includes/class-wp-comments-list-table.php:354
#: wp-admin/includes/class-wp-links-list-table.php:115
#: wp-admin/includes/class-wp-media-list-table.php:177
-#: wp-admin/includes/class-wp-posts-list-table.php:454
+#: wp-admin/includes/class-wp-posts-list-table.php:482
msgid "Filter"
msgstr "Filter"
-#: wp-admin/includes/class-wp-comments-list-table.php:360
+#: wp-admin/includes/class-wp-comments-list-table.php:359
msgid "Empty Spam"
msgstr "Tøm spam"
-#: wp-admin/includes/class-wp-comments-list-table.php:360
+#: wp-admin/includes/class-wp-comments-list-table.php:359
#: wp-admin/includes/class-wp-media-list-table.php:181
-#: wp-admin/includes/class-wp-posts-list-table.php:458
+#: wp-admin/includes/class-wp-posts-list-table.php:486
msgid "Empty Trash"
msgstr "Tøm papirkurven"
@@ -9040,20 +9091,20 @@ msgstr "Tilpassede felt"
msgid "Discussion"
msgstr "Diskusjon"
-#: wp-admin/edit-form-advanced.php:308 wp-admin/edit-tag-form.php:127
-#: wp-admin/edit-tags.php:476
-#: wp-admin/includes/class-wp-posts-list-table.php:1361
+#: wp-admin/edit-form-advanced.php:308 wp-admin/edit-tag-form.php:133
+#: wp-admin/edit-tags.php:419
+#: wp-admin/includes/class-wp-posts-list-table.php:1389
#: wp-admin/includes/class-wp-terms-list-table.php:179
#: wp-admin/includes/class-wp-terms-list-table.php:600
#: wp-admin/includes/meta-boxes.php:740
msgid "Slug"
msgstr "Permalenke"
-#: wp-admin/edit-form-advanced.php:634 wp-admin/includes/ajax-actions.php:2249
+#: wp-admin/edit-form-advanced.php:634 wp-admin/includes/ajax-actions.php:2292
msgid "Last edited by %1$s on %2$s at %3$s"
msgstr "Sist endret av %1$s, %2$s kl. %3$s"
-#: wp-admin/edit-form-advanced.php:636 wp-admin/includes/ajax-actions.php:2251
+#: wp-admin/edit-form-advanced.php:636 wp-admin/includes/ajax-actions.php:2294
msgid "Last edited on %1$s at %2$s"
msgstr "Sist endret %1$s kl. %2$s"
@@ -9069,7 +9120,7 @@ msgstr "Navn:"
msgid "Email:"
msgstr "E-post:"
-#: wp-admin/themes.php:165 wp-admin/themes.php:167
+#: wp-admin/themes.php:166 wp-admin/themes.php:168
msgid "Visit site"
msgstr "Gå til nettsted"
@@ -9077,11 +9128,11 @@ msgstr "Gå til nettsted"
msgid "URL:"
msgstr "URL:"
-#: wp-admin/edit-tag-form.php:145 wp-admin/edit-tags.php:478
+#: wp-admin/edit-tag-form.php:151 wp-admin/edit-tags.php:421
msgid "The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens."
msgstr "«Permalenke» er den URL-vennlige versjonen av navnet. Den er vanligvis i små bokstaver og inneholder bare bokstaver, tall og bindestreker."
-#: wp-admin/edit-tag-form.php:177 wp-admin/edit-tags.php:528
+#: wp-admin/edit-tag-form.php:183 wp-admin/edit-tags.php:471
msgid "The description is not prominent by default; however, some themes may show it."
msgstr "Beskrivelsen vises ikke som standard, men noen temaer kan gjøre det."
@@ -9117,11 +9168,11 @@ msgstr "Eksempel: http://wordpress.org/ — ikke glem htt
msgid "This will be shown when someone hovers over the link in the blogroll, or optionally below the link."
msgstr "Dette vises når noen beveger muspekeren over lenkene i bloggrullen, eller under lenken."
-#: wp-admin/edit-tag-form.php:123 wp-admin/edit-tags.php:472
+#: wp-admin/edit-tag-form.php:129 wp-admin/edit-tags.php:415
msgid "The name is how it appears on your site."
msgstr "Navnet er hvordan det vises på nettstedet ditt."
-#: wp-admin/edit-tag-form.php:169 wp-admin/edit-tags.php:521
+#: wp-admin/edit-tag-form.php:175 wp-admin/edit-tags.php:464
msgid "Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional."
msgstr "Kategorier, i motsetning til stikkord, kan ha hierarki. Du kan ha en jazz kategori, med underkategorier for Bebop og storband. Helt valgfritt."
@@ -9147,8 +9198,8 @@ msgstr "Stikkord er slettet."
#: wp-admin/edit-tags.php:114 wp-admin/edit.php:140 wp-admin/post.php:255
#: wp-admin/themes.php:43 wp-admin/upload.php:159
-msgid "You are not allowed to delete this item."
-msgstr "Du har ikke lov til å slettet denne."
+msgid "Sorry, you are not allowed to delete this item."
+msgstr "Beklager, du har ikke lov til å slettet dette."
#: wp-admin/edit.php:269
msgid "%s post updated."
@@ -9171,7 +9222,7 @@ msgstr[0] "Alle (%s)"
msgstr[1] "Alle (%s)"
#: wp-admin/includes/class-wp-list-table.php:163
-#: wp-admin/includes/class-wp-screen.php:1235
+#: wp-admin/includes/class-wp-screen.php:1233
msgid "Excerpt View"
msgstr "Utdragsvisning"
@@ -9191,32 +9242,32 @@ msgstr "Dette formatet, som vi kaller WordPress eXtended RSS eller WXR, innehold
msgid "Download Export File"
msgstr "Last ned eksportfilen"
-#: wp-admin/import.php:80
+#: wp-admin/import.php:86
msgid "No importers are available."
msgstr "Ingen importører er tilgjengelige."
-#: wp-admin/includes/media.php:1495 wp-admin/upgrade.php:77
+#: wp-admin/includes/media.php:1497 wp-admin/upgrade.php:77
#: wp-admin/upgrade.php:111
msgid "Continue"
msgstr "Fortsett"
-#: wp-admin/export.php:169 wp-admin/includes/class-wp-users-list-table.php:319
+#: wp-admin/export.php:169 wp-admin/includes/class-wp-users-list-table.php:322
msgid "Posts"
msgstr "Innlegg"
-#: wp-admin/includes/import.php:159
+#: wp-admin/includes/import.php:164
msgid "Blogger"
msgstr "Gamle Blogger"
-#: wp-admin/includes/import.php:171
+#: wp-admin/includes/import.php:176
msgid "LiveJournal"
msgstr "LiveJournal"
-#: wp-admin/includes/import.php:177
+#: wp-admin/includes/import.php:182
msgid "Movable Type and TypePad"
msgstr "Movable Type og TypePad"
-#: wp-admin/includes/import.php:183
+#: wp-admin/includes/import.php:188
msgid "Blogroll"
msgstr "Bloggrull"
@@ -9229,12 +9280,12 @@ msgid "Could not insert link into the database"
msgstr "Kunne ikke sette inn lenke i databasen"
#. translators: %s: directory name
-#: wp-admin/includes/class-wp-filesystem-base.php:283
+#: wp-admin/includes/class-wp-filesystem-base.php:284
msgid "Changing to %s"
msgstr "Endrer til %s"
#. translators: %s: directory name
-#: wp-admin/includes/class-wp-filesystem-base.php:298
+#: wp-admin/includes/class-wp-filesystem-base.php:299
msgid "Found %s"
msgstr "Fant %s"
@@ -9298,214 +9349,211 @@ msgid "Public and Private keys incorrect for %s"
msgstr "Offentlige og private nøkler er feil for %s"
#. translators: %s: command
-#: wp-admin/includes/class-wp-filesystem-ssh2.php:205
+#: wp-admin/includes/class-wp-filesystem-ssh2.php:206
msgid "Unable to perform command: %s"
msgstr "Kunne ikke utføre kommandoen: %s"
-#: wp-admin/includes/class-wp-upgrader.php:127
-msgid "Invalid Data provided."
-msgstr "Ugyldig data angitt"
+#: wp-admin/includes/class-wp-upgrader.php:156
+msgid "Invalid data provided."
+msgstr "Ugyldig data angitt."
-#: wp-admin/includes/class-wp-upgrader.php:128
-#: wp-admin/includes/class-wp-upgrader.php:3017 wp-admin/includes/file.php:558
-#: wp-admin/includes/plugin.php:809 wp-admin/includes/theme.php:55
+#: wp-admin/includes/class-wp-automatic-updater.php:342
+#: wp-admin/includes/class-wp-upgrader.php:157 wp-admin/includes/file.php:570
+#: wp-admin/includes/plugin.php:816 wp-admin/includes/theme.php:59
msgid "Could not access filesystem."
msgstr "Kunne ikke lese filsystemet."
-#: wp-admin/includes/class-wp-upgrader.php:129 wp-admin/includes/plugin.php:812
-#: wp-admin/includes/theme.php:58
+#: wp-admin/includes/class-wp-upgrader.php:158 wp-admin/includes/plugin.php:819
+#: wp-admin/includes/theme.php:62
msgid "Filesystem error."
msgstr "Filsystem-feil."
-#: wp-admin/includes/class-wp-upgrader.php:130
-msgid "Unable to locate WordPress Root directory."
-msgstr "Klarte ikke å finne WordPress toppnivåmappen."
+#: wp-admin/includes/class-wp-upgrader.php:159
+msgid "Unable to locate WordPress root directory."
+msgstr "Klarte ikke å finne toppnivåmappen til WordPress."
-#: wp-admin/includes/class-wp-upgrader.php:131
-msgid "Unable to locate WordPress Content directory (wp-content)."
-msgstr "Klarte ikke å finne innholdsmappen til WordPress (wp-content)."
+#: wp-admin/includes/class-wp-upgrader.php:160
+msgid "Unable to locate WordPress content directory (wp-content)."
+msgstr "Klarte ikke å finne WordPress-mappen for innhold (wp-content)."
-#: wp-admin/includes/class-wp-upgrader.php:132 wp-admin/includes/plugin.php:817
-msgid "Unable to locate WordPress Plugin directory."
+#: wp-admin/includes/class-wp-upgrader.php:161 wp-admin/includes/plugin.php:824
+msgid "Unable to locate WordPress plugin directory."
msgstr "Klarte ikke å finne WordPress-mappen for utvidelser (wp-content/plugins)."
-#: wp-admin/includes/class-wp-upgrader.php:133
-msgid "Unable to locate WordPress Theme directory."
-msgstr "Klarte ikke å finne WordPress tema mappen."
-
#. translators: %s: directory name
-#: wp-admin/includes/class-wp-upgrader.php:135
+#: wp-admin/includes/class-wp-upgrader.php:164
msgid "Unable to locate needed folder (%s)."
msgstr "Klarte ikke å finne obligatorisk mappe (%s)."
-#: wp-admin/includes/class-wp-upgrader.php:137
+#: wp-admin/includes/class-wp-upgrader.php:166
msgid "Download failed."
msgstr "Nedlasting feilet."
-#: wp-admin/includes/class-wp-upgrader.php:138
+#: wp-admin/includes/class-wp-upgrader.php:167
msgid "Installing the latest version…"
msgstr "Installerer den nyeste versjonen…"
-#: wp-admin/includes/class-wp-upgrader.php:140
+#: wp-admin/includes/class-wp-upgrader.php:169
msgid "Destination folder already exists."
msgstr "Målmappen finnes allerede."
-#: wp-admin/includes/class-wp-upgrader.php:141 wp-admin/includes/file.php:677
-#: wp-admin/includes/file.php:783 wp-admin/includes/file.php:836
-#: wp-admin/includes/update-core.php:1168
+#: wp-admin/includes/class-wp-upgrader.php:170 wp-admin/includes/file.php:691
+#: wp-admin/includes/file.php:797 wp-admin/includes/file.php:850
+#: wp-admin/includes/update-core.php:1170
msgid "Could not create directory."
msgstr "Kunne ikke lage mappe."
-#: wp-admin/includes/file.php:627 wp-admin/includes/file.php:735
+#: wp-admin/includes/file.php:638 wp-admin/includes/file.php:749
msgid "Incompatible Archive."
msgstr "Ikke kompatibelt arkiv."
-#: wp-admin/includes/class-wp-upgrader.php:145
-#: wp-admin/includes/update-core.php:932
+#: wp-admin/includes/class-wp-upgrader.php:174
+#: wp-admin/includes/update-core.php:934
msgid "Enabling Maintenance mode…"
msgstr "Aktiverer vedlikeholdstilstand…"
-#: wp-admin/includes/class-wp-upgrader.php:146
-#: wp-admin/includes/update-core.php:1015
+#: wp-admin/includes/class-wp-upgrader.php:175
+#: wp-admin/includes/update-core.php:1017
msgid "Disabling Maintenance mode…"
msgstr "Deaktiverer vedlikeholdstilstand…"
-#: wp-admin/includes/class-wp-upgrader.php:858
+#: wp-admin/includes/class-plugin-upgrader.php:50
msgid "The plugin is at the latest version."
msgstr "Denne utvidelsen er oppdatert til nyeste versjon."
-#: wp-admin/includes/class-wp-upgrader.php:860
-#: wp-admin/includes/class-wp-upgrader.php:1326
-#: wp-admin/includes/class-wp-upgrader.php:2236
+#: wp-admin/includes/class-core-upgrader.php:33
+#: wp-admin/includes/class-plugin-upgrader.php:52
+#: wp-admin/includes/class-theme-upgrader.php:51
msgid "Downloading update from %s…"
msgstr "Laster ned oppdatering fra %s…"
-#: wp-admin/includes/class-wp-upgrader.php:861
-#: wp-admin/includes/class-wp-upgrader.php:1327
-#: wp-admin/includes/class-wp-upgrader.php:1983
-#: wp-admin/includes/class-wp-upgrader.php:2237
+#: wp-admin/includes/class-core-upgrader.php:34
+#: wp-admin/includes/class-language-pack-upgrader.php:120
+#: wp-admin/includes/class-plugin-upgrader.php:53
+#: wp-admin/includes/class-theme-upgrader.php:52
msgid "Unpacking the update…"
msgstr "Pakker ut oppdateringen…"
-#: wp-admin/includes/class-wp-upgrader.php:862
+#: wp-admin/includes/class-plugin-upgrader.php:54
msgid "Removing the old version of the plugin…"
msgstr "Fjerner den gamle versjonen av utvidelsen…"
-#: wp-admin/includes/class-wp-upgrader.php:863
+#: wp-admin/includes/class-plugin-upgrader.php:55
msgid "Could not remove the old plugin."
msgstr "Kunne ikke fjerne den gamle utvidelsen."
-#: wp-admin/includes/class-wp-upgrader.php:876
-#: wp-admin/includes/class-wp-upgrader.php:1341
+#: wp-admin/includes/class-plugin-upgrader.php:68
+#: wp-admin/includes/class-theme-upgrader.php:66
msgid "Install package not available."
msgstr "Installeringspakke ikke tilgjengelig."
-#: wp-admin/includes/class-wp-upgrader.php:877
-#: wp-admin/includes/class-wp-upgrader.php:1342
+#: wp-admin/includes/class-plugin-upgrader.php:69
+#: wp-admin/includes/class-theme-upgrader.php:67
msgid "Downloading install package from %s…"
msgstr "Laster ned installasjonspakke fra (%s)…"
-#: wp-admin/includes/class-wp-upgrader.php:878
-#: wp-admin/includes/class-wp-upgrader.php:1343
+#: wp-admin/includes/class-plugin-upgrader.php:70
+#: wp-admin/includes/class-theme-upgrader.php:68
msgid "Unpacking the package…"
msgstr "Pakker ut pakken…"
-#: wp-admin/includes/class-wp-upgrader.php:879
+#: wp-admin/includes/class-plugin-upgrader.php:71
msgid "Installing the plugin…"
msgstr "Installerer utvidelsen…"
-#: wp-admin/includes/class-wp-upgrader.php:881
+#: wp-admin/includes/class-plugin-upgrader.php:73
msgid "Plugin install failed."
msgstr "Installering av utvidelsen feilet."
-#: wp-admin/includes/class-wp-upgrader.php:882
+#: wp-admin/includes/class-plugin-upgrader.php:74
msgid "Plugin installed successfully."
msgstr "Utvidelsen ble installert."
-#: wp-admin/includes/class-wp-upgrader.php:1324
+#: wp-admin/includes/class-theme-upgrader.php:49
msgid "The theme is at the latest version."
msgstr "Dette temaet er nyeste versjon."
-#: wp-admin/includes/class-wp-upgrader.php:1328
+#: wp-admin/includes/class-theme-upgrader.php:53
msgid "Removing the old version of the theme…"
msgstr "Fjerner den gamle versjonen av temaet…"
-#: wp-admin/includes/class-wp-upgrader.php:1329
+#: wp-admin/includes/class-theme-upgrader.php:54
msgid "Could not remove the old theme."
msgstr "Kunne ikke fjerne det gamle temaet."
-#: wp-admin/includes/class-wp-upgrader.php:1344
+#: wp-admin/includes/class-theme-upgrader.php:69
msgid "Installing the theme…"
msgstr "Installerer temaet…"
-#: wp-admin/includes/class-wp-upgrader.php:1346
+#: wp-admin/includes/class-theme-upgrader.php:71
msgid "Theme install failed."
msgstr "Installer tema feilet."
-#: wp-admin/includes/class-wp-upgrader.php:1347
+#: wp-admin/includes/class-theme-upgrader.php:72
msgid "Theme installed successfully."
msgstr "Tema installert med suksess."
-#: wp-admin/includes/class-wp-upgrader.php:2233
+#: wp-admin/includes/class-core-upgrader.php:30
msgid "WordPress is at the latest version."
msgstr "WordPress er nyeste versjon."
-#: wp-admin/includes/class-wp-upgrader.php:2238
+#: wp-admin/includes/class-core-upgrader.php:35
msgid "Could not copy files."
msgstr "Kunne ikke kopiere filer."
-#: wp-admin/includes/class-wp-upgrader-skins.php:234
-#: wp-admin/includes/class-wp-upgrader-skins.php:571
+#: wp-admin/includes/class-plugin-installer-skin.php:57
+#: wp-admin/includes/class-plugin-upgrader-skin.php:52
msgid "Activate Plugin"
msgstr "Aktiver utvidelse"
-#: wp-admin/includes/class-wp-upgrader-skins.php:235
-#: wp-admin/includes/class-wp-upgrader-skins.php:452
-#: wp-admin/includes/class-wp-upgrader-skins.php:583
+#: wp-admin/includes/class-bulk-plugin-upgrader-skin.php:49
+#: wp-admin/includes/class-plugin-installer-skin.php:71
+#: wp-admin/includes/class-plugin-upgrader-skin.php:53
msgid "Return to Plugins page"
msgstr "Gå tilbake til siden med utvidelser"
-#: wp-admin/includes/class-wp-upgrader-skins.php:555
+#: wp-admin/includes/class-plugin-installer-skin.php:41
msgid "Successfully installed the plugin %s %s."
msgstr "Installerte utvidelsen %s %s."
-#: wp-admin/includes/class-wp-upgrader-skins.php:581
+#: wp-admin/includes/class-plugin-installer-skin.php:67
+#: wp-admin/includes/class-plugin-installer-skin.php:69
msgid "Return to Plugin Installer"
msgstr "Gå tilbake til installering av utvidelser"
#. translators: 1: theme name, 2: version
-#: wp-admin/includes/class-wp-upgrader.php:1349
+#: wp-admin/includes/class-theme-upgrader.php:74
msgid "Successfully installed the theme %1$s %2$s."
msgstr "Suksess: %1$s %2$s temaet er installert."
#. translators: %s: post title
-#: wp-admin/includes/class-wp-posts-list-table.php:1233
+#: wp-admin/includes/class-wp-posts-list-table.php:1261
#: wp-admin/includes/class-wp-theme-install-list-table.php:256
msgid "Preview “%s”"
msgstr "Forhåndsvis «%s»"
+#: wp-admin/includes/class-theme-installer-skin.php:71
+#: wp-admin/includes/class-theme-upgrader-skin.php:61
#: wp-admin/includes/class-wp-themes-list-table.php:187
-#: wp-admin/includes/class-wp-upgrader-skins.php:670
-#: wp-admin/includes/class-wp-upgrader-skins.php:749
msgid "Activate “%s”"
msgstr "Aktiver «%s»"
-#: wp-admin/includes/class-wp-upgrader-skins.php:676
+#: wp-admin/includes/class-theme-installer-skin.php:77
msgid "Return to Theme Installer"
msgstr "Gå tilbake til temainstallasjon"
-#: wp-admin/includes/class-wp-upgrader-skins.php:504
-#: wp-admin/includes/class-wp-upgrader-skins.php:678
-#: wp-admin/includes/class-wp-upgrader-skins.php:756
+#: wp-admin/includes/class-bulk-theme-upgrader-skin.php:49
+#: wp-admin/includes/class-theme-installer-skin.php:79
+#: wp-admin/includes/class-theme-upgrader-skin.php:68
msgid "Return to Themes page"
msgstr "Gå tilbake til temasiden"
-#: wp-admin/includes/class-wp-upgrader.php:2619
-#: wp-admin/includes/class-wp-upgrader.php:2653
+#: wp-admin/includes/class-file-upload-upgrader.php:60
+#: wp-admin/includes/class-file-upload-upgrader.php:94
msgid "Please select a file"
msgstr "Vennligst velg en fil"
-#: wp-admin/includes/file.php:380
+#: wp-admin/includes/file.php:386
msgid "The uploaded file could not be moved to %s."
msgstr "Filen som ble lastet opp kunne ikke flyttes til %s."
@@ -9513,7 +9561,7 @@ msgstr "Filen som ble lastet opp kunne ikke flyttes til %s."
msgid "Right Now"
msgstr "Akkurat nå"
-#: wp-admin/includes/dashboard.php:1126
+#: wp-admin/includes/dashboard.php:1136
msgid "Other WordPress News"
msgstr "Andre WordPress-nyheter"
@@ -9521,7 +9569,7 @@ msgstr "Andre WordPress-nyheter"
msgid "View all"
msgstr "Vis alle"
-#: wp-admin/includes/dashboard.php:159
+#: wp-admin/includes/dashboard.php:167
msgid "Configure"
msgstr "Tilpass"
@@ -9533,67 +9581,67 @@ msgstr "Kommentar"
msgid "Press This"
msgstr "Skriv om dette"
-#: wp-admin/includes/class-wp-press-this.php:1512
+#: wp-admin/includes/class-wp-press-this.php:1484
#: wp-admin/includes/meta-boxes.php:261 wp-admin/includes/meta-boxes.php:262
msgid "Submit for Review"
msgstr "Send til gjennomgang"
-#: wp-admin/includes/class-wp-comments-list-table.php:561
-#: wp-admin/includes/class-wp-comments-list-table.php:564
-#: wp-admin/includes/dashboard.php:621
+#: wp-admin/includes/class-wp-comments-list-table.php:560
+#: wp-admin/includes/class-wp-comments-list-table.php:563
+#: wp-admin/includes/dashboard.php:629
msgid "Approve this comment"
msgstr "Godkjenn denne kommentaren"
-#: wp-admin/includes/class-wp-comments-list-table.php:559
-#: wp-admin/includes/class-wp-comments-list-table.php:565
-#: wp-admin/includes/dashboard.php:622
+#: wp-admin/includes/class-wp-comments-list-table.php:558
+#: wp-admin/includes/class-wp-comments-list-table.php:564
+#: wp-admin/includes/dashboard.php:630
msgid "Unapprove this comment"
msgstr "Avslå denne kommentaren"
-#: wp-admin/includes/class-wp-comments-list-table.php:591
-#: wp-admin/includes/dashboard.php:624
+#: wp-admin/includes/class-wp-comments-list-table.php:590
+#: wp-admin/includes/dashboard.php:632
msgid "Reply to this comment"
msgstr "Svar på denne kommentaren"
-#: wp-admin/includes/class-wp-comments-list-table.php:569
-#: wp-admin/includes/dashboard.php:625
+#: wp-admin/includes/class-wp-comments-list-table.php:568
+#: wp-admin/includes/dashboard.php:633
msgid "Mark this comment as spam"
msgstr "Merk denne kommentaren som spam"
#. translators: mark as spam link
-#: wp-admin/includes/class-wp-comments-list-table.php:569
-#: wp-admin/includes/dashboard.php:625
+#: wp-admin/includes/class-wp-comments-list-table.php:568
+#: wp-admin/includes/dashboard.php:633
msgctxt "verb"
msgid "Spam"
msgstr "Spam"
-#: wp-admin/includes/class-wp-comments-list-table.php:581
-#: wp-admin/includes/dashboard.php:630
+#: wp-admin/includes/class-wp-comments-list-table.php:580
+#: wp-admin/includes/dashboard.php:638
msgid "Move this comment to the Trash"
msgstr "Flytt denne kommentaren til papirkurven"
#. translators: 1: comment author, 2: post link, 3: notification if the comment
#. is pending
-#: wp-admin/includes/dashboard.php:677
+#: wp-admin/includes/dashboard.php:687
msgid "From %1$s on %2$s %3$s"
msgstr "Fra %1$s til %2$s %3$s"
-#: wp-admin/includes/dashboard.php:680 wp-admin/includes/dashboard.php:687
-#: wp-admin/includes/dashboard.php:717 wp-admin/includes/dashboard.php:724
+#: wp-admin/includes/dashboard.php:690 wp-admin/includes/dashboard.php:697
+#: wp-admin/includes/dashboard.php:727 wp-admin/includes/dashboard.php:734
msgid "[Pending]"
msgstr "[Ventende]"
#. translators: 1: type of comment, 2: notification if the comment is pending
-#: wp-admin/includes/dashboard.php:722
+#: wp-admin/includes/dashboard.php:732
msgctxt "dashboard"
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: wp-admin/includes/dashboard.php:958
+#: wp-admin/includes/dashboard.php:968
msgid "Loading…"
msgstr "Laster…"
-#: wp-admin/includes/dashboard.php:958
+#: wp-admin/includes/dashboard.php:968
msgid "This widget requires JavaScript."
msgstr "Denne widgeten krever JavaScript."
@@ -9601,11 +9649,11 @@ msgstr "Denne widgeten krever JavaScript."
msgid "Main Index Template"
msgstr "Hovedmal"
-#: wp-admin/includes/file.php:49
+#: wp-admin/includes/file.php:55
msgid "RTL Stylesheet"
msgstr "RTL stilsett"
-#: wp-admin/includes/file.php:57
+#: wp-admin/includes/file.php:63
msgid "Popup Comments"
msgstr "Kommentarer i sprettoppvindu"
@@ -9617,12 +9665,6 @@ msgstr "Kategorimal"
msgid "Page Template"
msgstr "Sidemal"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:89
-#: wp-admin/includes/class-wp-theme-install-list-table.php:62
-#: wp-admin/includes/file.php:32
-msgid "Search Results"
-msgstr "Søkeresultater"
-
#: wp-admin/includes/file.php:21
msgid "Search Form"
msgstr "Søkeskjema"
@@ -9663,121 +9705,121 @@ msgstr "Lyd vedleggsmal"
msgid "Application Attachment Template"
msgstr "Applikasjon vedleggsmal"
-#: wp-admin/includes/file.php:51
+#: wp-admin/includes/file.php:57
msgid "my-hacks.php (legacy hacks support)"
msgstr "my-hacks.php (støtte for gamle hacks)"
-#: wp-admin/includes/file.php:52
+#: wp-admin/includes/file.php:58
msgid ".htaccess (for rewrite rules )"
msgstr ".htaccess (for omskrivningsregler)"
-#: wp-admin/includes/file.php:55
+#: wp-admin/includes/file.php:61
msgid "Comments Template"
msgstr "Kommentarmal"
-#: wp-admin/includes/file.php:56
+#: wp-admin/includes/file.php:62
msgid "Popup Comments Template"
msgstr "Mal for sprettoppkommentarer"
-#: wp-admin/includes/file.php:290
+#: wp-admin/includes/file.php:296
msgid "The uploaded file was only partially uploaded."
msgstr "Filen ble bare delvis lastet opp."
-#: wp-admin/includes/file.php:291
+#: wp-admin/includes/file.php:297
msgid "No file was uploaded."
msgstr "Ingen fil ble lastet opp."
-#: wp-admin/includes/file.php:293
+#: wp-admin/includes/file.php:299
msgid "Missing a temporary folder."
msgstr "Mangler en midlertidig mappe."
-#: wp-admin/includes/file.php:294
+#: wp-admin/includes/file.php:300
msgid "Failed to write file to disk."
msgstr "Klarte ikke å skrive til disken."
-#: wp-admin/includes/file.php:295
+#: wp-admin/includes/file.php:301
msgid "File upload stopped by extension."
msgstr "Opplasting av fil ble stoppet av utvidelse."
-#: wp-admin/includes/file.php:309
+#: wp-admin/includes/file.php:315
msgid "Invalid form submission."
msgstr "Ugyldig sending av skjemaet."
-#: wp-admin/includes/file.php:322 wp-admin/includes/import.php:84
+#: wp-admin/includes/file.php:328 wp-admin/includes/import.php:84
msgid "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini."
msgstr "Filen er tom. Vennligst last opp noe mer innholdsrikt. Denne feilen kan også komme av at opplasting er deaktivert i php.ini eller at post_max_size er definert som mindre enn upload_max_filesize i php.ini."
-#: wp-admin/includes/file.php:330
+#: wp-admin/includes/file.php:336
msgid "Specified file failed upload test."
msgstr "Filen du angav strøk på opplastingstesten."
-#: wp-admin/includes/file.php:484
+#: wp-admin/includes/file.php:494
msgid "Invalid URL Provided."
msgstr "Ugyldig URL angitt."
-#: wp-admin/includes/file.php:488
+#: wp-admin/includes/file.php:500
msgid "Could not create Temporary file."
msgstr "Kunne ikke lage midlertidig fil."
-#: wp-admin/includes/file.php:633 wp-admin/includes/file.php:684
+#: wp-admin/includes/file.php:644 wp-admin/includes/file.php:698
msgid "Could not retrieve file from archive."
msgstr "Kunne ikke hente fil fra arkivet."
-#: wp-admin/includes/file.php:694
+#: wp-admin/includes/file.php:708
msgid "Could not extract file from archive."
msgstr "Kunne ikke pakke ut fil fra arkivet."
-#: wp-admin/includes/file.php:697 wp-admin/includes/file.php:796
-#: wp-admin/includes/file.php:831 wp-admin/includes/update-core.php:1052
-#: wp-admin/includes/update-core.php:1163
+#: wp-admin/includes/file.php:711 wp-admin/includes/file.php:810
+#: wp-admin/includes/file.php:845 wp-admin/includes/update-core.php:1054
+#: wp-admin/includes/update-core.php:1165
msgid "Could not copy file."
msgstr "Kunne ikke kopiere fil."
-#: wp-admin/includes/file.php:738
+#: wp-admin/includes/file.php:752
msgid "Empty archive."
msgstr "Tomt arkiv."
-#: wp-admin/includes/file.php:1139
+#: wp-admin/includes/file.php:1153
msgid "FTP"
msgstr "FTP"
-#: wp-admin/includes/file.php:1141
+#: wp-admin/includes/file.php:1155
msgid "FTPS (SSL)"
msgstr "FTPS (SSL)"
-#: wp-admin/includes/file.php:1143
+#: wp-admin/includes/file.php:1157
msgid "SSH2"
msgstr "SSH2"
-#: wp-admin/includes/file.php:1181
+#: wp-admin/includes/file.php:1183
msgid "Connection Information"
msgstr "Tilkoblingsinformasjon"
-#: wp-admin/includes/file.php:1203
+#: wp-admin/includes/file.php:1205
msgid "Hostname"
msgstr "Servernavn"
-#: wp-admin/includes/file.php:1221
+#: wp-admin/includes/file.php:1242
msgid "Authentication Keys"
msgstr "Autentiseringsnøkler"
-#: wp-admin/includes/file.php:1223
+#: wp-admin/includes/file.php:1244
msgid "Public Key:"
msgstr "Offentlig nøkkel:"
-#: wp-admin/includes/file.php:1227
+#: wp-admin/includes/file.php:1248
msgid "Private Key:"
msgstr "Privat nøkkel:"
-#: wp-admin/includes/file.php:1234
+#: wp-admin/includes/file.php:1222
msgid "Connection Type"
msgstr "Tilkoblingstype"
-#: wp-admin/includes/file.php:1252
+#: wp-admin/includes/file.php:1263
msgid "Proceed"
msgstr "Fortsett"
-#: wp-admin/includes/image-edit.php:26 wp-admin/includes/image-edit.php:758
+#: wp-admin/includes/image-edit.php:26 wp-admin/includes/image-edit.php:756
msgid "Image data does not exist. Please re-upload the image."
msgstr "Bildedata finnes ikke. Vennligst last opp bilde på nytt."
@@ -9866,39 +9908,39 @@ msgstr "Alle bildestørrelser"
msgid "All sizes except thumbnail"
msgstr "Alle størrelser unntatt miniatyrbilde"
-#: wp-admin/includes/image-edit.php:633
+#: wp-admin/includes/image-edit.php:631
msgid "Cannot load image metadata."
msgstr "Kan ikke laste bilde metadata."
-#: wp-admin/includes/image-edit.php:689
+#: wp-admin/includes/image-edit.php:687
msgid "Cannot save image metadata."
msgstr "Kan ikke lagre metadata for bilde."
-#: wp-admin/includes/image-edit.php:694
+#: wp-admin/includes/image-edit.php:692
msgid "Image metadata is inconsistent."
msgstr "Metadata for bilde er ikke konsekvent."
-#: wp-admin/includes/image-edit.php:696
+#: wp-admin/includes/image-edit.php:694
msgid "Image restored successfully."
msgstr "Bilde gjenopprettet."
-#: wp-admin/includes/image-edit.php:719
+#: wp-admin/includes/image-edit.php:717
msgid "Unable to create new image."
msgstr "Kunne ikke lage nytt bilde."
-#: wp-admin/includes/image-edit.php:742
+#: wp-admin/includes/image-edit.php:740
msgid "Error while saving the scaled image. Please reload the page and try again."
msgstr "En feil oppstod under lagring av skalert bilde. Vennligst last siden på nytt og prøv igjen."
-#: wp-admin/includes/image-edit.php:750
+#: wp-admin/includes/image-edit.php:748
msgid "Nothing to save, the image has not changed."
msgstr "Bildet har ikke blitt endret. Ingenting å lagre."
-#: wp-admin/includes/image-edit.php:793
+#: wp-admin/includes/image-edit.php:791
msgid "Unable to save the image."
msgstr "Kunne ikke lagre bildet."
-#: wp-admin/includes/image-edit.php:891
+#: wp-admin/includes/image-edit.php:904
msgid "Image saved"
msgstr "Bilde lagret"
@@ -9922,125 +9964,125 @@ msgstr "Galleri (%s)"
msgid "Uploads"
msgstr "Opplastinger"
-#: wp-admin/includes/media.php:455 wp-admin/includes/template.php:1580
+#: wp-admin/includes/media.php:455 wp-admin/includes/template.php:1588
#: wp-admin/install.php:80 wp-admin/maint/repair.php:26
-#: wp-admin/setup-config.php:102 wp-admin/upgrade.php:71
+#: wp-admin/setup-config.php:104 wp-admin/upgrade.php:71
msgid "WordPress"
msgstr "WordPress"
-#: wp-admin/includes/media.php:1070 wp-admin/includes/media.php:1227
+#: wp-admin/includes/media.php:1072 wp-admin/includes/media.php:1229
msgid "File URL"
msgstr "URL til fil"
-#: wp-admin/includes/media.php:1272 wp-admin/includes/media.php:2579
+#: wp-admin/includes/media.php:1274 wp-admin/includes/media.php:2581
msgid "Alt text for the image, e.g. “The Mona Lisa”"
msgstr "Alternativ tekst for bildet, f.eks. «Skrik av Edvard Munch»"
-#: wp-admin/includes/media.php:1149
+#: wp-admin/includes/media.php:1151
msgid "Empty Title filled from filename."
msgstr "Tom tittel utfylt fra filnavn."
-#: wp-admin/includes/class-wp-posts-list-table.php:1493
-#: wp-admin/includes/media.php:1223 wp-admin/includes/media.php:2235
+#: wp-admin/includes/class-wp-posts-list-table.php:1521
+#: wp-admin/includes/media.php:1225 wp-admin/includes/media.php:2237
#: wp-admin/includes/meta-boxes.php:853 wp-admin/includes/meta-boxes.php:854
msgid "Order"
msgstr "Rekkefølge"
-#: wp-admin/includes/media.php:1231
+#: wp-admin/includes/media.php:1233
msgid "Location of the uploaded file."
msgstr "URL til den opplastede filen."
-#: wp-admin/includes/media.php:1462
+#: wp-admin/includes/media.php:1464
msgid "Upload date:"
msgstr "Opplastet dato:"
-#: wp-admin/includes/media.php:1483 wp-admin/includes/media.php:2609
-#: wp-admin/includes/media.php:2615
+#: wp-admin/includes/media.php:1485 wp-admin/includes/media.php:2611
+#: wp-admin/includes/media.php:2617
msgid "Insert into Post"
msgstr "Sett inn i innlegg"
-#: wp-admin/includes/media.php:2007
+#: wp-admin/includes/media.php:2009
msgid "Add media files from your computer"
msgstr "Legg til mediafiler fra din datamaskin"
-#: wp-admin/includes/media.php:2034 wp-admin/includes/media.php:2245
-#: wp-admin/includes/media.php:2512
+#: wp-admin/includes/media.php:2036 wp-admin/includes/media.php:2247
+#: wp-admin/includes/media.php:2514
msgid "Save all changes"
msgstr "Lagre alle endringer"
-#: wp-admin/includes/media.php:2220
+#: wp-admin/includes/media.php:2222
msgid "All Tabs:"
msgstr "Alle faner:"
-#: wp-admin/includes/media.php:2224
+#: wp-admin/includes/media.php:2226
msgid "Sort Order:"
msgstr "Sorteringsrekkefølge:"
-#: wp-admin/includes/media.php:2225 wp-admin/includes/media.php:2293
+#: wp-admin/includes/media.php:2227 wp-admin/includes/media.php:2295
msgid "Ascending"
msgstr "Stigende"
-#: wp-admin/includes/media.php:2226 wp-admin/includes/media.php:2296
+#: wp-admin/includes/media.php:2228 wp-admin/includes/media.php:2298
msgid "Descending"
msgstr "Synkende"
-#: wp-admin/includes/media.php:2257
+#: wp-admin/includes/media.php:2259
msgid "Link thumbnails to:"
msgstr "Lenk miniatyrbilder til:"
-#: wp-admin/includes/media.php:2262
+#: wp-admin/includes/media.php:2264
msgid "Image File"
msgstr "Bildefil"
-#: wp-admin/includes/media.php:2272
+#: wp-admin/includes/media.php:2274
msgid "Order images by:"
msgstr "Sorter bilder etter:"
-#: wp-admin/includes/media.php:2277
+#: wp-admin/includes/media.php:2279
msgid "Menu order"
msgstr "Menyrekkefølge"
-#: wp-admin/includes/media.php:2279
+#: wp-admin/includes/media.php:2281
msgid "Date/Time"
msgstr "Dato/tid"
-#: wp-admin/includes/media.php:2280
+#: wp-admin/includes/media.php:2282
msgid "Random"
msgstr "Tilfeldig"
-#: wp-admin/includes/media.php:2288
+#: wp-admin/includes/media.php:2290
msgid "Order:"
msgstr "Rekkefølge:"
-#: wp-admin/includes/media.php:2303
+#: wp-admin/includes/media.php:2305
msgid "Gallery columns:"
msgstr "Galleri kolonner:"
-#: wp-admin/includes/media.php:2324
+#: wp-admin/includes/media.php:2326
msgid "Update gallery settings"
msgstr "Oppdater galleri innstillinger"
-#: wp-admin/includes/media.php:2408
+#: wp-admin/includes/media.php:2410
msgid "All Types"
msgstr "Alle typer"
-#: wp-admin/includes/media.php:2482
+#: wp-admin/includes/media.php:2484
msgid "Filter »"
msgstr "Filter »"
-#: wp-admin/includes/media.php:2533
+#: wp-admin/includes/media.php:2535
msgid "Image Caption"
msgstr "Undertittel for bilde"
-#: wp-admin/includes/media.php:2598
+#: wp-admin/includes/media.php:2600
msgid "Link Image To:"
msgstr "Lenk bilde til:"
-#: wp-admin/includes/media.php:2603
+#: wp-admin/includes/media.php:2605
msgid "Link to image"
msgstr "Lenke til bilde"
-#: wp-admin/includes/media.php:2572
+#: wp-admin/includes/media.php:2574
msgid "Link text, e.g. “Ransom Demands (PDF)”"
msgstr "Lenketekst, f.eks. «Fjellvettreglene (PDF)»"
@@ -10058,7 +10100,7 @@ msgid "Visibility:"
msgstr "Synlighet:"
#: wp-admin/includes/meta-boxes.php:136 wp-admin/includes/meta-boxes.php:159
-#: wp-admin/includes/template.php:1682
+#: wp-admin/includes/template.php:1698
msgid "Password protected"
msgstr "Passordbeskyttet"
@@ -10087,7 +10129,7 @@ msgid "Publish on: %1$s"
msgstr "Publiser: %1$s"
#: wp-admin/includes/meta-boxes.php:482 wp-admin/includes/meta-boxes.php:944
-#: wp-admin/includes/nav-menu.php:653
+#: wp-admin/includes/nav-menu.php:673
msgid "Most Used"
msgstr "Mest brukt"
@@ -10115,16 +10157,16 @@ msgstr "Skill flere URL-er med mellomrom"
msgid "Show comments"
msgstr "Vis kommentarer"
-#: wp-admin/includes/class-wp-posts-list-table.php:1458
+#: wp-admin/includes/class-wp-posts-list-table.php:1486
#: wp-admin/includes/meta-boxes.php:814 wp-admin/includes/meta-boxes.php:815
msgid "Parent"
msgstr "Forelder"
-#: wp-admin/includes/class-wp-posts-list-table.php:1464
+#: wp-admin/includes/class-wp-posts-list-table.php:1492
msgid "Main Page (no parent)"
msgstr "Hovedside (ingen forelder)"
-#: wp-admin/includes/class-wp-posts-list-table.php:1510
+#: wp-admin/includes/class-wp-posts-list-table.php:1538
#: wp-admin/includes/meta-boxes.php:846
msgid "Default Template"
msgstr "Standardmal"
@@ -10322,208 +10364,190 @@ msgstr "Vurdering"
msgid "(Leave at 0 for no rating.)"
msgstr "(Velg 0 for ingen vurdering.)"
-#: wp-admin/includes/menu.php:342 wp-admin/my-sites.php:16
-msgid "You do not have sufficient permissions to access this page."
-msgstr "Du har ikke nok rettigheter til å få tilgang til denne siden."
-
-#: wp-admin/includes/plugin-install.php:217
+#: wp-admin/includes/plugin-install.php:218
msgid "Popular tags"
msgstr "Populære stikkord"
-#: wp-admin/includes/plugin-install.php:218
+#: wp-admin/includes/plugin-install.php:219
msgid "You may also browse based on the most popular tags in the Plugin Directory:"
msgstr "Du kan også lete basert på de mest populære stikkordene i utvidelseskatalogen på WordPress.org:"
-#: wp-admin/includes/plugin-install.php:260
-#: wp-admin/includes/plugin-install.php:272
-#: wp-admin/includes/plugin-install.php:275
+#: wp-admin/includes/plugin-install.php:265
+#: wp-admin/includes/plugin-install.php:266
+#: wp-admin/includes/plugin-install.php:268
msgid "Search Plugins"
msgstr "Søk etter utvidelser"
-#: wp-admin/includes/plugin-install.php:286
+#: wp-admin/includes/plugin-install.php:279
msgid "If you have a plugin in a .zip format, you may install it by uploading it here."
msgstr "Hvis du har en utvidelse i .zip-format kan du installere den ved å laste opp her."
-#: wp-admin/includes/plugin-install.php:289
+#: wp-admin/includes/plugin-install.php:282
msgid "Plugin zip file"
msgstr "Zip-fil med utvidelse"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:462
-#: wp-admin/includes/class-wp-theme-install-list-table.php:286
-#: wp-admin/includes/plugin-install.php:291
-#: wp-admin/includes/plugin-install.php:658
-#: wp-admin/includes/theme-install.php:148
-msgid "Install Now"
-msgstr "Installer nå"
-
#: wp-admin/includes/class-wp-plugin-install-list-table.php:238
msgid "No plugins match your request."
msgstr "Ingen utvidelser tilfredsstiller din forespørsel."
-#: wp-admin/includes/plugin-install.php:577
+#: wp-admin/includes/plugin-install.php:579
msgid "(based on %s rating)"
msgid_plural "(based on %s ratings)"
msgstr[0] "(basert på %s vurdering)"
msgstr[1] "(basert på %s vurderinger)"
-#: wp-admin/includes/plugin-install.php:496 wp-admin/update.php:123
+#: wp-admin/includes/plugin-install.php:489 wp-admin/update.php:123
msgid "Plugin Install"
msgstr "Installer utvidelser"
-#: wp-admin/includes/plugin-install.php:663
+#: wp-admin/includes/plugin-install.php:665
msgid "Install Update Now"
msgstr "Installer oppdatering nå"
-#: wp-admin/includes/plugin-install.php:667
+#. translators: %s: Plugin version
+#: wp-admin/includes/plugin-install.php:670
msgid "Newer Version (%s) Installed"
msgstr "Nyere versjon (%s) installert"
-#: wp-admin/includes/plugin-install.php:670
+#: wp-admin/includes/plugin-install.php:673
msgid "Latest Version Installed"
msgstr "Siste versjon installert"
-#: wp-admin/includes/class-wp-plugin-install-list-table.php:536
-#: wp-admin/includes/plugin-install.php:551
+#: wp-admin/includes/class-wp-plugin-install-list-table.php:563
+#: wp-admin/includes/plugin-install.php:544
msgid "Last Updated:"
msgstr "Sist oppdatert:"
-#: wp-admin/includes/plugin-install.php:555
+#: wp-admin/includes/plugin-install.php:552
msgid "Requires WordPress Version:"
msgstr "Krever WordPress versjon"
+#. translators: %s: WordPress version
#: wp-admin/includes/plugin-install.php:555
msgid "%s or higher"
msgstr "%s eller høyere"
-#: wp-admin/includes/plugin-install.php:557
+#: wp-admin/includes/plugin-install.php:559
msgid "Compatible up to:"
msgstr "Kompatibel opp til:"
-#: wp-admin/includes/plugin-install.php:567
+#: wp-admin/includes/plugin-install.php:569
msgid "WordPress.org Plugin Page »"
msgstr "WordPress.org utvidelsesside »"
-#: wp-admin/includes/plugin-install.php:575
+#: wp-admin/includes/plugin-install.php:577
msgid "Average Rating"
msgstr "Gjennomsnittlig vurdering"
-#: wp-admin/includes/plugin-install.php:632
+#: wp-admin/includes/plugin-install.php:634
msgid "Warning: This plugin has not been tested with your current version of WordPress."
msgstr "Advarsel: Denne utvidelsen har ikke blitt testet med din versjon av WordPress."
-#: wp-admin/includes/plugin-install.php:634
+#: wp-admin/includes/plugin-install.php:636
msgid "Warning: This plugin has not been marked as compatible with your version of WordPress."
msgstr "Advarsel: Denne utvidelsen er ikke merket som kompatibel med din versjon av WordPress."
-#: wp-admin/includes/plugin.php:617
+#: wp-admin/includes/plugin.php:623
msgid "The plugin generated unexpected output."
msgstr "Utvidelsen produserte et uventet resultat."
-#: wp-admin/includes/plugin.php:754
+#: wp-admin/includes/plugin.php:758
msgid "One of the plugins is invalid."
msgstr "En av utvidelsene er ugyldig."
-#: wp-admin/includes/plugin.php:890
+#: wp-admin/includes/plugin.php:897
msgid "Could not fully remove the plugin(s) %s."
msgstr "Kunne ikke fjerne utvidelsen(e) %s helt."
-#: wp-admin/includes/plugin.php:945
+#: wp-admin/includes/plugin.php:952
msgid "Invalid plugin path."
msgstr "Ugyldig sti til utvidelsen."
-#: wp-admin/includes/plugin.php:947
+#: wp-admin/includes/plugin.php:954
msgid "Plugin file does not exist."
msgstr "Filen med utvidelsen finnes ikke."
-#: wp-admin/includes/plugin.php:951
+#: wp-admin/includes/plugin.php:958
msgid "The plugin does not have a valid header."
msgstr "Denne utvidelsen har ikke en gyldig beskrivelse."
#: wp-admin/includes/post.php:33 wp-admin/includes/post.php:71
-msgid "You are not allowed to edit pages as this user."
-msgstr "Du har ikke lov til å redigere sider som denne brukeren."
+msgid "Sorry, you are not allowed to edit pages as this user."
+msgstr "Beklager, du har ikke lov til å redigere sider som denne brukeren."
#: wp-admin/includes/post.php:35 wp-admin/includes/post.php:73
-msgid "You are not allowed to edit posts as this user."
-msgstr "Du har ikke lov til å redigere innlegg som denne brukeren."
+msgid "Sorry, you are not allowed to edit posts as this user."
+msgstr "Beklager, du har ikke lov til å redigere innlegg som denne brukeren."
-#: wp-admin/includes/post.php:424
-msgid "You are not allowed to edit pages."
-msgstr "Du har ikke lov til å redigere sider."
-
-#: wp-admin/includes/post.php:426
-msgid "You are not allowed to edit posts."
-msgstr "Du har ikke lov til å redigere innlegg."
-
-#: wp-admin/includes/post.php:598
+#: wp-admin/includes/post.php:605
msgid "Auto Draft"
msgstr "Automatisk kladd"
-#: wp-admin/includes/post.php:1311 wp-admin/includes/post.php:1342
+#: wp-admin/includes/post.php:1318 wp-admin/includes/post.php:1341
msgid "Permalink:"
msgstr "Permalenke:"
-#: wp-admin/includes/post.php:1322
+#: wp-admin/includes/post.php:1329
msgid "Change Permalinks"
msgstr "Endre permalenker"
#. translators: site tagline
-#: wp-admin/includes/schema.php:403
+#: wp-admin/includes/schema.php:398
msgid "Just another WordPress site"
msgstr "Bare enda et WordPress-nettsted"
#. translators: site tagline
-#: wp-admin/includes/schema.php:535
+#: wp-admin/includes/schema.php:530
msgid "Just another %s site"
msgstr "Bare enda et %s-nettsted"
#. translators: user role
-#: wp-admin/includes/schema.php:641
+#: wp-admin/includes/schema.php:636
msgctxt "User role"
msgid "Administrator"
msgstr "Administrator"
#. translators: user role
-#: wp-admin/includes/schema.php:643
+#: wp-admin/includes/schema.php:638
msgctxt "User role"
msgid "Editor"
msgstr "Redaktør"
#. translators: user role
-#: wp-admin/includes/schema.php:645
+#: wp-admin/includes/schema.php:640
msgctxt "User role"
msgid "Author"
msgstr "Forfatter"
#. translators: user role
-#: wp-admin/includes/schema.php:647
+#: wp-admin/includes/schema.php:642
msgctxt "User role"
msgid "Contributor"
msgstr "Bidragsyter"
#. translators: user role
-#: wp-admin/includes/schema.php:649
+#: wp-admin/includes/schema.php:644
msgctxt "User role"
msgid "Subscriber"
msgstr "Abonnent"
-#: wp-admin/includes/schema.php:1087
+#: wp-admin/includes/schema.php:1082
msgid "Warning! Wildcard DNS may not be configured correctly!"
msgstr "Advarsel! Wildcard DNS kan være feilkonfigurert!"
-#: wp-admin/includes/class-wp-posts-list-table.php:1343
+#: wp-admin/includes/class-wp-posts-list-table.php:1371
#: wp-admin/includes/class-wp-terms-list-table.php:592
msgid "Quick Edit"
msgstr "Hurtigredigering"
-#: wp-admin/includes/class-wp-comments-list-table.php:589
-#: wp-admin/includes/class-wp-posts-list-table.php:1192
+#: wp-admin/includes/class-wp-comments-list-table.php:588
+#: wp-admin/includes/class-wp-posts-list-table.php:1220
#: wp-admin/includes/class-wp-terms-list-table.php:449
msgid "Quick Edit"
msgstr "Hurtigredigering"
#. translators: manage posts column name
-#: wp-admin/includes/class-wp-posts-list-table.php:505
+#: wp-admin/includes/class-wp-posts-list-table.php:533
msgctxt "column name"
msgid "Title"
msgstr "Tittel"
@@ -10540,7 +10564,7 @@ msgctxt "column name"
msgid "Date"
msgstr "Dato"
-#: wp-admin/includes/class-wp-comments-list-table.php:399
+#: wp-admin/includes/class-wp-comments-list-table.php:398
#: wp-admin/includes/class-wp-post-comments-list-table.php:28
msgctxt "column name"
msgid "Comment"
@@ -10554,64 +10578,64 @@ msgstr "Forhold"
msgid "Visible"
msgstr "Synlig"
-#: wp-admin/includes/class-wp-posts-list-table.php:1343
+#: wp-admin/includes/class-wp-posts-list-table.php:1371
msgid "Bulk Edit"
msgstr "Masserediger"
-#: wp-admin/includes/class-wp-posts-list-table.php:1390
-#: wp-admin/includes/class-wp-posts-list-table.php:1470
-#: wp-admin/includes/class-wp-posts-list-table.php:1506
-#: wp-admin/includes/class-wp-posts-list-table.php:1544
-#: wp-admin/includes/class-wp-posts-list-table.php:1553
-#: wp-admin/includes/class-wp-posts-list-table.php:1585
-#: wp-admin/includes/class-wp-posts-list-table.php:1606
+#: wp-admin/includes/class-wp-posts-list-table.php:1418
+#: wp-admin/includes/class-wp-posts-list-table.php:1498
+#: wp-admin/includes/class-wp-posts-list-table.php:1534
+#: wp-admin/includes/class-wp-posts-list-table.php:1572
+#: wp-admin/includes/class-wp-posts-list-table.php:1581
+#: wp-admin/includes/class-wp-posts-list-table.php:1613
#: wp-admin/includes/class-wp-posts-list-table.php:1634
+#: wp-admin/includes/class-wp-posts-list-table.php:1662
msgid "— No Change —"
msgstr "— Ingen endring —"
#. translators: Between password field and private checkbox on post quick edit
#. interface
-#: wp-admin/includes/class-wp-posts-list-table.php:1416
+#: wp-admin/includes/class-wp-posts-list-table.php:1444
msgid "–OR–"
msgstr "–ELLER–"
-#: wp-admin/includes/class-wp-posts-list-table.php:1545
-#: wp-admin/includes/class-wp-posts-list-table.php:1554
+#: wp-admin/includes/class-wp-posts-list-table.php:1573
+#: wp-admin/includes/class-wp-posts-list-table.php:1582
msgid "Allow"
msgstr "Tillat"
-#: wp-admin/includes/class-wp-posts-list-table.php:1546
-#: wp-admin/includes/class-wp-posts-list-table.php:1555
+#: wp-admin/includes/class-wp-posts-list-table.php:1574
+#: wp-admin/includes/class-wp-posts-list-table.php:1583
msgid "Do not allow"
msgstr "Ikke tillat"
-#: wp-admin/includes/class-wp-posts-list-table.php:1567
+#: wp-admin/includes/class-wp-posts-list-table.php:1595
msgid "Allow Comments"
msgstr "Tillat kommentarer"
-#: wp-admin/includes/class-wp-posts-list-table.php:1572
+#: wp-admin/includes/class-wp-posts-list-table.php:1600
msgid "Allow Pings"
msgstr "Tillat ping"
-#: wp-admin/includes/class-wp-posts-list-table.php:1604
-#: wp-admin/includes/class-wp-posts-list-table.php:1607
-#: wp-admin/includes/template.php:1690
+#: wp-admin/includes/class-wp-posts-list-table.php:1632
+#: wp-admin/includes/class-wp-posts-list-table.php:1635
+#: wp-admin/includes/template.php:1706
msgid "Sticky"
msgstr "Klebrig"
-#: wp-admin/includes/class-wp-posts-list-table.php:1608
+#: wp-admin/includes/class-wp-posts-list-table.php:1636
msgid "Not Sticky"
msgstr "Ikke klebrig"
-#: wp-admin/includes/class-wp-posts-list-table.php:1616
+#: wp-admin/includes/class-wp-posts-list-table.php:1644
msgid "Make this post sticky"
msgstr "Gjør dette innlegget klebrig"
-#: wp-admin/includes/class-wp-posts-list-table.php:954
+#: wp-admin/includes/class-wp-posts-list-table.php:982
msgid "Missed schedule"
msgstr "Mistet planlegging"
-#: wp-admin/includes/class-wp-posts-list-table.php:959
+#: wp-admin/includes/class-wp-posts-list-table.php:987
msgid "Last Modified"
msgstr "Sist endret"
@@ -10676,25 +10700,25 @@ msgstr "Installer temaer"
msgid "Manage Themes"
msgstr "Håndter temaer"
-#: wp-admin/includes/class-wp-screen.php:920
+#: wp-admin/includes/class-wp-screen.php:918
msgid "Enable accessibility mode"
msgstr "Aktiver tilgjengelighetstilstand."
-#: wp-admin/includes/class-wp-screen.php:920
+#: wp-admin/includes/class-wp-screen.php:918
msgid "Disable accessibility mode"
msgstr "Deaktiver tilgjengelighetstilstand."
-#: wp-admin/includes/media.php:2440 wp-admin/includes/nav-menu.php:342
-#: wp-admin/includes/nav-menu.php:617
+#: wp-admin/includes/media.php:2442 wp-admin/includes/nav-menu.php:353
+#: wp-admin/includes/nav-menu.php:637
msgid "«"
msgstr "«"
-#: wp-admin/includes/media.php:2441 wp-admin/includes/nav-menu.php:343
-#: wp-admin/includes/nav-menu.php:618
+#: wp-admin/includes/media.php:2443 wp-admin/includes/nav-menu.php:354
+#: wp-admin/includes/nav-menu.php:638
msgid "»"
msgstr "»"
-#: wp-admin/includes/ajax-actions.php:742
+#: wp-admin/includes/ajax-actions.php:758
msgid "Comment %d does not exist"
msgstr "Kommentar %d finnes ikke."
@@ -10702,17 +10726,17 @@ msgstr "Kommentar %d finnes ikke."
msgid "You did not enter a category name."
msgstr "Du skrev ikke inn navnet på kategorien."
-#: wp-admin/includes/ajax-actions.php:1015
+#: wp-admin/includes/ajax-actions.php:1031
msgid "Sorry, you must be logged in to reply to a comment."
msgstr "Beklager, du må være innlogget for å kunne svare på en kommentar."
-#: wp-admin/includes/ajax-actions.php:1257
-#: wp-admin/includes/ajax-actions.php:1262
-#: wp-admin/includes/ajax-actions.php:1282
+#: wp-admin/includes/ajax-actions.php:1273
+#: wp-admin/includes/ajax-actions.php:1278
+#: wp-admin/includes/ajax-actions.php:1298
msgid "Please provide a custom field value."
msgstr "Vennligst angi en verdi for tilpasset felt"
-#. translators: draft saved date format, see http://php.net/date
+#. translators: draft saved date format, see https://secure.php.net/date
#: wp-admin/includes/misc.php:885
msgid "g:i:s a"
msgstr "H:i:s"
@@ -10722,66 +10746,52 @@ msgstr "H:i:s"
msgid "Draft saved at %s."
msgstr "Kladd lagret %s."
-#: wp-admin/includes/ajax-actions.php:1616
+#: wp-admin/includes/ajax-actions.php:1632
msgid "Someone"
msgstr "Noen"
-#: wp-admin/includes/ajax-actions.php:1608 wp-admin/includes/post.php:206
-msgid "You are not allowed to edit this page."
-msgstr "Du har ikke lov til å redigere denne siden."
-
-#: wp-admin/includes/ajax-actions.php:1611 wp-admin/includes/media.php:3111
-#: wp-admin/includes/post.php:208 wp-admin/includes/post.php:1717
-#: wp-admin/includes/post.php:1721
-msgid "You are not allowed to edit this post."
-msgstr "Du har ikke lov til å redigere dette innlegget."
-
-#: wp-admin/includes/ajax-actions.php:1617
+#: wp-admin/includes/ajax-actions.php:1633
msgid "Saving is disabled: %s is currently editing this page."
msgstr "Lagring er deaktivert: %s redigerer denne siden nå."
-#: wp-admin/includes/ajax-actions.php:1617
+#: wp-admin/includes/ajax-actions.php:1633
msgid "Saving is disabled: %s is currently editing this post."
msgstr "Lagring er deaktivert: %s redigerer dette innlegget nå."
-#: wp-admin/includes/ajax-actions.php:1723
-#: wp-admin/includes/ajax-actions.php:1728
+#: wp-admin/includes/ajax-actions.php:1741
+#: wp-admin/includes/ajax-actions.php:1746
#: wp-admin/includes/edit-tag-messages.php:18
msgid "Item not updated."
msgstr "Saken ble ikke oppdatert."
-#: wp-admin/includes/ajax-actions.php:1769
-#: wp-admin/includes/class-wp-posts-list-table.php:543
-#: wp-admin/includes/class-wp-posts-list-table.php:1370
+#: wp-admin/includes/ajax-actions.php:1787
+#: wp-admin/includes/class-wp-posts-list-table.php:571
+#: wp-admin/includes/class-wp-posts-list-table.php:1398
msgid "Date"
msgstr "Dato"
-#: wp-admin/edit-form-comment.php:76 wp-admin/includes/ajax-actions.php:1769
-#: wp-admin/includes/class-wp-posts-list-table.php:1582
+#: wp-admin/edit-form-comment.php:76 wp-admin/includes/ajax-actions.php:1787
+#: wp-admin/includes/class-wp-posts-list-table.php:1610
msgid "Status"
msgstr "Status"
-#: wp-admin/includes/ajax-actions.php:1781
-#: wp-admin/includes/class-wp-posts-list-table.php:956
-#: wp-admin/includes/class-wp-posts-list-table.php:1589
+#: wp-admin/includes/ajax-actions.php:1799
+#: wp-admin/includes/class-wp-posts-list-table.php:984
+#: wp-admin/includes/class-wp-posts-list-table.php:1617
#: wp-admin/includes/meta-boxes.php:88 wp-admin/includes/meta-boxes.php:111
-#: wp-admin/includes/template.php:1693
+#: wp-admin/includes/template.php:1709
msgid "Scheduled"
msgstr "Planlagte"
-#: wp-admin/admin.php:239
+#: wp-admin/admin.php:225
msgid "Invalid plugin page"
msgstr "Ugyldig utvidelsesside"
-#: wp-admin/admin.php:242
+#: wp-admin/admin.php:228
msgid "Cannot load %s."
msgstr "Kan ikke laste %s."
-#: wp-admin/admin.php:275
-msgid "You are not allowed to import."
-msgstr "Du har ikke importtillatelse."
-
-#: wp-admin/admin.php:298 wp-admin/import.php:17 wp-admin/menu.php:241
+#: wp-admin/admin.php:285 wp-admin/import.php:18 wp-admin/menu.php:241
msgid "Import"
msgstr "Importer"
@@ -10791,14 +10801,14 @@ msgid "Edit Comment"
msgstr "Rediger kommentar"
#: wp-admin/comment.php:61 wp-admin/comment.php:255
-#: wp-admin/includes/post.php:1525
+#: wp-admin/includes/post.php:1527
msgid "Go back"
msgstr "Gå tilbake"
#: wp-admin/comment.php:257 wp-admin/edit-comments.php:213
#: wp-admin/includes/comment.php:49
-msgid "You are not allowed to edit comments on this post."
-msgstr "Du har ikke lov til å redigere kommentarene til dette innlegget."
+msgid "Sorry, you are not allowed to edit comments on this post."
+msgstr "Beklager, du har ikke lov til å redigere kommentarene til dette innlegget."
#: wp-admin/comment.php:67
msgid "This comment is in the Trash. Please move it out of the Trash if you want to edit it."
diff --git a/wp-content/languages/admin-network-nb_NO.mo b/wp-content/languages/admin-network-nb_NO.mo
index c66b799..65ccc78 100644
Binary files a/wp-content/languages/admin-network-nb_NO.mo and b/wp-content/languages/admin-network-nb_NO.mo differ
diff --git a/wp-content/languages/admin-network-nb_NO.po b/wp-content/languages/admin-network-nb_NO.po
index 7df34cd..e044c26 100644
--- a/wp-content/languages/admin-network-nb_NO.po
+++ b/wp-content/languages/admin-network-nb_NO.po
@@ -2,7 +2,7 @@
# This file is distributed under the same license as the Network Admin package.
msgid ""
msgstr ""
-"PO-Revision-Date: 2016-03-30 07:33:27+0000\n"
+"PO-Revision-Date: 2016-08-01 12:49:20+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -10,8 +10,61 @@ msgstr ""
"X-Generator: GlotPress/2.1.0-alpha\n"
"Project-Id-Version: Network Admin\n"
+#. translators: %s: theme name
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:475
+msgctxt "theme"
+msgid "Delete %s"
+msgstr "Slett %s"
+
+#: wp-admin/network/sites.php:240
+msgid "Sorry, you are not allowed to delete that site."
+msgstr "Beklager, du har ikke lov til å slette det nettstedet."
+
+#: wp-admin/network/themes.php:17
+msgid "Sorry, you are not allowed to manage network themes."
+msgstr "Beklager, du har ikke lov til å håndtere temaer i nettverket."
+
+#: wp-admin/network/themes.php:93
+msgid "Sorry, you are not allowed to delete themes for this site."
+msgstr "Beklager, du har ikke lov til å slette temaer for dette nettstedet."
+
+#. translators: 1: wp-config.php 2: location of wp-config file, 3: translated
+#. version of "That's all, stop editing! Happy blogging."
+#: wp-admin/includes/network.php:409
+msgid "Add the following to your %1$s file in %2$s above the line reading %3$s:"
+msgstr "Legg til disse linjene i din %1$s-fil i %2$s over linjen som sier %3$s:"
+
+#. translators: This string should only be translated if wp-config-sample.php
+#. is localized. You can check the localized release package or
+#. https://i18n.svn.wordpress.org//branches//dist/wp-config-sample.php
+#: wp-admin/includes/network.php:417
+msgid "That’s all, stop editing! Happy blogging."
+msgstr "That’s all, stop editing! Happy blogging."
+
+#: wp-admin/network/settings.php:269
+msgid "First Comment Email"
+msgstr "E-post for første kommentar"
+
+#: wp-admin/network/settings.php:273
+msgid "The email address of the first comment author on a new site."
+msgstr "E-postadressen til den første kommentaren på det nye nettstedet."
+
+#: wp-admin/network/site-info.php:18 wp-admin/network/site-settings.php:17
+#: wp-admin/network/site-users.php:17
+msgid "Sorry, you are not allowed to edit this site."
+msgstr "Beklager, du har ikke lov til å redigere nettstedet."
+
+#: wp-admin/network/site-new.php:20
+msgid "Sorry, you are not allowed to add sites to this network."
+msgstr "Beklager, du har ikke lov til å legge til nettsteder i dette nettverket."
+
+#: wp-admin/network/site-themes.php:17
+msgid "Sorry, you are not allowed to manage themes for this site."
+msgstr "Beklager, du har ikke lov til å håndtere temaer på dette nettstedet."
+
#. translators: 1: theme name, 2: theme author
-#: wp-admin/network/themes.php:148
+#: wp-admin/network/themes.php:141
msgctxt "theme"
msgid "%1$s by %2$s"
msgstr "%1$s av %2$s"
@@ -22,12 +75,12 @@ msgid "User added. Edit user"
msgstr "Bruker lagt til. Rediger bruker"
#. translators: 1: wp-config.php
-#: wp-admin/includes/network.php:448
+#: wp-admin/includes/network.php:454
msgid "This unique authentication key is also missing from your %s file."
msgstr "Denne unike autentiseringsnøkkelen mangler også fra din %s."
#. translators: 1: wp-config.php
-#: wp-admin/includes/network.php:454
+#: wp-admin/includes/network.php:460
msgid "These unique authentication keys are also missing from your %s file."
msgstr "Disse unike autentiseringsnøklene mangler også fra din %s."
@@ -66,11 +119,6 @@ msgstr "Vi anbefaler at du sikkerhetskopierer dine eksisterende %1$s- og og %2$s
msgid "We recommend you back up your existing %s file."
msgstr "Vi anbefaler at du sikkerhetskopierer din eksisterende %s-fil."
-#. translators: 1: wp-config.php 2: location of wp-config file
-#: wp-admin/includes/network.php:409
-msgid "Add the following to your %1$s file in %2$s above the line reading /* That’s all, stop editing! Happy blogging. */:"
-msgstr "Legg til følgende i din %1$s i %2$s over linjen der det står /* That's all, stop editing! Happy blogging. */:"
-
#. translators: 1: mod_rewrite, 2: mod_rewrite documentation URL, 3: Google
#. search for mod_rewrite
#: wp-admin/includes/network.php:181
@@ -86,158 +134,158 @@ msgid "You cannot change this later."
msgstr "Du kan ikke endre dette senere."
#: wp-admin/includes/class-wp-ms-sites-list-table.php:41
-#: wp-admin/network/site-info.php:198
+#: wp-admin/network/site-info.php:190
msgid "Archived"
msgstr "Arkivert"
#: wp-admin/includes/class-wp-ms-sites-list-table.php:42
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:523
-#: wp-admin/network/site-info.php:199
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:537
+#: wp-admin/network/site-info.php:191
msgctxt "site"
msgid "Spam"
msgstr "Useriøst"
#: wp-admin/includes/class-wp-ms-sites-list-table.php:43
-#: wp-admin/network/site-info.php:200
+#: wp-admin/network/site-info.php:192
msgid "Deleted"
msgstr "Slettet"
#: wp-admin/includes/class-wp-ms-sites-list-table.php:44
-#: wp-admin/network/site-info.php:202
+#: wp-admin/network/site-info.php:194
msgid "Mature"
msgstr "Støtende"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:179
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:192
msgid "No sites found."
msgstr "Ingen nettsteder funnet."
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:190
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:203
msgctxt "site"
msgid "Mark as Spam"
msgstr "Merk som useriøst"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:191
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:521
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:204
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:535
msgctxt "site"
msgid "Not Spam"
msgstr "Ikke useriøst"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:217
-#: wp-admin/network/site-info.php:192
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:230
+#: wp-admin/network/site-info.php:184
msgid "Last Updated"
msgstr "Sist oppdatert"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:218
-#: wp-admin/network/site-info.php:188
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:231
+#: wp-admin/network/site-info.php:180
msgctxt "site"
msgid "Registered"
msgstr "Registrert"
#. translators: 1: site name, 2: site tagline.
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:321
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:334
msgid "%1$s – %2$s"
msgstr "%1$s – %2$s"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:347
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:360
msgid "Never"
msgstr "Aldri"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:515
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:529
msgid "Unarchive"
msgstr "Angre arkivering"
-#: wp-admin/includes/class-wp-ms-sites-list-table.php:517
+#: wp-admin/includes/class-wp-ms-sites-list-table.php:531
msgctxt "verb; site"
msgid "Archive"
msgstr "Arkiver"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:229
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:233
msgid "No themes found."
msgstr "Ingen temaer funnet."
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:231
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:235
msgid "You do not appear to have any themes available at this time."
msgstr "Du ser ikke ut til å ha noen temaer tilgjengelige nå."
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:242
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:246
msgid "Theme"
msgstr "Tema"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:285
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:289
msgctxt "themes"
msgid "All (%s)"
msgid_plural "All (%s)"
msgstr[0] "Alle (%s)"
msgstr[1] "Alle (%s)"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:288
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:292
msgid "Enabled (%s)"
msgid_plural "Enabled (%s)"
msgstr[0] "Aktivert (%s)"
msgstr[1] "Aktiverte (%s)"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:291
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:295
msgid "Disabled (%s)"
msgid_plural "Disabled (%s)"
msgstr[0] "Deaktivert (%s)"
msgstr[1] "Deaktiverte (%s)"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:297
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:301
msgid "Broken (%s)"
msgid_plural "Broken (%s)"
msgstr[0] "Ødelagt (%s)"
msgstr[1] "Ødelagte (%s)"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:328
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:420
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:332
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:424
msgid "Enable"
msgstr "Aktiver"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:330
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:442
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:334
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:446
msgid "Disable"
msgstr "Deaktiver"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:330
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:442
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:334
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:446
msgid "Network Disable"
msgstr "Deaktiver for nettverk"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:411
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:415
msgid "Enable %s"
msgstr "Aktiver %s"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:414
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:418
msgid "Network Enable %s"
msgstr "Aktiver %s i nettverket"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:433
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:437
msgid "Disable %s"
msgstr "Deaktiver %s"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:436
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:440
msgid "Network Disable %s"
msgstr "Deaktiver %s i nettverket"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:452
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:456
msgid "Open %s in the Theme Editor"
msgstr "Åpne %s i temaredigeringen"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:536
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:540
msgid "Broken Theme:"
msgstr "Ødelagt tema:"
#. translators: %s: theme name
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:563
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:567
msgid "Visit %s homepage"
msgstr "Besøk nettsiden til %s"
-#: wp-admin/includes/class-wp-ms-themes-list-table.php:568
+#: wp-admin/includes/class-wp-ms-themes-list-table.php:572
msgid "Visit Theme Site"
msgstr "Besøk temaets nettsted"
@@ -277,12 +325,12 @@ msgstr "Vennligst forsikre deg om at Apache-modulen %s er installert, siden det
msgid "It looks like the Apache %s module is not installed."
msgstr "Det ser ut til at Apache-modulen %s ikke er installert."
-#: wp-admin/network/site-users.php:329 wp-admin/network/user-new.php:120
+#: wp-admin/network/site-users.php:321 wp-admin/network/user-new.php:120
msgid "A password reset link will be sent to the user via email."
msgstr "En lenke for å skifte passord vil bli sendt til brukeren med e-post."
#. translators: 1: NOBLOGREDIRECT 2: wp-config.php
-#: wp-admin/network/settings.php:142
+#: wp-admin/network/settings.php:143
msgid "If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site."
msgstr "Hvis registrering er deaktivert, vennligst sett %1$s i %2$s til en URL som du vil vise til besøkere hvis de prøver å nå et nettsted som ikke finnes."
@@ -302,7 +350,7 @@ msgstr "Navigasjon for nettstedsliste"
msgid "Sites list"
msgstr "Nettstedsliste"
-#: wp-admin/network/themes.php:231
+#: wp-admin/network/themes.php:224
msgid "Themes list navigation"
msgstr "Navigasjon for temaliste"
@@ -402,7 +450,7 @@ msgstr "Documentation on Creating a Network"
msgstr "Dokumentasjon om det å lage et nettverk"
-#: wp-admin/network/themes.php:225
+#: wp-admin/network/themes.php:218
msgid "Documentation on Network Themes"
msgstr "Dokumentasjon om nettverkstemaer"
@@ -411,70 +459,70 @@ msgid "Dokumentasjon om nettverksinnstillinger"
#. translators: 1: site url, 2: server error message
-#: wp-admin/network/upgrade.php:76
+#: wp-admin/network/upgrade.php:80
msgid "Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s"
msgstr "Advarsel! Kunne ikke oppdatere %1$s. Tjeneren din kan muligens ikke koble til nettsteder som kjører på den. Feilmelding: %2$s"
-#: wp-admin/network/themes.php:139
+#: wp-admin/network/themes.php:132
msgid "Delete Themes"
msgstr "Slett temaer"
-#: wp-admin/network/themes.php:173
+#: wp-admin/network/themes.php:166
msgid "Yes, delete these themes"
msgstr "Ja, slett disse temaene"
-#: wp-admin/network/themes.php:275
+#: wp-admin/network/themes.php:269
msgid "%s theme deleted."
msgid_plural "%s themes deleted."
msgstr[0] "%s tema slettet."
msgstr[1] "%s temaer slettet."
-#: wp-admin/network/site-themes.php:172 wp-admin/network/themes.php:259
+#: wp-admin/network/site-themes.php:164 wp-admin/network/themes.php:253
msgid "%s theme enabled."
msgid_plural "%s themes enabled."
msgstr[0] "%s tema aktivert."
msgstr[1] "%s temaer aktiverte."
-#: wp-admin/network/site-themes.php:180 wp-admin/network/themes.php:267
+#: wp-admin/network/site-themes.php:172 wp-admin/network/themes.php:261
msgid "%s theme disabled."
msgid_plural "%s themes disabled."
msgstr[0] "%s tema deaktivert."
msgstr[1] "%s temaer deaktiverte."
-#: wp-admin/network/themes.php:156
+#: wp-admin/network/themes.php:149
msgid "Are you sure you wish to delete this theme?"
msgstr "Er du sikker på at du vil slette dette temaet?"
-#: wp-admin/network/themes.php:140
+#: wp-admin/network/themes.php:133
msgid "These themes may be active on other sites in the network."
msgstr "Disse temaene kan være aktive andre steder i nettverket."
-#: wp-admin/network/themes.php:141
+#: wp-admin/network/themes.php:134
msgid "You are about to remove the following themes:"
msgstr "Du er i ferd med å fjerne følgende temaer:"
-#: wp-admin/network/settings.php:367
+#: wp-admin/network/settings.php:377
msgid "Enable menus"
msgstr "Aktiver menyer"
-#: wp-admin/network/site-info.php:208
+#: wp-admin/network/site-info.php:200
msgid "Set site attributes"
msgstr "Bestem nettstedsattributter"
-#: wp-admin/network/settings.php:294
+#: wp-admin/network/settings.php:304
msgid "Allowed file types. Separate types by spaces."
msgstr "Tillate filtyper. Separer typer med mellomrom."
-#: wp-admin/network/settings.php:304
+#: wp-admin/network/settings.php:314
msgid "Size in kilobytes"
msgstr "Størrelse i kilobyte"
-#: wp-admin/network/settings.php:134
+#: wp-admin/network/settings.php:135
msgid "New registrations settings"
msgstr "Innstillinger for nye registreringer"
#. translators: 1: a filename like .htaccess. 2: a file path.
-#: wp-admin/includes/network.php:523 wp-admin/includes/network.php:563
+#: wp-admin/includes/network.php:529 wp-admin/includes/network.php:569
msgid "Add the following to your %1$s file in %2$s, replacing other WordPress rules:"
msgstr "Legg til følgende i din %1$s-fil i %2$s, som erstatning for andre WordPress-regler:"
@@ -490,7 +538,7 @@ msgstr "skriv inn en e-postadresse eller e
msgid "To search for a site, enter the path or domain."
msgstr "For å søke etter et nettsted, skriv inn stien eller domenet."
-#: wp-admin/network/settings.php:96
-msgid "Options saved."
-msgstr "Valg lagret."
-
#: wp-admin/network/index.php:25
msgid "Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network."
msgstr "Velkommen til Nettverksadmin. Dette området av administrasjonsområdet brukes for å håndtere alle aspektene ved ditt nettstedsnettverk."
@@ -555,7 +599,7 @@ msgid "Quick Tasks"
msgstr "Kjappe oppgaver"
#: wp-admin/network/menu.php:22 wp-admin/network/upgrade.php:18
-#: wp-admin/network/upgrade.php:42 wp-admin/network/upgrade.php:119
+#: wp-admin/network/upgrade.php:42 wp-admin/network/upgrade.php:123
msgid "Upgrade Network"
msgstr "Oppgrader nettverk"
@@ -563,7 +607,7 @@ msgstr "Oppgrader nettverk"
msgid "Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied."
msgstr "Bruk kun denne skjermen når du har oppdatert til en ny versjon av WordPress via Oppdateringer/Tilgjengelige oppdateringer (via nettverksadministrasjonen eller verktøylinjen). Når du klikker på Oppgrader nettverk-knappen, vil vi gå gjennom alle nettstedene i nettverket, fem om gangen, og forsikre oss om at databaseoppdateringer blir utført."
-#: wp-admin/network/upgrade.php:115
+#: wp-admin/network/upgrade.php:119
msgid "WordPress has been updated! Before we send you on your way, we need to individually upgrade the sites in your network."
msgstr "WordPress har blitt oppdatert! Før vi sender deg av gårde, må vi oppgradere alle nettstedene i ditt nettverk."
@@ -584,28 +628,28 @@ msgstr ""
msgid "Add the designated lines of code to wp-config.php (just before /*...stop editing...*/) and .htaccess (replacing the existing WordPress rules)."
msgstr "Legg til de angitte kodelinjene til wp-config.php (rett før /*…stop editing…*/) og .htaccess (istedenfor de eksisterende WordPress-reglene)."
-#: wp-admin/includes/network.php:219 wp-admin/includes/network.php:529
-#: wp-admin/includes/network.php:569
+#: wp-admin/includes/network.php:219 wp-admin/includes/network.php:535
+#: wp-admin/includes/network.php:575
msgid "Subdirectory networks may not be fully compatible with custom wp-content directories."
msgstr "Nettverk basert på undermapper kan ha problemer med egendefinerte wp-content-mapper."
-#: wp-admin/network/site-users.php:249
+#: wp-admin/network/site-users.php:241
msgid "Enter the username and email."
msgstr "Skriv inn brukernavn og e-post."
-#: wp-admin/network/site-users.php:237
+#: wp-admin/network/site-users.php:229
msgid "Select a user to change role."
msgstr "Velg en bruker for å endre rollen."
-#: wp-admin/network/site-users.php:243
+#: wp-admin/network/site-users.php:235
msgid "Select a user to remove."
msgstr "Velg en bruker som skal fjernes."
-#: wp-admin/network/site-users.php:246
+#: wp-admin/network/site-users.php:238
msgid "User created."
msgstr "Bruker opprettet."
-#: wp-admin/network/site-users.php:297 wp-admin/network/user-new.php:132
+#: wp-admin/network/site-users.php:289 wp-admin/network/user-new.php:132
msgid "Add User"
msgstr "Legg til bruker"
@@ -614,10 +658,10 @@ msgid "Cannot add user."
msgstr "Kan ikke legge til bruker"
#: wp-admin/network/sites.php:147
-msgid "You are not allowed to delete the site."
-msgstr "Du har ikke lov til å slette dette nettstedet."
+msgid "Sorry, you are not allowed to delete the site."
+msgstr "Beklager, du har ikke lov til å slette dette nettstedet."
-#: wp-admin/network/site-users.php:228
+#: wp-admin/network/site-users.php:220
msgid "User is already a member of this site."
msgstr "Brukeren er allerede medlem av dette nettstedet."
@@ -625,11 +669,11 @@ msgstr "Brukeren er allerede medlem av dette nettstedet."
msgid "Site info updated."
msgstr "Nettstedsinfo oppdatert."
-#: wp-admin/network/site-users.php:231
+#: wp-admin/network/site-users.php:223
msgid "Enter the username of an existing user."
msgstr "Skriv inn brukernavnet til en eksisterende bruker."
-#: wp-admin/network/themes.php:281
+#: wp-admin/network/themes.php:275
msgid "You cannot delete a theme while it is active on the main site."
msgstr "Du kan ikke slette et tema mens det er aktivt på hovednettstedet."
@@ -637,28 +681,23 @@ msgstr "Du kan ikke slette et tema mens det er aktivt på hovednettstedet."
msgid "Add New Site"
msgstr "Legg til nytt nettsted"
-#: wp-admin/network/site-info.php:149 wp-admin/network/site-settings.php:101
-#: wp-admin/network/site-themes.php:155 wp-admin/network/site-users.php:210
-msgid "Info"
-msgstr "Info"
-
-#: wp-admin/network/themes.php:158
+#: wp-admin/network/themes.php:151
msgid "Are you sure you wish to delete these themes?"
msgstr "Er du sikker på at du vil slette disse temaene?"
-#: wp-admin/network/themes.php:171
+#: wp-admin/network/themes.php:164
msgid "Yes, delete this theme"
msgstr "Ja, slett dette temaet"
-#: wp-admin/network/themes.php:137
+#: wp-admin/network/themes.php:130
msgid "You are about to remove the following theme:"
msgstr "Du er i ferd med å fjerne følgende tema:"
-#: wp-admin/network/themes.php:136
+#: wp-admin/network/themes.php:129
msgid "This theme may be active on other sites in the network."
msgstr "Dette temaet kan være aktivt på andre nettsteder i nettverket."
-#: wp-admin/network/themes.php:135
+#: wp-admin/network/themes.php:128
msgid "Delete Theme"
msgstr "Slett tema"
@@ -666,23 +705,15 @@ msgstr "Slett tema"
msgid "Network Settings"
msgstr "Nettverksinnstillinger"
-#: wp-admin/network/site-themes.php:187
+#: wp-admin/network/site-themes.php:179
msgid "Network enabled themes are not shown on this screen."
msgstr "Nettverksaktiverte temaer er vises ikke på denne skjermen."
-#: wp-admin/network/themes.php:17
-msgid "You do not have sufficient permissions to manage network themes."
-msgstr "Du har ikke tilstrekkelige tillatelser til å administrere nettverktemaer."
-
#: wp-admin/network/user-new.php:23
msgid "Add User will set up a new user account on the network and send that person an email with username and password."
msgstr "Legg til bruker vil sette opp en ny brukerkonto på nettverket og sende denne personen en e-post med brukernavn og passord."
-#: wp-admin/network/themes.php:100
-msgid "You do not have sufficient permissions to delete themes for this site."
-msgstr "Du har ikke tilstrekkelige tillatelser til å slette temaer for dette nettstedet."
-
-#: wp-admin/network/site-themes.php:178 wp-admin/network/themes.php:265
+#: wp-admin/network/site-themes.php:170 wp-admin/network/themes.php:259
msgid "Theme disabled."
msgstr "Tema deaktivert."
@@ -691,11 +722,11 @@ msgstr "Tema deaktivert."
msgid "Invalid site ID."
msgstr "Ugyldig nettsteds-ID."
-#: wp-admin/network/site-themes.php:170 wp-admin/network/themes.php:257
+#: wp-admin/network/site-themes.php:162 wp-admin/network/themes.php:251
msgid "Theme enabled."
msgstr "Tema aktivert."
-#: wp-admin/network/site-themes.php:184 wp-admin/network/themes.php:279
+#: wp-admin/network/site-themes.php:176 wp-admin/network/themes.php:273
msgid "No theme selected."
msgstr "Ikke noe tema er valgt."
@@ -709,7 +740,7 @@ msgstr "Temaer – Dette området viser temaer som ikke allered
msgid "Edit Site: %s"
msgstr "Rediger nettsted: %s"
-#: wp-admin/network/themes.php:181
+#: wp-admin/network/themes.php:174
msgid "No, return me to the theme list"
msgstr "Nei, ta meg tilbake til temalisten"
@@ -737,11 +768,11 @@ msgstr "Menyen er for redigering av informasjon som er spesifikk for enkelte net
msgid "Dashboard leads to the Dashboard for that site."
msgstr "Kontrollpanel leder til kontrollpanelet for det nettstedet."
-#: wp-admin/network/settings.php:166
+#: wp-admin/network/settings.php:167
msgid "Allow site administrators to add new users to their site via the \"Users → Add New\" page."
msgstr "Tillat nettstedsadmin å legge til nye brukere til deres nettsted via siden Brukere → Legg til ny."
-#: wp-admin/network/settings.php:315
+#: wp-admin/network/settings.php:325
msgid "Language Settings"
msgstr "Språkinnstillinger"
@@ -761,10 +792,6 @@ msgstr "Temaer %s"
msgid "All Sites"
msgstr "Alle nettsteder"
-#: wp-admin/network/site-themes.php:17
-msgid "You do not have sufficient permissions to manage themes for this site."
-msgstr "Du har ikke tilstrekkelige tillatelser til å administrere temaer for dette nettstedet."
-
#. translators: 1: dashboard url, 2: network admin edit url
#: wp-admin/network/site-new.php:171
msgid "Site added. Visit Dashboard or Edit Site"
@@ -772,17 +799,9 @@ msgstr "Nettsted lagt til. Besøk kontrollpanelet eller Themes screen."
msgstr "Hvis nettverksadmin deaktiverer et tema som er i bruk, kan det fortsatt være valgt på det nettstedet. Hvis et annet tema blir valgt, vil det deaktiverte temaet ikke være synlig i nettstedets Utseende → Temaer-skjerm."
@@ -1070,8 +1084,8 @@ msgid "Users who are signed up to the network without a site are added as subscr
msgstr "Brukere som er registrerte på nettverket uten et eget nettsted blir lagt til som abonnenter på hovednettstedet eller et designert kontrollpanelnettsted, slik at de kan komme til sine profilsider. Disse brukerne vil kun se Kontrollpanelet og Mine nettsteder i navigasjonsmenyen inntil et nettsted blir laget til dem."
#: wp-admin/network/users.php:164
-msgid "You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right."
-msgstr "Du kan sortere listen ved å klikke på en av overskriftene i fet type og veksle mellom liste- og utdragsvisning ved å bruke ikonene oppe til høyre."
+msgid "You can sort the table by clicking on any of the table headings and switch between list and excerpt views by using the icons above the users list."
+msgstr "Du kan sortere listen ved å klikke på en av overskriftene og veksle mellom liste- og utdragsvisning ved å bruke ikonene over listen."
#: wp-admin/network/upgrade.php:27
msgid "If this process fails for any reason, users logging in to their sites will force the same update."
@@ -1094,11 +1108,11 @@ msgstr "Du kan gjøre en eksisterende bruker til nok en superadmin ved å gå ti
msgid "The following words are reserved for use by WordPress functions and cannot be used as blog names: %s"
msgstr "De følgende ordene er reservert til WordPress-funksjoner og kan ikke brukes som nettstedsnavn: %s"
-#: wp-admin/network/settings.php:188
+#: wp-admin/network/settings.php:189
msgid "If you want to limit site registrations to certain domains. One domain per line."
msgstr "Hvis du vil begrense nettstedsregistreringer til noen få domener. Et domene per linje."
-#: wp-admin/network/settings.php:199
+#: wp-admin/network/settings.php:200
msgid "If you want to ban domains from site registrations. One domain per line."
msgstr "Hvis du vil forby enkelte domener fra nettstedsregistreringer. Et domene per linje."
@@ -1106,7 +1120,7 @@ msgstr "Hvis du vil forby enkelte domener fra nettstedsregistreringer. Et domene
msgid "Can’t create an empty site."
msgstr "Kan ikke opprette et tomt nettsted."
-#: wp-admin/network/upgrade.php:100
+#: wp-admin/network/upgrade.php:104
msgid "If your browser doesn’t start loading the next page automatically, click this link:"
msgstr "Hvis din nettleser ikke begynner å laste den neste siden automatisk, klikk denne lenken:"
@@ -1171,39 +1185,39 @@ msgid "There was an error creating the user."
msgstr "Det skjedde en feil ved opprettelse av bruker."
#: wp-admin/network/sites.php:94 wp-admin/network/sites.php:160
-msgid "You are not allowed to change the current site."
-msgstr "Du har ikke lov til å endre det gjeldende nettstedet."
+msgid "Sorry, you are not allowed to change the current site."
+msgstr "Beklager, du har ikke lov til å endre det gjeldende nettstedet."
-#: wp-admin/network/settings.php:302
+#: wp-admin/network/settings.php:312
msgctxt "File size in kilobytes"
msgid "%s KB"
msgstr "%s kB"
-#: wp-admin/network/settings.php:290
+#: wp-admin/network/settings.php:300
msgid "Upload file types"
msgstr "Tillatte filtyper"
-#: wp-admin/network/settings.php:282
+#: wp-admin/network/settings.php:292
msgid "Limit total size of files uploaded to %s MB"
msgstr "Begrens den totale størrelsen til opplastede filer til %s MB"
-#: wp-admin/network/settings.php:263
+#: wp-admin/network/settings.php:264
msgid "The author of the first comment on a new site."
msgstr "Forfatteren til den første kommentaren på et nytt nettsted."
-#: wp-admin/network/settings.php:234
+#: wp-admin/network/settings.php:235
msgid "The first post on a new site."
msgstr "Det første innlegget på et nytt nettsted."
-#: wp-admin/network/settings.php:244
+#: wp-admin/network/settings.php:245
msgid "The first page on a new site."
msgstr "Den første siden på et nytt nettsted."
-#: wp-admin/network/settings.php:254
+#: wp-admin/network/settings.php:255
msgid "The first comment on a new site."
msgstr "Den første kommentaren på et nytt nettsted."
-#: wp-admin/network/settings.php:272
+#: wp-admin/network/settings.php:282
msgid "The URL for the first comment on a new site."
msgstr "URL-en for den første kommentaren på et nytt nettsted."
@@ -1211,39 +1225,39 @@ msgstr "URL-en for den første kommentaren på et nytt nettsted."
msgid "All done!"
msgstr "Ferdig!"
-#: wp-admin/network/settings.php:137
+#: wp-admin/network/settings.php:138
msgid "Logged in users may register new sites."
msgstr "Innloggede brukere kan registrere nye nettsteder."
-#: wp-admin/network/settings.php:138
+#: wp-admin/network/settings.php:139
msgid "Both sites and user accounts can be registered."
msgstr "Både nettsteder og brukerkontoer kan registreres."
-#: wp-admin/network/settings.php:136
+#: wp-admin/network/settings.php:137
msgid "User accounts may be registered."
msgstr "Brukerkontoer kan registreres."
-#: wp-admin/network/settings.php:135
+#: wp-admin/network/settings.php:136
msgid "Registration is disabled."
msgstr "Registrering er deaktivert."
-#: wp-admin/network/settings.php:345
+#: wp-admin/network/settings.php:355
msgid "Enable administration menus"
msgstr "Aktiver administrasjonsmenyer"
-#: wp-admin/network/settings.php:104
+#: wp-admin/network/settings.php:105
msgid "Operational Settings"
msgstr "Nettverksinnstillinger"
-#: wp-admin/network/settings.php:277
+#: wp-admin/network/settings.php:287
msgid "Upload Settings"
msgstr "Opplastingsinnstillinger"
-#: wp-admin/network/settings.php:205
+#: wp-admin/network/settings.php:206
msgid "New Site Settings"
msgstr "Innstillinger for nye nettsteder"
-#: wp-admin/network/settings.php:123
+#: wp-admin/network/settings.php:124
msgid "Registration Settings"
msgstr "Registreringsinstillinger"
@@ -1255,7 +1269,7 @@ msgstr "Feil eller manglende nettstedadresse."
msgid "Missing email address."
msgstr "Mangler e-postadresse."
-#: wp-admin/includes/network.php:303 wp-admin/network/settings.php:114
+#: wp-admin/includes/network.php:303 wp-admin/network/settings.php:115
msgid "Network Admin Email"
msgstr "E-post til nettverksadmin"
@@ -1264,37 +1278,26 @@ msgstr "E-post til nettverksadmin"
msgid "[%s] New Site Created"
msgstr "[%s] Nytt nettsted opprettet"
-#: wp-admin/network/settings.php:214
+#: wp-admin/network/settings.php:215
msgid "The welcome email sent to new site owners."
msgstr "Velkomst-e-post sendt til nye nettstedseiere."
-#: wp-admin/network/settings.php:280
+#: wp-admin/network/settings.php:290
msgid "Site upload space"
msgstr "Lagringsplass for nettsteder"
-#: wp-admin/network/settings.php:159
+#: wp-admin/network/settings.php:160
msgid "Send the network admin an email notification every time someone registers a site or user account."
msgstr "Send nettverksadmin en e-post hver gang noen registrerer et nettsted eller en brukerkonto."
-#: wp-admin/network/settings.php:175
+#: wp-admin/network/settings.php:176
msgid "Users are not allowed to register these sites. Separate names by spaces."
msgstr "Du har ikke lov til å registrere disse nettstedene. Separer navn med mellomrom."
-#: wp-admin/network/upgrade.php:100
+#: wp-admin/network/upgrade.php:104
msgid "Next Sites"
msgstr "Neste nettsteder"
-#: wp-admin/network/index.php:20 wp-admin/network/settings.php:20
-#: wp-admin/network/site-info.php:50 wp-admin/network/site-settings.php:47
-#: wp-admin/network/site-themes.php:70 wp-admin/network/site-users.php:63
-#: wp-admin/network/sites.php:17 wp-admin/network/sites.php:129
-#: wp-admin/network/upgrade.php:39 wp-admin/network/user-new.php:37
-#: wp-admin/network/users.php:17 wp-admin/network/users.php:26
-#: wp-admin/network/users.php:47 wp-admin/network/users.php:60
-#: wp-admin/network/users.php:109
-msgid "You do not have permission to access this page."
-msgstr "Du har ikke nok rettigheter til å få tilgang til denne siden."
-
#: wp-admin/network/sites.php:110
msgid "Confirm"
msgstr "Bekreft"
@@ -1303,67 +1306,67 @@ msgstr "Bekreft"
msgid "Cannot create an empty user."
msgstr "Kan ikke lage en tom bruker."
-#: wp-admin/network/site-users.php:252
+#: wp-admin/network/site-users.php:244
msgid "Duplicated username or email address."
msgstr "Duplisert brukernavn eller e-postadresse."
-#: wp-admin/network/settings.php:126
+#: wp-admin/network/settings.php:127
msgid "Allow new registrations"
msgstr "Tillat nye registreringer"
-#: wp-admin/network/settings.php:153
+#: wp-admin/network/settings.php:154
msgid "Registration notification"
msgstr "Registreringsbekreftelse"
-#: wp-admin/network/settings.php:164
+#: wp-admin/network/settings.php:165
msgid "Add New Users"
msgstr "Legg til nye brukere"
-#: wp-admin/network/settings.php:171
+#: wp-admin/network/settings.php:172
msgid "Banned Names"
msgstr "Forbudte navn"
-#: wp-admin/network/settings.php:181
+#: wp-admin/network/settings.php:182
msgid "Limited Email Registrations"
msgstr "Begrense e-postregistreringer"
-#: wp-admin/network/settings.php:194
+#: wp-admin/network/settings.php:195
msgid "Banned Email Domains"
msgstr "Forbudte e-postdomener"
-#: wp-admin/network/settings.php:209
+#: wp-admin/network/settings.php:210
msgid "Welcome Email"
msgstr "Velkomst-e-post"
-#: wp-admin/network/settings.php:219
+#: wp-admin/network/settings.php:220
msgid "Welcome User Email"
msgstr "Velkomst-e-post til bruker"
-#: wp-admin/network/settings.php:224
+#: wp-admin/network/settings.php:225
msgid "The welcome email sent to new users."
msgstr "Velkomst-e-post sendt til nye brukere."
-#: wp-admin/network/settings.php:239
+#: wp-admin/network/settings.php:240
msgid "First Page"
msgstr "Første side"
-#: wp-admin/network/settings.php:249
+#: wp-admin/network/settings.php:250
msgid "First Comment"
msgstr "Første kommentar"
-#: wp-admin/network/settings.php:259
+#: wp-admin/network/settings.php:260
msgid "First Comment Author"
msgstr "Forfatter til den første kommentaren"
-#: wp-admin/network/settings.php:268
+#: wp-admin/network/settings.php:278
msgid "First Comment URL"
msgstr "URL for den første kommentaren"
-#: wp-admin/network/settings.php:300
+#: wp-admin/network/settings.php:310
msgid "Max upload file size"
msgstr "Maks filstørrelse ved opplasting"
-#: wp-admin/network/settings.php:318
+#: wp-admin/network/settings.php:328
msgid "Default Language"
msgstr "Standardspråk"
diff --git a/wp-content/languages/continents-cities-nb_NO.mo b/wp-content/languages/continents-cities-nb_NO.mo
index 6225c78..d25c7a0 100644
Binary files a/wp-content/languages/continents-cities-nb_NO.mo and b/wp-content/languages/continents-cities-nb_NO.mo differ
diff --git a/wp-content/languages/continents-cities-nb_NO.po b/wp-content/languages/continents-cities-nb_NO.po
index 483eba3..7e2be86 100644
--- a/wp-content/languages/continents-cities-nb_NO.po
+++ b/wp-content/languages/continents-cities-nb_NO.po
@@ -2,7 +2,7 @@
# This file is distributed under the same license as the Continents & Cities package.
msgid ""
msgstr ""
-"PO-Revision-Date: 2013-09-26 07:05:37+0000\n"
+"PO-Revision-Date: 2016-07-11 07:54:57+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -10,1447 +10,1578 @@ msgstr ""
"X-Generator: GlotPress/2.1.0-alpha\n"
"Project-Id-Version: Continents & Cities\n"
-#: wp-admin/includes/continents-cities.php:140
+#: wp-admin/includes/continents-cities.php:93
+msgid "Bahia Banderas"
+msgstr "Bahia Banderas"
+
+#: wp-admin/includes/continents-cities.php:114
+msgid "Creston"
+msgstr "Creston"
+
+#: wp-admin/includes/continents-cities.php:127
+msgid "Fort Nelson"
+msgstr "Fort Nelson"
+
+#: wp-admin/includes/continents-cities.php:161
+msgid "Kralendijk"
+msgstr "Kralendijk"
+
+#: wp-admin/includes/continents-cities.php:166
+msgid "Lower Princes"
+msgstr "Lower Princes"
+
+#: wp-admin/includes/continents-cities.php:172
+msgid "Matamoros"
+msgstr "Matamoros"
+
+#: wp-admin/includes/continents-cities.php:177
+msgid "Metlakatla"
+msgstr "Metlakatla"
+
+#: wp-admin/includes/continents-cities.php:191
+msgid "Beulah"
+msgstr "Beulah"
+
+#: wp-admin/includes/continents-cities.php:194
+msgid "Ojinaga"
+msgstr "Ojinaga"
+
+#: wp-admin/includes/continents-cities.php:211
+msgid "Santa Isabel"
+msgstr "Santa Isabel"
+
+#: wp-admin/includes/continents-cities.php:212
+msgid "Santarem"
+msgstr "Santarem"
+
+#: wp-admin/includes/continents-cities.php:218
+msgid "Sitka"
+msgstr "Sitka Alaska"
+
+#: wp-admin/includes/continents-cities.php:243
+msgid "Macquarie"
+msgstr "Macquarie"
+
+#: wp-admin/includes/continents-cities.php:250
+msgid "Troll"
+msgstr "Troll"
+
+#: wp-admin/includes/continents-cities.php:269
+msgid "Barnaul"
+msgstr "Barnaul"
+
+#: wp-admin/includes/continents-cities.php:274
+msgid "Chita"
+msgstr "Chita"
+
+#: wp-admin/includes/continents-cities.php:287
+msgid "Hebron"
+msgstr "Hebron"
+
+#: wp-admin/includes/continents-cities.php:300
+msgid "Kathmandu"
+msgstr "Kathmandu"
+
+#: wp-admin/includes/continents-cities.php:302
+msgid "Khandyga"
+msgstr "Khandyga"
+
+#: wp-admin/includes/continents-cities.php:315
+msgid "Novokuznetsk"
+msgstr "Novokuznetsk"
+
+#: wp-admin/includes/continents-cities.php:332
+msgid "Srednekolymsk"
+msgstr "Srednekolymsk"
+
+#: wp-admin/includes/continents-cities.php:341
+msgid "Tomsk"
+msgstr "Tomsk"
+
+#: wp-admin/includes/continents-cities.php:346
+msgid "Ust-Nera"
+msgstr "Ust-Nera"
+
+#: wp-admin/includes/continents-cities.php:432
+msgid "Astrakhan"
+msgstr "Astrakhan"
+
+#: wp-admin/includes/continents-cities.php:441
+msgid "Busingen"
+msgstr "Busingen"
+
+#: wp-admin/includes/continents-cities.php:453
+msgid "Kirov"
+msgstr "Kirov"
+
+#: wp-admin/includes/continents-cities.php:481
+msgid "Ulyanovsk"
+msgstr "Ulyanovsk"
+
+#: wp-admin/includes/continents-cities.php:509
+msgid "Bougainville"
+msgstr "Bougainville"
+
+#: wp-admin/includes/continents-cities.php:511
+msgid "Chuuk"
+msgstr "Chuuk"
+
+#: wp-admin/includes/continents-cities.php:537
+msgid "Pohnpei"
+msgstr "Pohnpei"
+
+#: wp-admin/includes/continents-cities.php:39
+msgid "Juba"
+msgstr "Juba"
+
+#: wp-admin/includes/continents-cities.php:83
+msgid "Salta"
+msgstr "Salta"
+
+#: wp-admin/includes/continents-cities.php:149
msgid "Vincennes"
msgstr "Vincennes"
-#: wp-admin/includes/continents-cities.php:141
+#: wp-admin/includes/continents-cities.php:150
msgid "Winamac"
msgstr "Winamac"
-#: wp-admin/includes/continents-cities.php:142
+#: wp-admin/includes/continents-cities.php:152
msgid "Inuvik"
msgstr "Inuvik"
-#: wp-admin/includes/continents-cities.php:143
+#: wp-admin/includes/continents-cities.php:153
msgid "Iqaluit"
msgstr "Iqaluit"
-#: wp-admin/includes/continents-cities.php:144
+#: wp-admin/includes/continents-cities.php:154
msgid "Jamaica"
msgstr "Jamaica"
-#: wp-admin/includes/continents-cities.php:145
+#: wp-admin/includes/continents-cities.php:156
msgid "Juneau"
msgstr "Juneau"
-#: wp-admin/includes/continents-cities.php:146
+#: wp-admin/includes/continents-cities.php:157
msgid "Kentucky"
msgstr "Kentucky"
-#: wp-admin/includes/continents-cities.php:147
+#: wp-admin/includes/continents-cities.php:158
+#: wp-admin/includes/continents-cities.php:165
msgid "Louisville"
msgstr "Louisville"
-#: wp-admin/includes/continents-cities.php:148
+#: wp-admin/includes/continents-cities.php:159
msgid "Monticello"
msgstr "Monticello"
-#: wp-admin/includes/continents-cities.php:149
+#: wp-admin/includes/continents-cities.php:160
msgid "Knox IN"
msgstr "Knox IN"
-#: wp-admin/includes/continents-cities.php:150
+#: wp-admin/includes/continents-cities.php:162
msgid "La Paz"
msgstr "La Paz"
-#: wp-admin/includes/continents-cities.php:151
+#: wp-admin/includes/continents-cities.php:163
msgid "Lima"
msgstr "Lima"
-#: wp-admin/includes/continents-cities.php:152
+#: wp-admin/includes/continents-cities.php:164
msgid "Los Angeles"
msgstr "Los Angeles"
-#: wp-admin/includes/continents-cities.php:153
+#: wp-admin/includes/continents-cities.php:167
msgid "Maceio"
msgstr "Maceio"
-#: wp-admin/includes/continents-cities.php:154
+#: wp-admin/includes/continents-cities.php:168
msgid "Managua"
msgstr "Managua"
-#: wp-admin/includes/continents-cities.php:155
+#: wp-admin/includes/continents-cities.php:169
msgid "Manaus"
msgstr "Manaus"
-#: wp-admin/includes/continents-cities.php:156
+#: wp-admin/includes/continents-cities.php:170
msgid "Marigot"
msgstr "Marigot"
-#: wp-admin/includes/continents-cities.php:157
+#: wp-admin/includes/continents-cities.php:171
msgid "Martinique"
msgstr "Martinique"
-#: wp-admin/includes/continents-cities.php:158
+#: wp-admin/includes/continents-cities.php:173
msgid "Mazatlan"
msgstr "Mazatlan"
-#: wp-admin/includes/continents-cities.php:159
+#: wp-admin/includes/continents-cities.php:175
msgid "Menominee"
msgstr "Menominee"
-#: wp-admin/includes/continents-cities.php:160
+#: wp-admin/includes/continents-cities.php:176
msgid "Merida"
msgstr "Merida"
-#: wp-admin/includes/continents-cities.php:161
+#: wp-admin/includes/continents-cities.php:178
msgid "Mexico City"
msgstr "Mexico by"
-#: wp-admin/includes/continents-cities.php:162
+#: wp-admin/includes/continents-cities.php:179
msgid "Miquelon"
msgstr "Miquelon"
-#: wp-admin/includes/continents-cities.php:163
+#: wp-admin/includes/continents-cities.php:180
msgid "Moncton"
msgstr "Moncton"
-#: wp-admin/includes/continents-cities.php:164
+#: wp-admin/includes/continents-cities.php:181
msgid "Monterrey"
msgstr "Monterrey"
-#: wp-admin/includes/continents-cities.php:165
+#: wp-admin/includes/continents-cities.php:182
msgid "Montevideo"
msgstr "Montevideo"
-#: wp-admin/includes/continents-cities.php:166
+#: wp-admin/includes/continents-cities.php:183
msgid "Montreal"
msgstr "Montreal"
-#: wp-admin/includes/continents-cities.php:167
+#: wp-admin/includes/continents-cities.php:184
msgid "Montserrat"
msgstr "Montserrat"
-#: wp-admin/includes/continents-cities.php:168
+#: wp-admin/includes/continents-cities.php:185
msgid "Nassau"
msgstr "Nassau"
-#: wp-admin/includes/continents-cities.php:169
+#: wp-admin/includes/continents-cities.php:186
msgid "New York"
msgstr "New York"
-#: wp-admin/includes/continents-cities.php:170
+#: wp-admin/includes/continents-cities.php:187
msgid "Nipigon"
msgstr "Nipigon"
-#: wp-admin/includes/continents-cities.php:171
+#: wp-admin/includes/continents-cities.php:188
msgid "Nome"
msgstr "Nome"
-#: wp-admin/includes/continents-cities.php:172
+#: wp-admin/includes/continents-cities.php:189
msgid "Noronha"
msgstr "Noronha"
-#: wp-admin/includes/continents-cities.php:173
+#: wp-admin/includes/continents-cities.php:190
msgid "North Dakota"
msgstr "Nord-Dakota"
-#: wp-admin/includes/continents-cities.php:174
+#: wp-admin/includes/continents-cities.php:192
msgid "Center"
msgstr "Midt"
-#: wp-admin/includes/continents-cities.php:175
+#: wp-admin/includes/continents-cities.php:193
msgid "New Salem"
msgstr "New Salem"
-#: wp-admin/includes/continents-cities.php:176
+#: wp-admin/includes/continents-cities.php:195
msgid "Panama"
msgstr "Panama"
-#: wp-admin/includes/continents-cities.php:177
+#: wp-admin/includes/continents-cities.php:196
msgid "Pangnirtung"
msgstr "Pangnirtung"
-#: wp-admin/includes/continents-cities.php:178
+#: wp-admin/includes/continents-cities.php:197
msgid "Paramaribo"
msgstr "Paramaribo"
-#: wp-admin/includes/continents-cities.php:179
+#: wp-admin/includes/continents-cities.php:198
msgid "Phoenix"
msgstr "Phoenix"
-#: wp-admin/includes/continents-cities.php:180
+#: wp-admin/includes/continents-cities.php:200
msgid "Port-au-Prince"
msgstr "Port-au-Prince"
-#: wp-admin/includes/continents-cities.php:181
+#: wp-admin/includes/continents-cities.php:199
msgid "Port of Spain"
msgstr "Port of Spain"
-#: wp-admin/includes/continents-cities.php:182
+#: wp-admin/includes/continents-cities.php:201
msgid "Porto Acre"
msgstr "Porto Acre"
-#: wp-admin/includes/continents-cities.php:183
+#: wp-admin/includes/continents-cities.php:202
msgid "Porto Velho"
msgstr "Porto Velho"
-#: wp-admin/includes/continents-cities.php:184
+#: wp-admin/includes/continents-cities.php:203
msgid "Puerto Rico"
msgstr "Puerto Rico"
-#: wp-admin/includes/continents-cities.php:185
+#: wp-admin/includes/continents-cities.php:204
msgid "Rainy River"
msgstr "Rainy River"
-#: wp-admin/includes/continents-cities.php:186
+#: wp-admin/includes/continents-cities.php:205
msgid "Rankin Inlet"
msgstr "Rankin Inlet"
-#: wp-admin/includes/continents-cities.php:187
+#: wp-admin/includes/continents-cities.php:206
msgid "Recife"
msgstr "Recife"
-#: wp-admin/includes/continents-cities.php:188
+#: wp-admin/includes/continents-cities.php:207
msgid "Regina"
msgstr "Regina"
-#: wp-admin/includes/continents-cities.php:189
+#: wp-admin/includes/continents-cities.php:208
msgid "Resolute"
msgstr "Resolute"
-#: wp-admin/includes/continents-cities.php:190
+#: wp-admin/includes/continents-cities.php:209
msgid "Rio Branco"
msgstr "Rio Branco"
-#: wp-admin/includes/continents-cities.php:191
+#: wp-admin/includes/continents-cities.php:210
msgid "Rosario"
msgstr "Rosario"
-#: wp-admin/includes/continents-cities.php:192
+#: wp-admin/includes/continents-cities.php:213
msgid "Santiago"
msgstr "Santiago"
-#: wp-admin/includes/continents-cities.php:193
+#: wp-admin/includes/continents-cities.php:214
msgid "Santo Domingo"
msgstr "Santo Domingo"
-#: wp-admin/includes/continents-cities.php:194
+#: wp-admin/includes/continents-cities.php:215
msgid "Sao Paulo"
msgstr "Sao Paulo"
-#: wp-admin/includes/continents-cities.php:195
+#: wp-admin/includes/continents-cities.php:216
msgid "Scoresbysund"
msgstr "Ittoqqortoormiit (Scoresbysund)"
-#: wp-admin/includes/continents-cities.php:196
+#: wp-admin/includes/continents-cities.php:217
msgid "Shiprock"
msgstr "Shiprock"
-#: wp-admin/includes/continents-cities.php:197
+#: wp-admin/includes/continents-cities.php:219
msgid "St Barthelemy"
msgstr "St Barthelemy"
-#: wp-admin/includes/continents-cities.php:198
+#: wp-admin/includes/continents-cities.php:220
msgid "St Johns"
msgstr "St Johns"
-#: wp-admin/includes/continents-cities.php:199
+#: wp-admin/includes/continents-cities.php:221
msgid "St Kitts"
msgstr "St Kitts"
-#: wp-admin/includes/continents-cities.php:200
+#: wp-admin/includes/continents-cities.php:222
msgid "St Lucia"
msgstr "St Lucia"
-#: wp-admin/includes/continents-cities.php:201
+#: wp-admin/includes/continents-cities.php:223
msgid "St Thomas"
msgstr "St Thomas"
-#: wp-admin/includes/continents-cities.php:202
+#: wp-admin/includes/continents-cities.php:224
msgid "St Vincent"
msgstr "St Vincent"
-#: wp-admin/includes/continents-cities.php:203
+#: wp-admin/includes/continents-cities.php:225
msgid "Swift Current"
msgstr "Swift Current"
-#: wp-admin/includes/continents-cities.php:204
+#: wp-admin/includes/continents-cities.php:226
msgid "Tegucigalpa"
msgstr "Tegucigalpa"
-#: wp-admin/includes/continents-cities.php:205
+#: wp-admin/includes/continents-cities.php:227
msgid "Thule"
msgstr "Thule"
-#: wp-admin/includes/continents-cities.php:206
+#: wp-admin/includes/continents-cities.php:228
msgid "Thunder Bay"
msgstr "Thunder Bay"
-#: wp-admin/includes/continents-cities.php:207
+#: wp-admin/includes/continents-cities.php:229
msgid "Tijuana"
msgstr "Tijuana"
-#: wp-admin/includes/continents-cities.php:208
+#: wp-admin/includes/continents-cities.php:230
msgid "Toronto"
msgstr "Toronto"
-#: wp-admin/includes/continents-cities.php:209
+#: wp-admin/includes/continents-cities.php:231
msgid "Tortola"
msgstr "Tortola"
-#: wp-admin/includes/continents-cities.php:210
+#: wp-admin/includes/continents-cities.php:232
msgid "Vancouver"
msgstr "Vancouver"
-#: wp-admin/includes/continents-cities.php:211
+#: wp-admin/includes/continents-cities.php:233
msgid "Virgin"
msgstr "Virgin"
-#: wp-admin/includes/continents-cities.php:212
+#: wp-admin/includes/continents-cities.php:234
msgid "Whitehorse"
msgstr "Whitehorse"
-#: wp-admin/includes/continents-cities.php:213
+#: wp-admin/includes/continents-cities.php:235
msgid "Winnipeg"
msgstr "Winnipeg"
-#: wp-admin/includes/continents-cities.php:214
+#: wp-admin/includes/continents-cities.php:236
msgid "Yakutat"
msgstr "Yakutat"
-#: wp-admin/includes/continents-cities.php:215
+#: wp-admin/includes/continents-cities.php:237
msgid "Yellowknife"
msgstr "Yellowknife"
-#: wp-admin/includes/continents-cities.php:216
+#: wp-admin/includes/continents-cities.php:239
msgid "Antarctica"
msgstr "Antarktika"
-#: wp-admin/includes/continents-cities.php:217
+#: wp-admin/includes/continents-cities.php:240
msgid "Casey"
msgstr "Casey"
-#: wp-admin/includes/continents-cities.php:218
+#: wp-admin/includes/continents-cities.php:241
msgid "Davis"
msgstr "Davis"
-#: wp-admin/includes/continents-cities.php:219
+#: wp-admin/includes/continents-cities.php:242
msgid "DumontDUrville"
msgstr "DumontDUrville"
-#: wp-admin/includes/continents-cities.php:220
+#: wp-admin/includes/continents-cities.php:244
msgid "Mawson"
msgstr "Mawson"
-#: wp-admin/includes/continents-cities.php:221
+#: wp-admin/includes/continents-cities.php:245
msgid "McMurdo"
msgstr "McMurdo"
-#: wp-admin/includes/continents-cities.php:222
+#: wp-admin/includes/continents-cities.php:246
msgid "Palmer"
msgstr "Palmer"
-#: wp-admin/includes/continents-cities.php:223
+#: wp-admin/includes/continents-cities.php:247
msgid "Rothera"
msgstr "Rothera"
-#: wp-admin/includes/continents-cities.php:224
+#: wp-admin/includes/continents-cities.php:248
msgid "South Pole"
msgstr "Sørpolen"
-#: wp-admin/includes/continents-cities.php:225
+#: wp-admin/includes/continents-cities.php:249
msgid "Syowa"
msgstr "Shōwa"
-#: wp-admin/includes/continents-cities.php:226
+#: wp-admin/includes/continents-cities.php:251
msgid "Vostok"
msgstr "Vostok"
-#: wp-admin/includes/continents-cities.php:227
+#: wp-admin/includes/continents-cities.php:253
msgid "Arctic"
msgstr "Arktis"
-#: wp-admin/includes/continents-cities.php:228
+#: wp-admin/includes/continents-cities.php:254
msgid "Longyearbyen"
msgstr "Longyearbyen"
-#: wp-admin/includes/continents-cities.php:229
+#: wp-admin/includes/continents-cities.php:256
msgid "Asia"
msgstr "Asia"
-#: wp-admin/includes/continents-cities.php:230
+#: wp-admin/includes/continents-cities.php:257
msgid "Aden"
msgstr "Aden"
-#: wp-admin/includes/continents-cities.php:231
+#: wp-admin/includes/continents-cities.php:258
msgid "Almaty"
msgstr "Almaty"
-#: wp-admin/includes/continents-cities.php:232
+#: wp-admin/includes/continents-cities.php:259
msgid "Amman"
msgstr "Amman"
-#: wp-admin/includes/continents-cities.php:233
+#: wp-admin/includes/continents-cities.php:260
msgid "Anadyr"
msgstr "Anadyr"
-#: wp-admin/includes/continents-cities.php:234
+#: wp-admin/includes/continents-cities.php:261
msgid "Aqtau"
msgstr "Aqtau"
-#: wp-admin/includes/continents-cities.php:235
+#: wp-admin/includes/continents-cities.php:262
msgid "Aqtobe"
msgstr "Aqtobe"
-#: wp-admin/includes/continents-cities.php:236
+#: wp-admin/includes/continents-cities.php:263
msgid "Ashgabat"
msgstr "Asjkhabad"
-#: wp-admin/includes/continents-cities.php:237
+#: wp-admin/includes/continents-cities.php:264
msgid "Ashkhabad"
msgstr "Asjkhabad"
-#: wp-admin/includes/continents-cities.php:238
+#: wp-admin/includes/continents-cities.php:265
msgid "Baghdad"
msgstr "Bagdad"
-#: wp-admin/includes/continents-cities.php:239
+#: wp-admin/includes/continents-cities.php:266
msgid "Bahrain"
msgstr "Bahrain"
-#: wp-admin/includes/continents-cities.php:240
+#: wp-admin/includes/continents-cities.php:267
msgid "Baku"
msgstr "Baku"
-#: wp-admin/includes/continents-cities.php:241
+#: wp-admin/includes/continents-cities.php:268
msgid "Bangkok"
msgstr "Bangkok"
-#: wp-admin/includes/continents-cities.php:242
+#: wp-admin/includes/continents-cities.php:270
msgid "Beirut"
msgstr "Beirut"
-#: wp-admin/includes/continents-cities.php:243
+#: wp-admin/includes/continents-cities.php:271
msgid "Bishkek"
msgstr "Bisjkek"
-#: wp-admin/includes/continents-cities.php:244
+#: wp-admin/includes/continents-cities.php:272
msgid "Brunei"
msgstr "Brunei"
-#: wp-admin/includes/continents-cities.php:245
+#: wp-admin/includes/continents-cities.php:273
msgid "Calcutta"
msgstr "Kolkata"
-#: wp-admin/includes/continents-cities.php:246
+#: wp-admin/includes/continents-cities.php:275
msgid "Choibalsan"
msgstr "Tsjojbalsan"
-#: wp-admin/includes/continents-cities.php:247
+#: wp-admin/includes/continents-cities.php:276
msgid "Chongqing"
msgstr "Chongqing"
-#: wp-admin/includes/continents-cities.php:248
+#: wp-admin/includes/continents-cities.php:277
msgid "Chungking"
msgstr "Chongqing"
-#: wp-admin/includes/continents-cities.php:249
+#: wp-admin/includes/continents-cities.php:278
msgid "Colombo"
msgstr "Colombo"
-#: wp-admin/includes/continents-cities.php:250
+#: wp-admin/includes/continents-cities.php:279
msgid "Dacca"
msgstr "Dacca"
-#: wp-admin/includes/continents-cities.php:251
+#: wp-admin/includes/continents-cities.php:280
msgid "Damascus"
msgstr "Damaskus"
-#: wp-admin/includes/continents-cities.php:252
+#: wp-admin/includes/continents-cities.php:281
msgid "Dhaka"
msgstr "Dhaka"
-#: wp-admin/includes/continents-cities.php:253
+#: wp-admin/includes/continents-cities.php:282
msgid "Dili"
msgstr "Dili"
-#: wp-admin/includes/continents-cities.php:254
+#: wp-admin/includes/continents-cities.php:283
msgid "Dubai"
msgstr "Dubai"
-#: wp-admin/includes/continents-cities.php:255
+#: wp-admin/includes/continents-cities.php:284
msgid "Dushanbe"
msgstr "Dusjanbe"
-#: wp-admin/includes/continents-cities.php:256
+#: wp-admin/includes/continents-cities.php:285
msgid "Gaza"
msgstr "Gaza"
-#: wp-admin/includes/continents-cities.php:257
+#: wp-admin/includes/continents-cities.php:286
msgid "Harbin"
msgstr "Harbin"
-#: wp-admin/includes/continents-cities.php:258
+#: wp-admin/includes/continents-cities.php:288
msgid "Ho Chi Minh"
msgstr "Ho Chi Minh-byen"
-#: wp-admin/includes/continents-cities.php:259
+#: wp-admin/includes/continents-cities.php:289
msgid "Hong Kong"
msgstr "Hong Kong"
-#: wp-admin/includes/continents-cities.php:260
+#: wp-admin/includes/continents-cities.php:290
msgid "Hovd"
msgstr "Hovd"
-#: wp-admin/includes/continents-cities.php:261
+#: wp-admin/includes/continents-cities.php:291
msgid "Irkutsk"
msgstr "Irkutsk"
-#: wp-admin/includes/continents-cities.php:262
+#: wp-admin/includes/continents-cities.php:292
+#: wp-admin/includes/continents-cities.php:449
msgid "Istanbul"
msgstr "Istanbul"
-#: wp-admin/includes/continents-cities.php:263
+#: wp-admin/includes/continents-cities.php:293
msgid "Jakarta"
msgstr "Jakarta"
-#: wp-admin/includes/continents-cities.php:264
+#: wp-admin/includes/continents-cities.php:294
msgid "Jayapura"
msgstr "Jaya Pura"
-#: wp-admin/includes/continents-cities.php:265
+#: wp-admin/includes/continents-cities.php:295
msgid "Jerusalem"
msgstr "Jerusalem"
-#: wp-admin/includes/continents-cities.php:266
+#: wp-admin/includes/continents-cities.php:296
msgid "Kabul"
msgstr "Kabul"
-#: wp-admin/includes/continents-cities.php:267
+#: wp-admin/includes/continents-cities.php:297
msgid "Kamchatka"
msgstr "Kamtsjatka"
-#: wp-admin/includes/continents-cities.php:268
+#: wp-admin/includes/continents-cities.php:298
msgid "Karachi"
msgstr "Karachi"
-#: wp-admin/includes/continents-cities.php:269
+#: wp-admin/includes/continents-cities.php:299
msgid "Kashgar"
msgstr "Kashgar"
-#: wp-admin/includes/continents-cities.php:270
+#: wp-admin/includes/continents-cities.php:301
msgid "Katmandu"
msgstr "Katmandu"
-#: wp-admin/includes/continents-cities.php:271
+#: wp-admin/includes/continents-cities.php:303
msgid "Kolkata"
msgstr "Kolkata"
-#: wp-admin/includes/continents-cities.php:272
+#: wp-admin/includes/continents-cities.php:304
msgid "Krasnoyarsk"
msgstr "Krasnojarsk"
-#: wp-admin/includes/continents-cities.php:273
+#: wp-admin/includes/continents-cities.php:305
msgid "Kuala Lumpur"
msgstr "Kuala Lumpur"
-#: wp-admin/includes/continents-cities.php:274
+#: wp-admin/includes/continents-cities.php:306
msgid "Kuching"
msgstr "Kuching"
-#: wp-admin/includes/continents-cities.php:275
+#: wp-admin/includes/continents-cities.php:307
msgid "Kuwait"
msgstr "Kuwait"
-#: wp-admin/includes/continents-cities.php:276
+#: wp-admin/includes/continents-cities.php:308
msgid "Macao"
msgstr "Macao"
-#: wp-admin/includes/continents-cities.php:277
+#: wp-admin/includes/continents-cities.php:309
msgid "Macau"
msgstr "Macau"
-#: wp-admin/includes/continents-cities.php:278
+#: wp-admin/includes/continents-cities.php:310
msgid "Magadan"
msgstr "Magadan"
-#: wp-admin/includes/continents-cities.php:279
+#: wp-admin/includes/continents-cities.php:311
msgid "Makassar"
msgstr "Makassar"
-#: wp-admin/includes/continents-cities.php:280
+#: wp-admin/includes/continents-cities.php:312
msgid "Manila"
msgstr "Manila"
-#: wp-admin/includes/continents-cities.php:281
+#: wp-admin/includes/continents-cities.php:313
msgid "Muscat"
msgstr "Muskat"
-#: wp-admin/includes/continents-cities.php:282
+#: wp-admin/includes/continents-cities.php:314
+#: wp-admin/includes/continents-cities.php:464
msgid "Nicosia"
msgstr "Nicosia"
-#: wp-admin/includes/continents-cities.php:283
+#: wp-admin/includes/continents-cities.php:316
msgid "Novosibirsk"
msgstr "Novosibirsk"
-#: wp-admin/includes/continents-cities.php:284
+#: wp-admin/includes/continents-cities.php:317
msgid "Omsk"
msgstr "Omsk"
-#: wp-admin/includes/continents-cities.php:285
+#: wp-admin/includes/continents-cities.php:318
msgid "Oral"
msgstr "Uralsk"
-#: wp-admin/includes/continents-cities.php:286
+#: wp-admin/includes/continents-cities.php:319
msgid "Phnom Penh"
msgstr "Phnom Penh"
-#: wp-admin/includes/continents-cities.php:287
+#: wp-admin/includes/continents-cities.php:320
msgid "Pontianak"
msgstr "Pontianak"
-#: wp-admin/includes/continents-cities.php:288
+#: wp-admin/includes/continents-cities.php:321
msgid "Pyongyang"
msgstr "Pyongyang"
-#: wp-admin/includes/continents-cities.php:289
+#: wp-admin/includes/continents-cities.php:322
msgid "Qatar"
msgstr "Qatar"
-#: wp-admin/includes/continents-cities.php:290
+#: wp-admin/includes/continents-cities.php:323
msgid "Qyzylorda"
msgstr "Kyzylorda"
-#: wp-admin/includes/continents-cities.php:291
+#: wp-admin/includes/continents-cities.php:324
msgid "Rangoon"
msgstr "Yangôn"
-#: wp-admin/includes/continents-cities.php:292
+#: wp-admin/includes/continents-cities.php:325
msgid "Riyadh"
msgstr "Riyadh"
-#: wp-admin/includes/continents-cities.php:293
+#: wp-admin/includes/continents-cities.php:326
msgid "Saigon"
msgstr "Ho Chi Minh-byen"
-#: wp-admin/includes/continents-cities.php:294
+#: wp-admin/includes/continents-cities.php:327
msgid "Sakhalin"
msgstr "Sakhalin"
-#: wp-admin/includes/continents-cities.php:295
+#: wp-admin/includes/continents-cities.php:328
msgid "Samarkand"
msgstr "Samarkand"
-#: wp-admin/includes/continents-cities.php:296
+#: wp-admin/includes/continents-cities.php:329
msgid "Seoul"
msgstr "Seoul"
-#: wp-admin/includes/continents-cities.php:297
+#: wp-admin/includes/continents-cities.php:330
msgid "Shanghai"
msgstr "Shanghai"
-#: wp-admin/includes/continents-cities.php:298
+#: wp-admin/includes/continents-cities.php:331
msgid "Singapore"
msgstr "Singapore"
-#: wp-admin/includes/continents-cities.php:299
+#: wp-admin/includes/continents-cities.php:333
msgid "Taipei"
msgstr "Taipei"
-#: wp-admin/includes/continents-cities.php:300
+#: wp-admin/includes/continents-cities.php:334
msgid "Tashkent"
msgstr "Tasjkent"
-#: wp-admin/includes/continents-cities.php:301
+#: wp-admin/includes/continents-cities.php:335
msgid "Tbilisi"
msgstr "Tbilisi"
-#: wp-admin/includes/continents-cities.php:302
+#: wp-admin/includes/continents-cities.php:336
msgid "Tehran"
msgstr "Teheran"
-#: wp-admin/includes/continents-cities.php:303
+#: wp-admin/includes/continents-cities.php:337
msgid "Tel Aviv"
msgstr "Tel Aviv"
-#: wp-admin/includes/continents-cities.php:304
+#: wp-admin/includes/continents-cities.php:338
msgid "Thimbu"
msgstr "Thimpu"
-#: wp-admin/includes/continents-cities.php:305
+#: wp-admin/includes/continents-cities.php:339
msgid "Thimphu"
msgstr "Thimphu"
-#: wp-admin/includes/continents-cities.php:306
+#: wp-admin/includes/continents-cities.php:340
msgid "Tokyo"
msgstr "Tokyo"
-#: wp-admin/includes/continents-cities.php:307
+#: wp-admin/includes/continents-cities.php:342
msgid "Ujung Pandang"
msgstr "Ujung Pandang"
-#: wp-admin/includes/continents-cities.php:308
+#: wp-admin/includes/continents-cities.php:343
msgid "Ulaanbaatar"
msgstr "Ulan Bator"
-#: wp-admin/includes/continents-cities.php:309
+#: wp-admin/includes/continents-cities.php:344
msgid "Ulan Bator"
msgstr "Ulan Bator"
-#: wp-admin/includes/continents-cities.php:310
+#: wp-admin/includes/continents-cities.php:345
msgid "Urumqi"
msgstr "Urumqi"
-#: wp-admin/includes/continents-cities.php:311
+#: wp-admin/includes/continents-cities.php:347
msgid "Vientiane"
msgstr "Vientiane"
-#: wp-admin/includes/continents-cities.php:312
+#: wp-admin/includes/continents-cities.php:348
msgid "Vladivostok"
msgstr "Vladivostok"
-#: wp-admin/includes/continents-cities.php:313
+#: wp-admin/includes/continents-cities.php:349
msgid "Yakutsk"
msgstr "Jakutsk"
-#: wp-admin/includes/continents-cities.php:314
+#: wp-admin/includes/continents-cities.php:350
msgid "Yekaterinburg"
msgstr "Jekaterinburg"
-#: wp-admin/includes/continents-cities.php:315
+#: wp-admin/includes/continents-cities.php:351
msgid "Yerevan"
msgstr "Jerevan"
-#: wp-admin/includes/continents-cities.php:316
+#: wp-admin/includes/continents-cities.php:353
msgid "Atlantic"
msgstr "Atlanterhavet"
-#: wp-admin/includes/continents-cities.php:317
+#: wp-admin/includes/continents-cities.php:354
msgid "Azores"
msgstr "Azorene"
-#: wp-admin/includes/continents-cities.php:318
+#: wp-admin/includes/continents-cities.php:355
msgid "Bermuda"
msgstr "Bermuda"
-#: wp-admin/includes/continents-cities.php:319
+#: wp-admin/includes/continents-cities.php:356
msgid "Canary"
msgstr "Kanariøyene"
-#: wp-admin/includes/continents-cities.php:320
+#: wp-admin/includes/continents-cities.php:357
msgid "Cape Verde"
msgstr "Cape Verde"
-#: wp-admin/includes/continents-cities.php:321
+#: wp-admin/includes/continents-cities.php:358
msgid "Faeroe"
msgstr "Færøyene"
-#: wp-admin/includes/continents-cities.php:322
+#: wp-admin/includes/continents-cities.php:359
msgid "Faroe"
msgstr "Færøyene"
-#: wp-admin/includes/continents-cities.php:323
+#: wp-admin/includes/continents-cities.php:360
msgid "Jan Mayen"
msgstr "Jan Mayen"
-#: wp-admin/includes/continents-cities.php:324
+#: wp-admin/includes/continents-cities.php:361
msgid "Madeira"
msgstr "Madeira"
-#: wp-admin/includes/continents-cities.php:325
+#: wp-admin/includes/continents-cities.php:362
msgid "Reykjavik"
msgstr "Reykjavik"
-#: wp-admin/includes/continents-cities.php:326
+#: wp-admin/includes/continents-cities.php:363
msgid "South Georgia"
msgstr "Sør-Georgia"
-#: wp-admin/includes/continents-cities.php:327
+#: wp-admin/includes/continents-cities.php:364
msgid "St Helena"
msgstr "St Helena"
-#: wp-admin/includes/continents-cities.php:328
+#: wp-admin/includes/continents-cities.php:365
msgid "Stanley"
msgstr "Stanley"
-#: wp-admin/includes/continents-cities.php:329
+#: wp-admin/includes/continents-cities.php:367
msgid "Australia"
msgstr "Australia"
-#: wp-admin/includes/continents-cities.php:330
+#: wp-admin/includes/continents-cities.php:368
msgid "ACT"
msgstr "ACT"
-#: wp-admin/includes/continents-cities.php:331
+#: wp-admin/includes/continents-cities.php:369
msgid "Adelaide"
msgstr "Adelaide"
-#: wp-admin/includes/continents-cities.php:332
+#: wp-admin/includes/continents-cities.php:370
msgid "Brisbane"
msgstr "Brisbane"
-#: wp-admin/includes/continents-cities.php:333
+#: wp-admin/includes/continents-cities.php:371
msgid "Broken Hill"
msgstr "Broken Hill"
-#: wp-admin/includes/continents-cities.php:334
+#: wp-admin/includes/continents-cities.php:372
msgid "Canberra"
msgstr "Canberra"
-#: wp-admin/includes/continents-cities.php:335
+#: wp-admin/includes/continents-cities.php:373
msgid "Currie"
msgstr "Currie"
-#: wp-admin/includes/continents-cities.php:336
+#: wp-admin/includes/continents-cities.php:374
msgid "Darwin"
msgstr "Darwin"
-#: wp-admin/includes/continents-cities.php:337
+#: wp-admin/includes/continents-cities.php:375
msgid "Eucla"
msgstr "Eucla"
-#: wp-admin/includes/continents-cities.php:338
+#: wp-admin/includes/continents-cities.php:376
msgid "Hobart"
msgstr "Hobart"
-#: wp-admin/includes/continents-cities.php:339
+#: wp-admin/includes/continents-cities.php:377
msgid "LHI"
msgstr "Lord Howe-øya"
-#: wp-admin/includes/continents-cities.php:340
+#: wp-admin/includes/continents-cities.php:378
msgid "Lindeman"
msgstr "Lindeman"
-#: wp-admin/includes/continents-cities.php:341
+#: wp-admin/includes/continents-cities.php:379
msgid "Lord Howe"
msgstr "Lord Howe"
-#: wp-admin/includes/continents-cities.php:342
+#: wp-admin/includes/continents-cities.php:380
msgid "Melbourne"
msgstr "Melbourne"
-#: wp-admin/includes/continents-cities.php:343
+#: wp-admin/includes/continents-cities.php:382
msgid "North"
msgstr "Nord"
-#: wp-admin/includes/continents-cities.php:344
+#: wp-admin/includes/continents-cities.php:381
msgid "NSW"
msgstr "NSW"
-#: wp-admin/includes/continents-cities.php:345
+#: wp-admin/includes/continents-cities.php:383
msgid "Perth"
msgstr "Perth"
-#: wp-admin/includes/continents-cities.php:346
+#: wp-admin/includes/continents-cities.php:384
msgid "Queensland"
msgstr "Queensland"
-#: wp-admin/includes/continents-cities.php:347
+#: wp-admin/includes/continents-cities.php:385
msgid "South"
msgstr "Sør"
-#: wp-admin/includes/continents-cities.php:348
+#: wp-admin/includes/continents-cities.php:386
msgid "Sydney"
msgstr "Sydney"
-#: wp-admin/includes/continents-cities.php:349
+#: wp-admin/includes/continents-cities.php:387
msgid "Tasmania"
msgstr "Tasmania"
-#: wp-admin/includes/continents-cities.php:350
+#: wp-admin/includes/continents-cities.php:388
msgid "Victoria"
msgstr "Victoria"
-#: wp-admin/includes/continents-cities.php:351
+#: wp-admin/includes/continents-cities.php:389
msgid "West"
msgstr "Vest"
-#: wp-admin/includes/continents-cities.php:352
+#: wp-admin/includes/continents-cities.php:390
msgid "Yancowinna"
msgstr "Yancowinna"
-#: wp-admin/includes/continents-cities.php:353
+#: wp-admin/includes/continents-cities.php:392
msgid "Etc"
msgstr "Etc"
-#: wp-admin/includes/continents-cities.php:354
+#: wp-admin/includes/continents-cities.php:393
msgid "GMT"
msgstr "GMT"
-#: wp-admin/includes/continents-cities.php:355
+#: wp-admin/includes/continents-cities.php:394
msgid "GMT+0"
msgstr "GMT+0"
-#: wp-admin/includes/continents-cities.php:356
+#: wp-admin/includes/continents-cities.php:395
msgid "GMT+1"
msgstr "GMT+1"
-#: wp-admin/includes/continents-cities.php:357
+#: wp-admin/includes/continents-cities.php:396
msgid "GMT+10"
msgstr "GMT+10"
-#: wp-admin/includes/continents-cities.php:358
+#: wp-admin/includes/continents-cities.php:397
msgid "GMT+11"
msgstr "GMT+11"
-#: wp-admin/includes/continents-cities.php:359
+#: wp-admin/includes/continents-cities.php:398
msgid "GMT+12"
msgstr "GMT+12"
-#: wp-admin/includes/continents-cities.php:360
+#: wp-admin/includes/continents-cities.php:399
msgid "GMT+2"
msgstr "GMT+2"
-#: wp-admin/includes/continents-cities.php:361
+#: wp-admin/includes/continents-cities.php:400
msgid "GMT+3"
msgstr "GMT+3"
-#: wp-admin/includes/continents-cities.php:362
+#: wp-admin/includes/continents-cities.php:401
msgid "GMT+4"
msgstr "GMT+4"
-#: wp-admin/includes/continents-cities.php:363
+#: wp-admin/includes/continents-cities.php:402
msgid "GMT+5"
msgstr "GMT+5"
-#: wp-admin/includes/continents-cities.php:364
+#: wp-admin/includes/continents-cities.php:403
msgid "GMT+6"
msgstr "GMT+6"
-#: wp-admin/includes/continents-cities.php:365
+#: wp-admin/includes/continents-cities.php:404
msgid "GMT+7"
msgstr "GMT+7"
-#: wp-admin/includes/continents-cities.php:366
+#: wp-admin/includes/continents-cities.php:405
msgid "GMT+8"
msgstr "GMT+8"
-#: wp-admin/includes/continents-cities.php:367
+#: wp-admin/includes/continents-cities.php:406
msgid "GMT+9"
msgstr "GMT+9"
-#: wp-admin/includes/continents-cities.php:368
+#: wp-admin/includes/continents-cities.php:407
msgid "GMT-0"
msgstr "GMT-0"
-#: wp-admin/includes/continents-cities.php:369
+#: wp-admin/includes/continents-cities.php:408
msgid "GMT-1"
msgstr "GMT-1"
-#: wp-admin/includes/continents-cities.php:370
+#: wp-admin/includes/continents-cities.php:409
msgid "GMT-10"
msgstr "GMT-10"
-#: wp-admin/includes/continents-cities.php:371
+#: wp-admin/includes/continents-cities.php:410
msgid "GMT-11"
msgstr "GMT-11"
-#: wp-admin/includes/continents-cities.php:372
+#: wp-admin/includes/continents-cities.php:411
msgid "GMT-12"
msgstr "GMT-12"
-#: wp-admin/includes/continents-cities.php:373
+#: wp-admin/includes/continents-cities.php:412
msgid "GMT-13"
msgstr "GMT-13"
-#: wp-admin/includes/continents-cities.php:374
+#: wp-admin/includes/continents-cities.php:413
msgid "GMT-14"
msgstr "GMT-14"
-#: wp-admin/includes/continents-cities.php:375
+#: wp-admin/includes/continents-cities.php:414
msgid "GMT-2"
msgstr "GMT-2"
-#: wp-admin/includes/continents-cities.php:376
+#: wp-admin/includes/continents-cities.php:415
msgid "GMT-3"
msgstr "GMT-3"
-#: wp-admin/includes/continents-cities.php:377
+#: wp-admin/includes/continents-cities.php:416
msgid "GMT-4"
msgstr "GMT-4"
-#: wp-admin/includes/continents-cities.php:378
+#: wp-admin/includes/continents-cities.php:417
msgid "GMT-5"
msgstr "GMT-5"
-#: wp-admin/includes/continents-cities.php:379
+#: wp-admin/includes/continents-cities.php:418
msgid "GMT-6"
msgstr "GMT-6"
-#: wp-admin/includes/continents-cities.php:380
+#: wp-admin/includes/continents-cities.php:419
msgid "GMT-7"
msgstr "GMT-7"
-#: wp-admin/includes/continents-cities.php:381
+#: wp-admin/includes/continents-cities.php:420
msgid "GMT-8"
msgstr "GMT-8"
-#: wp-admin/includes/continents-cities.php:382
+#: wp-admin/includes/continents-cities.php:421
msgid "GMT-9"
msgstr "GMT-9"
-#: wp-admin/includes/continents-cities.php:383
+#: wp-admin/includes/continents-cities.php:422
msgid "GMT0"
msgstr "GMT0"
-#: wp-admin/includes/continents-cities.php:384
+#: wp-admin/includes/continents-cities.php:423
msgid "Greenwich"
msgstr "Greenwich"
-#: wp-admin/includes/continents-cities.php:385
+#: wp-admin/includes/continents-cities.php:424
msgid "UCT"
msgstr "UCT"
-#: wp-admin/includes/continents-cities.php:386
+#: wp-admin/includes/continents-cities.php:426
msgid "Universal"
msgstr "Universell"
-#: wp-admin/includes/continents-cities.php:387
+#: wp-admin/includes/continents-cities.php:425
msgid "UTC"
msgstr "UTC"
-#: wp-admin/includes/continents-cities.php:388
+#: wp-admin/includes/continents-cities.php:427
msgid "Zulu"
msgstr "Zulu"
-#: wp-admin/includes/continents-cities.php:389
+#: wp-admin/includes/continents-cities.php:429
msgid "Europe"
msgstr "Europa"
-#: wp-admin/includes/continents-cities.php:390
+#: wp-admin/includes/continents-cities.php:430
msgid "Amsterdam"
msgstr "Amsterdam"
-#: wp-admin/includes/continents-cities.php:391
+#: wp-admin/includes/continents-cities.php:431
msgid "Andorra"
msgstr "Andorra"
-#: wp-admin/includes/continents-cities.php:392
+#: wp-admin/includes/continents-cities.php:433
msgid "Athens"
msgstr "Aten"
-#: wp-admin/includes/continents-cities.php:393
+#: wp-admin/includes/continents-cities.php:434
msgid "Belfast"
msgstr "Belfast"
-#: wp-admin/includes/continents-cities.php:394
+#: wp-admin/includes/continents-cities.php:435
msgid "Belgrade"
msgstr "Beograd"
-#: wp-admin/includes/continents-cities.php:395
+#: wp-admin/includes/continents-cities.php:436
msgid "Berlin"
msgstr "Berlin"
-#: wp-admin/includes/continents-cities.php:396
+#: wp-admin/includes/continents-cities.php:437
msgid "Bratislava"
msgstr "Bratislava"
-#: wp-admin/includes/continents-cities.php:397
+#: wp-admin/includes/continents-cities.php:438
msgid "Brussels"
msgstr "Brussel"
-#: wp-admin/includes/continents-cities.php:398
+#: wp-admin/includes/continents-cities.php:439
msgid "Bucharest"
msgstr "București"
-#: wp-admin/includes/continents-cities.php:399
+#: wp-admin/includes/continents-cities.php:440
msgid "Budapest"
msgstr "Budapest"
-#: wp-admin/includes/continents-cities.php:400
+#: wp-admin/includes/continents-cities.php:442
msgid "Chisinau"
msgstr "Chișinău"
-#: wp-admin/includes/continents-cities.php:401
+#: wp-admin/includes/continents-cities.php:443
msgid "Copenhagen"
msgstr "København"
-#: wp-admin/includes/continents-cities.php:402
+#: wp-admin/includes/continents-cities.php:444
msgid "Dublin"
msgstr "Dublin"
-#: wp-admin/includes/continents-cities.php:403
+#: wp-admin/includes/continents-cities.php:445
msgid "Gibraltar"
msgstr "Gibraltar"
-#: wp-admin/includes/continents-cities.php:404
+#: wp-admin/includes/continents-cities.php:446
msgid "Guernsey"
msgstr "Guernsey"
-#: wp-admin/includes/continents-cities.php:405
+#: wp-admin/includes/continents-cities.php:447
msgid "Helsinki"
msgstr "Helsingfors"
-#: wp-admin/includes/continents-cities.php:406
+#: wp-admin/includes/continents-cities.php:448
msgid "Isle of Man"
msgstr "Man"
-#: wp-admin/includes/continents-cities.php:407
+#: wp-admin/includes/continents-cities.php:450
msgid "Jersey"
msgstr "Jersey"
-#: wp-admin/includes/continents-cities.php:408
+#: wp-admin/includes/continents-cities.php:451
msgid "Kaliningrad"
msgstr "Kaliningrad"
-#: wp-admin/includes/continents-cities.php:409
+#: wp-admin/includes/continents-cities.php:452
msgid "Kiev"
msgstr "Kiev"
-#: wp-admin/includes/continents-cities.php:410
+#: wp-admin/includes/continents-cities.php:454
msgid "Lisbon"
msgstr "Lisboa"
-#: wp-admin/includes/continents-cities.php:411
+#: wp-admin/includes/continents-cities.php:455
msgid "Ljubljana"
msgstr "Ljubljana"
-#: wp-admin/includes/continents-cities.php:412
+#: wp-admin/includes/continents-cities.php:456
msgid "London"
msgstr "London"
-#: wp-admin/includes/continents-cities.php:413
+#: wp-admin/includes/continents-cities.php:457
msgid "Luxembourg"
msgstr "Luxembourg"
-#: wp-admin/includes/continents-cities.php:414
+#: wp-admin/includes/continents-cities.php:458
msgid "Madrid"
msgstr "Madrid"
-#: wp-admin/includes/continents-cities.php:415
+#: wp-admin/includes/continents-cities.php:459
msgid "Malta"
msgstr "Malta"
-#: wp-admin/includes/continents-cities.php:416
+#: wp-admin/includes/continents-cities.php:460
msgid "Mariehamn"
msgstr "Mariehamn"
-#: wp-admin/includes/continents-cities.php:417
+#: wp-admin/includes/continents-cities.php:461
msgid "Minsk"
msgstr "Minsk"
-#: wp-admin/includes/continents-cities.php:418
+#: wp-admin/includes/continents-cities.php:462
msgid "Monaco"
msgstr "Monaco"
-#: wp-admin/includes/continents-cities.php:419
+#: wp-admin/includes/continents-cities.php:463
msgid "Moscow"
msgstr "Moskva"
-#: wp-admin/includes/continents-cities.php:420
+#: wp-admin/includes/continents-cities.php:465
msgid "Oslo"
msgstr "Oslo"
-#: wp-admin/includes/continents-cities.php:421
+#: wp-admin/includes/continents-cities.php:466
msgid "Paris"
msgstr "Paris"
-#: wp-admin/includes/continents-cities.php:422
+#: wp-admin/includes/continents-cities.php:467
msgid "Podgorica"
msgstr "Podgorica"
-#: wp-admin/includes/continents-cities.php:423
+#: wp-admin/includes/continents-cities.php:468
msgid "Prague"
msgstr "Praha"
-#: wp-admin/includes/continents-cities.php:424
+#: wp-admin/includes/continents-cities.php:469
msgid "Riga"
msgstr "Riga"
-#: wp-admin/includes/continents-cities.php:425
+#: wp-admin/includes/continents-cities.php:470
msgid "Rome"
msgstr "Roma"
-#: wp-admin/includes/continents-cities.php:426
+#: wp-admin/includes/continents-cities.php:471
msgid "Samara"
msgstr "Samara"
-#: wp-admin/includes/continents-cities.php:427
+#: wp-admin/includes/continents-cities.php:472
msgid "San Marino"
msgstr "San Marino"
-#: wp-admin/includes/continents-cities.php:428
+#: wp-admin/includes/continents-cities.php:473
msgid "Sarajevo"
msgstr "Sarajevo"
-#: wp-admin/includes/continents-cities.php:429
+#: wp-admin/includes/continents-cities.php:474
msgid "Simferopol"
msgstr "Simferopol"
-#: wp-admin/includes/continents-cities.php:430
+#: wp-admin/includes/continents-cities.php:475
msgid "Skopje"
msgstr "Skopje"
-#: wp-admin/includes/continents-cities.php:431
+#: wp-admin/includes/continents-cities.php:476
msgid "Sofia"
msgstr "Sofia"
-#: wp-admin/includes/continents-cities.php:432
+#: wp-admin/includes/continents-cities.php:477
msgid "Stockholm"
msgstr "Stockholm"
-#: wp-admin/includes/continents-cities.php:433
+#: wp-admin/includes/continents-cities.php:478
msgid "Tallinn"
msgstr "Tallinn"
-#: wp-admin/includes/continents-cities.php:434
+#: wp-admin/includes/continents-cities.php:479
msgid "Tirane"
msgstr "Tirana"
-#: wp-admin/includes/continents-cities.php:435
+#: wp-admin/includes/continents-cities.php:480
msgid "Tiraspol"
msgstr "Tiraspol"
-#: wp-admin/includes/continents-cities.php:436
+#: wp-admin/includes/continents-cities.php:482
msgid "Uzhgorod"
msgstr "Uzjhorod"
-#: wp-admin/includes/continents-cities.php:437
+#: wp-admin/includes/continents-cities.php:483
msgid "Vaduz"
msgstr "Vaduz"
-#: wp-admin/includes/continents-cities.php:438
+#: wp-admin/includes/continents-cities.php:484
msgid "Vatican"
msgstr "Vatikanstaten"
-#: wp-admin/includes/continents-cities.php:439
+#: wp-admin/includes/continents-cities.php:485
msgid "Vienna"
msgstr "Wien"
-#: wp-admin/includes/continents-cities.php:440
+#: wp-admin/includes/continents-cities.php:486
msgid "Vilnius"
msgstr "Vilnius"
-#: wp-admin/includes/continents-cities.php:441
+#: wp-admin/includes/continents-cities.php:487
msgid "Volgograd"
msgstr "Volgograd"
-#: wp-admin/includes/continents-cities.php:442
+#: wp-admin/includes/continents-cities.php:488
msgid "Warsaw"
msgstr "Warszawa"
-#: wp-admin/includes/continents-cities.php:443
+#: wp-admin/includes/continents-cities.php:489
msgid "Zagreb"
msgstr "Zagreb"
-#: wp-admin/includes/continents-cities.php:444
+#: wp-admin/includes/continents-cities.php:490
msgid "Zaporozhye"
msgstr "Zaporizjzja"
-#: wp-admin/includes/continents-cities.php:445
+#: wp-admin/includes/continents-cities.php:491
msgid "Zurich"
msgstr "Zürich"
-#: wp-admin/includes/continents-cities.php:446
+#: wp-admin/includes/continents-cities.php:493
msgid "Indian"
msgstr "Indiahavet"
-#: wp-admin/includes/continents-cities.php:447
+#: wp-admin/includes/continents-cities.php:494
msgid "Antananarivo"
msgstr "Antananarivo"
-#: wp-admin/includes/continents-cities.php:448
+#: wp-admin/includes/continents-cities.php:495
msgid "Chagos"
msgstr "Chagosøyene"
-#: wp-admin/includes/continents-cities.php:449
+#: wp-admin/includes/continents-cities.php:496
msgid "Christmas"
msgstr "Christmasøya"
-#: wp-admin/includes/continents-cities.php:450
+#: wp-admin/includes/continents-cities.php:497
msgid "Cocos"
msgstr "Kokosøyene"
-#: wp-admin/includes/continents-cities.php:451
+#: wp-admin/includes/continents-cities.php:498
msgid "Comoro"
msgstr "Komorene"
-#: wp-admin/includes/continents-cities.php:452
+#: wp-admin/includes/continents-cities.php:499
msgid "Kerguelen"
msgstr "Kerguelen"
-#: wp-admin/includes/continents-cities.php:453
+#: wp-admin/includes/continents-cities.php:500
msgid "Mahe"
msgstr "Mahe"
-#: wp-admin/includes/continents-cities.php:454
+#: wp-admin/includes/continents-cities.php:501
msgid "Maldives"
msgstr "Maldivene"
-#: wp-admin/includes/continents-cities.php:455
+#: wp-admin/includes/continents-cities.php:502
msgid "Mauritius"
msgstr "Mauritius"
-#: wp-admin/includes/continents-cities.php:456
+#: wp-admin/includes/continents-cities.php:503
msgid "Mayotte"
msgstr "Mayotte"
-#: wp-admin/includes/continents-cities.php:457
+#: wp-admin/includes/continents-cities.php:504
msgid "Reunion"
msgstr "Reunion"
-#: wp-admin/includes/continents-cities.php:458
+#: wp-admin/includes/continents-cities.php:506
msgid "Pacific"
msgstr "Stillehavet"
-#: wp-admin/includes/continents-cities.php:459
+#: wp-admin/includes/continents-cities.php:507
msgid "Apia"
msgstr "Apia"
-#: wp-admin/includes/continents-cities.php:460
+#: wp-admin/includes/continents-cities.php:508
msgid "Auckland"
msgstr "Auckland"
-#: wp-admin/includes/continents-cities.php:461
+#: wp-admin/includes/continents-cities.php:510
msgid "Chatham"
msgstr "Chathamøyene"
-#: wp-admin/includes/continents-cities.php:462
+#: wp-admin/includes/continents-cities.php:512
msgid "Easter"
msgstr "Påskeøya"
-#: wp-admin/includes/continents-cities.php:463
+#: wp-admin/includes/continents-cities.php:513
msgid "Efate"
msgstr "Efate"
-#: wp-admin/includes/continents-cities.php:464
+#: wp-admin/includes/continents-cities.php:514
msgid "Enderbury"
msgstr "Enderbury"
-#: wp-admin/includes/continents-cities.php:465
+#: wp-admin/includes/continents-cities.php:515
msgid "Fakaofo"
msgstr "Fakaofo"
-#: wp-admin/includes/continents-cities.php:466
+#: wp-admin/includes/continents-cities.php:516
msgid "Fiji"
msgstr "Fiji"
-#: wp-admin/includes/continents-cities.php:467
+#: wp-admin/includes/continents-cities.php:517
msgid "Funafuti"
msgstr "Funafuti"
-#: wp-admin/includes/continents-cities.php:468
+#: wp-admin/includes/continents-cities.php:518
msgid "Galapagos"
msgstr "Galapagos"
-#: wp-admin/includes/continents-cities.php:469
+#: wp-admin/includes/continents-cities.php:519
msgid "Gambier"
msgstr "Gambierøyene"
-#: wp-admin/includes/continents-cities.php:470
+#: wp-admin/includes/continents-cities.php:520
msgid "Guadalcanal"
msgstr "Guadalcanal"
-#: wp-admin/includes/continents-cities.php:471
+#: wp-admin/includes/continents-cities.php:521
msgid "Guam"
msgstr "Guam"
-#: wp-admin/includes/continents-cities.php:472
+#: wp-admin/includes/continents-cities.php:522
msgid "Honolulu"
msgstr "Honolulu"
-#: wp-admin/includes/continents-cities.php:473
+#: wp-admin/includes/continents-cities.php:523
msgid "Johnston"
msgstr "Johnston"
-#: wp-admin/includes/continents-cities.php:474
+#: wp-admin/includes/continents-cities.php:524
msgid "Kiritimati"
msgstr "Kiritimati"
-#: wp-admin/includes/continents-cities.php:475
+#: wp-admin/includes/continents-cities.php:525
msgid "Kosrae"
msgstr "Kosrae"
-#: wp-admin/includes/continents-cities.php:476
+#: wp-admin/includes/continents-cities.php:526
msgid "Kwajalein"
msgstr "Kwajaleinatollen"
-#: wp-admin/includes/continents-cities.php:477
+#: wp-admin/includes/continents-cities.php:527
msgid "Majuro"
msgstr "Majuro"
-#: wp-admin/includes/continents-cities.php:478
+#: wp-admin/includes/continents-cities.php:528
msgid "Marquesas"
msgstr "Marquesas"
-#: wp-admin/includes/continents-cities.php:479
+#: wp-admin/includes/continents-cities.php:529
msgid "Midway"
msgstr "Midway"
-#: wp-admin/includes/continents-cities.php:480
+#: wp-admin/includes/continents-cities.php:530
msgid "Nauru"
msgstr "Nauru"
-#: wp-admin/includes/continents-cities.php:481
+#: wp-admin/includes/continents-cities.php:531
msgid "Niue"
msgstr "Niue"
-#: wp-admin/includes/continents-cities.php:482
+#: wp-admin/includes/continents-cities.php:532
msgid "Norfolk"
msgstr "Norfolk"
-#: wp-admin/includes/continents-cities.php:483
+#: wp-admin/includes/continents-cities.php:533
msgid "Noumea"
msgstr "Noumea"
-#: wp-admin/includes/continents-cities.php:484
+#: wp-admin/includes/continents-cities.php:534
msgid "Pago Pago"
msgstr "Pago Pago"
-#: wp-admin/includes/continents-cities.php:485
+#: wp-admin/includes/continents-cities.php:535
msgid "Palau"
msgstr "Palau"
-#: wp-admin/includes/continents-cities.php:486
+#: wp-admin/includes/continents-cities.php:536
msgid "Pitcairn"
msgstr "Pitcairn"
-#: wp-admin/includes/continents-cities.php:487
+#: wp-admin/includes/continents-cities.php:538
msgid "Ponape"
msgstr "Ponape"
-#: wp-admin/includes/continents-cities.php:488
+#: wp-admin/includes/continents-cities.php:539
msgid "Port Moresby"
msgstr "Port Moresby"
-#: wp-admin/includes/continents-cities.php:489
+#: wp-admin/includes/continents-cities.php:540
msgid "Rarotonga"
msgstr "Rarotonga"
-#: wp-admin/includes/continents-cities.php:490
+#: wp-admin/includes/continents-cities.php:541
msgid "Saipan"
msgstr "Saipan"
-#: wp-admin/includes/continents-cities.php:491
+#: wp-admin/includes/continents-cities.php:542
msgid "Samoa"
msgstr "Samoa"
-#: wp-admin/includes/continents-cities.php:492
+#: wp-admin/includes/continents-cities.php:543
msgid "Tahiti"
msgstr "Tahiti"
-#: wp-admin/includes/continents-cities.php:493
+#: wp-admin/includes/continents-cities.php:544
msgid "Tarawa"
msgstr "Tarawa"
-#: wp-admin/includes/continents-cities.php:494
+#: wp-admin/includes/continents-cities.php:545
msgid "Tongatapu"
msgstr "Tongatapu"
-#: wp-admin/includes/continents-cities.php:495
+#: wp-admin/includes/continents-cities.php:546
msgid "Truk"
msgstr "Truk"
-#: wp-admin/includes/continents-cities.php:496
+#: wp-admin/includes/continents-cities.php:547
msgid "Wake"
msgstr "Wake"
-#: wp-admin/includes/continents-cities.php:497
+#: wp-admin/includes/continents-cities.php:548
msgid "Wallis"
msgstr "Wallis-øya"
-#: wp-admin/includes/continents-cities.php:498
+#: wp-admin/includes/continents-cities.php:549
msgid "Yap"
msgstr "Yap"
-#: wp-admin/includes/continents-cities.php:41
+#: wp-admin/includes/continents-cities.php:42
msgid "Kigali"
msgstr "Kigali"
-#: wp-admin/includes/continents-cities.php:42
+#: wp-admin/includes/continents-cities.php:43
msgid "Kinshasa"
msgstr "Kinshasa"
@@ -1458,151 +1589,155 @@ msgstr "Kinshasa"
msgid "Johannesburg"
msgstr "Johannesburg"
-#: wp-admin/includes/continents-cities.php:39
+#: wp-admin/includes/continents-cities.php:40
msgid "Kampala"
msgstr "Kampala"
-#: wp-admin/includes/continents-cities.php:47
+#: wp-admin/includes/continents-cities.php:48
msgid "Lubumbashi"
msgstr "Lubumbashi"
-#: wp-admin/includes/continents-cities.php:46
+#: wp-admin/includes/continents-cities.php:47
msgid "Luanda"
msgstr "Luanda"
-#: wp-admin/includes/continents-cities.php:45
+#: wp-admin/includes/continents-cities.php:46
msgid "Lome"
msgstr "Lome"
-#: wp-admin/includes/continents-cities.php:44
+#: wp-admin/includes/continents-cities.php:45
msgid "Libreville"
msgstr "Libreville"
-#: wp-admin/includes/continents-cities.php:43
+#: wp-admin/includes/continents-cities.php:44
msgid "Lagos"
msgstr "Lagos"
-#: wp-admin/includes/continents-cities.php:50
+#: wp-admin/includes/continents-cities.php:51
msgid "Maputo"
msgstr "Maputo"
-#: wp-admin/includes/continents-cities.php:49
+#: wp-admin/includes/continents-cities.php:50
msgid "Malabo"
msgstr "Malabo"
-#: wp-admin/includes/continents-cities.php:48
+#: wp-admin/includes/continents-cities.php:49
msgid "Lusaka"
msgstr "Lusaka"
-#: wp-admin/includes/continents-cities.php:56
+#: wp-admin/includes/continents-cities.php:57
msgid "Ndjamena"
msgstr "Ndjamena"
-#: wp-admin/includes/continents-cities.php:55
+#: wp-admin/includes/continents-cities.php:56
msgid "Nairobi"
msgstr "Nairobi"
-#: wp-admin/includes/continents-cities.php:51
+#: wp-admin/includes/continents-cities.php:52
msgid "Maseru"
msgstr "Maseru"
-#: wp-admin/includes/continents-cities.php:52
+#: wp-admin/includes/continents-cities.php:53
msgid "Mbabane"
msgstr "Mbabane"
-#: wp-admin/includes/continents-cities.php:53
+#: wp-admin/includes/continents-cities.php:54
msgid "Mogadishu"
msgstr "Mogadishu"
-#: wp-admin/includes/continents-cities.php:54
+#: wp-admin/includes/continents-cities.php:55
msgid "Monrovia"
msgstr "Monrovia"
-#: wp-admin/includes/continents-cities.php:78
+#: wp-admin/includes/continents-cities.php:80
msgid "La Rioja"
msgstr "La Rioja"
-#: wp-admin/includes/continents-cities.php:77
+#: wp-admin/includes/continents-cities.php:79
+#: wp-admin/includes/continents-cities.php:155
msgid "Jujuy"
msgstr "Jujuy"
-#: wp-admin/includes/continents-cities.php:76
+#: wp-admin/includes/continents-cities.php:78
+#: wp-admin/includes/continents-cities.php:112
msgid "Cordoba"
msgstr "Cordoba"
-#: wp-admin/includes/continents-cities.php:75
+#: wp-admin/includes/continents-cities.php:77
msgid "ComodRivadavia"
msgstr "Comodoro Rivadavia"
-#: wp-admin/includes/continents-cities.php:74
+#: wp-admin/includes/continents-cities.php:76
+#: wp-admin/includes/continents-cities.php:106
msgid "Catamarca"
msgstr "Catamarca"
-#: wp-admin/includes/continents-cities.php:73
+#: wp-admin/includes/continents-cities.php:75
+#: wp-admin/includes/continents-cities.php:101
msgid "Buenos Aires"
msgstr "Buenos Aires"
-#: wp-admin/includes/continents-cities.php:72
+#: wp-admin/includes/continents-cities.php:74
msgid "Argentina"
msgstr "Argentina"
-#: wp-admin/includes/continents-cities.php:71
+#: wp-admin/includes/continents-cities.php:73
msgid "Araguaina"
msgstr "Araguaina"
-#: wp-admin/includes/continents-cities.php:70
+#: wp-admin/includes/continents-cities.php:72
msgid "Antigua"
msgstr "Antigua"
-#: wp-admin/includes/continents-cities.php:69
+#: wp-admin/includes/continents-cities.php:71
msgid "Anguilla"
msgstr "Anguilla"
-#: wp-admin/includes/continents-cities.php:68
+#: wp-admin/includes/continents-cities.php:70
msgid "Anchorage"
msgstr "Anchorage"
-#: wp-admin/includes/continents-cities.php:67
+#: wp-admin/includes/continents-cities.php:69
msgid "Adak"
msgstr "Adak"
-#: wp-admin/includes/continents-cities.php:66
+#: wp-admin/includes/continents-cities.php:68
msgid "America"
msgstr "Amerika"
-#: wp-admin/includes/continents-cities.php:65
+#: wp-admin/includes/continents-cities.php:66
msgid "Windhoek"
msgstr "Windhoek"
-#: wp-admin/includes/continents-cities.php:64
+#: wp-admin/includes/continents-cities.php:65
msgid "Tunis"
msgstr "Tunis"
-#: wp-admin/includes/continents-cities.php:63
+#: wp-admin/includes/continents-cities.php:64
msgid "Tripoli"
msgstr "Tripoli"
-#: wp-admin/includes/continents-cities.php:62
+#: wp-admin/includes/continents-cities.php:63
msgid "Timbuktu"
msgstr "Timbuktu"
-#: wp-admin/includes/continents-cities.php:61
+#: wp-admin/includes/continents-cities.php:62
msgid "Sao Tome"
msgstr "Sao Tome"
-#: wp-admin/includes/continents-cities.php:60
+#: wp-admin/includes/continents-cities.php:61
msgid "Porto-Novo"
msgstr "Porto-Novo"
-#: wp-admin/includes/continents-cities.php:59
+#: wp-admin/includes/continents-cities.php:60
msgid "Ouagadougou"
msgstr "Ouagadougou"
-#: wp-admin/includes/continents-cities.php:58
+#: wp-admin/includes/continents-cities.php:59
msgid "Nouakchott"
msgstr "Nouakchott"
-#: wp-admin/includes/continents-cities.php:57
+#: wp-admin/includes/continents-cities.php:58
msgid "Niamey"
msgstr "Niamey"
@@ -1626,7 +1761,7 @@ msgstr "Freetown"
msgid "Gaborone"
msgstr "Gaborone"
-#: wp-admin/includes/continents-cities.php:40
+#: wp-admin/includes/continents-cities.php:41
msgid "Khartoum"
msgstr "Khartoum"
@@ -1714,246 +1849,248 @@ msgstr "Afrika"
msgid "Accra"
msgstr "Accra"
-#: wp-admin/includes/continents-cities.php:79
+#: wp-admin/includes/continents-cities.php:81
+#: wp-admin/includes/continents-cities.php:174
msgid "Mendoza"
msgstr "Mendoza"
-#: wp-admin/includes/continents-cities.php:80
+#: wp-admin/includes/continents-cities.php:82
msgid "Rio Gallegos"
msgstr "Rio Gallegos"
-#: wp-admin/includes/continents-cities.php:81
+#: wp-admin/includes/continents-cities.php:84
msgid "San Juan"
msgstr "San Juan"
-#: wp-admin/includes/continents-cities.php:82
+#: wp-admin/includes/continents-cities.php:85
msgid "San Luis"
msgstr "San Luis"
-#: wp-admin/includes/continents-cities.php:83
+#: wp-admin/includes/continents-cities.php:86
msgid "Tucuman"
msgstr "Tucuman"
-#: wp-admin/includes/continents-cities.php:84
+#: wp-admin/includes/continents-cities.php:87
msgid "Ushuaia"
msgstr "Ushuaia"
-#: wp-admin/includes/continents-cities.php:85
+#: wp-admin/includes/continents-cities.php:88
msgid "Aruba"
msgstr "Aruba"
-#: wp-admin/includes/continents-cities.php:86
+#: wp-admin/includes/continents-cities.php:89
msgid "Asuncion"
msgstr "Asuncion"
-#: wp-admin/includes/continents-cities.php:87
+#: wp-admin/includes/continents-cities.php:90
msgid "Atikokan"
msgstr "Atikokan"
-#: wp-admin/includes/continents-cities.php:88
+#: wp-admin/includes/continents-cities.php:91
msgid "Atka"
msgstr "Atka"
-#: wp-admin/includes/continents-cities.php:89
+#: wp-admin/includes/continents-cities.php:92
msgid "Bahia"
msgstr "Bahia"
-#: wp-admin/includes/continents-cities.php:90
+#: wp-admin/includes/continents-cities.php:94
msgid "Barbados"
msgstr "Barbados"
-#: wp-admin/includes/continents-cities.php:91
+#: wp-admin/includes/continents-cities.php:95
msgid "Belem"
msgstr "Belem"
-#: wp-admin/includes/continents-cities.php:92
+#: wp-admin/includes/continents-cities.php:96
msgid "Belize"
msgstr "Belize"
-#: wp-admin/includes/continents-cities.php:93
+#: wp-admin/includes/continents-cities.php:97
msgid "Blanc-Sablon"
msgstr "Blanc-Sablon"
-#: wp-admin/includes/continents-cities.php:94
+#: wp-admin/includes/continents-cities.php:98
msgid "Boa Vista"
msgstr "Boa Vista"
-#: wp-admin/includes/continents-cities.php:95
+#: wp-admin/includes/continents-cities.php:99
msgid "Bogota"
msgstr "Bogota"
-#: wp-admin/includes/continents-cities.php:96
+#: wp-admin/includes/continents-cities.php:100
msgid "Boise"
msgstr "Boise"
-#: wp-admin/includes/continents-cities.php:97
+#: wp-admin/includes/continents-cities.php:102
msgid "Cambridge Bay"
msgstr "Cambridge Bay"
-#: wp-admin/includes/continents-cities.php:98
+#: wp-admin/includes/continents-cities.php:103
msgid "Campo Grande"
msgstr "Campo Grande"
-#: wp-admin/includes/continents-cities.php:99
+#: wp-admin/includes/continents-cities.php:104
msgid "Cancun"
msgstr "Cancún"
-#: wp-admin/includes/continents-cities.php:100
+#: wp-admin/includes/continents-cities.php:105
msgid "Caracas"
msgstr "Caracas"
-#: wp-admin/includes/continents-cities.php:101
+#: wp-admin/includes/continents-cities.php:107
msgid "Cayenne"
msgstr "Cayenne"
-#: wp-admin/includes/continents-cities.php:102
+#: wp-admin/includes/continents-cities.php:108
msgid "Cayman"
msgstr "Cayman"
-#: wp-admin/includes/continents-cities.php:103
+#: wp-admin/includes/continents-cities.php:109
msgid "Chicago"
msgstr "Chicago"
-#: wp-admin/includes/continents-cities.php:104
+#: wp-admin/includes/continents-cities.php:110
msgid "Chihuahua"
msgstr "Chihuahua"
-#: wp-admin/includes/continents-cities.php:105
+#: wp-admin/includes/continents-cities.php:111
msgid "Coral Harbour"
msgstr "Coral Harbour"
-#: wp-admin/includes/continents-cities.php:106
+#: wp-admin/includes/continents-cities.php:113
msgid "Costa Rica"
msgstr "Costa Rica"
-#: wp-admin/includes/continents-cities.php:107
+#: wp-admin/includes/continents-cities.php:115
msgid "Cuiaba"
msgstr "Cuiaba"
-#: wp-admin/includes/continents-cities.php:108
+#: wp-admin/includes/continents-cities.php:116
msgid "Curacao"
msgstr "Curacao"
-#: wp-admin/includes/continents-cities.php:109
+#: wp-admin/includes/continents-cities.php:117
msgid "Danmarkshavn"
msgstr "Danmarkshavn"
-#: wp-admin/includes/continents-cities.php:110
+#: wp-admin/includes/continents-cities.php:118
msgid "Dawson"
msgstr "Dawson"
-#: wp-admin/includes/continents-cities.php:111
+#: wp-admin/includes/continents-cities.php:119
msgid "Dawson Creek"
msgstr "Dawson Creek"
-#: wp-admin/includes/continents-cities.php:112
+#: wp-admin/includes/continents-cities.php:120
msgid "Denver"
msgstr "Denver"
-#: wp-admin/includes/continents-cities.php:113
+#: wp-admin/includes/continents-cities.php:121
msgid "Detroit"
msgstr "Detroit"
-#: wp-admin/includes/continents-cities.php:114
+#: wp-admin/includes/continents-cities.php:122
msgid "Dominica"
msgstr "Dominica"
-#: wp-admin/includes/continents-cities.php:115
+#: wp-admin/includes/continents-cities.php:123
msgid "Edmonton"
msgstr "Edmonton"
-#: wp-admin/includes/continents-cities.php:116
+#: wp-admin/includes/continents-cities.php:124
msgid "Eirunepe"
msgstr "Eirunepé"
-#: wp-admin/includes/continents-cities.php:117
+#: wp-admin/includes/continents-cities.php:125
msgid "El Salvador"
msgstr "El Salvador"
-#: wp-admin/includes/continents-cities.php:118
+#: wp-admin/includes/continents-cities.php:126
msgid "Ensenada"
msgstr "Ensenada"
-#: wp-admin/includes/continents-cities.php:119
+#: wp-admin/includes/continents-cities.php:128
msgid "Fort Wayne"
msgstr "Fort Wayne"
-#: wp-admin/includes/continents-cities.php:120
+#: wp-admin/includes/continents-cities.php:129
msgid "Fortaleza"
msgstr "Fortaleza"
-#: wp-admin/includes/continents-cities.php:121
+#: wp-admin/includes/continents-cities.php:130
msgid "Glace Bay"
msgstr "Glace Bay"
-#: wp-admin/includes/continents-cities.php:122
+#: wp-admin/includes/continents-cities.php:131
msgid "Godthab"
msgstr "Nuuk (Godthåb)"
-#: wp-admin/includes/continents-cities.php:123
+#: wp-admin/includes/continents-cities.php:132
msgid "Goose Bay"
msgstr "Goose Bay"
-#: wp-admin/includes/continents-cities.php:124
+#: wp-admin/includes/continents-cities.php:133
msgid "Grand Turk"
msgstr "Grand Turk"
-#: wp-admin/includes/continents-cities.php:125
+#: wp-admin/includes/continents-cities.php:134
msgid "Grenada"
msgstr "Grenada"
-#: wp-admin/includes/continents-cities.php:126
+#: wp-admin/includes/continents-cities.php:135
msgid "Guadeloupe"
msgstr "Guadeloupe"
-#: wp-admin/includes/continents-cities.php:127
+#: wp-admin/includes/continents-cities.php:136
msgid "Guatemala"
msgstr "Guatemala"
-#: wp-admin/includes/continents-cities.php:128
+#: wp-admin/includes/continents-cities.php:137
msgid "Guayaquil"
msgstr "Guayaquil"
-#: wp-admin/includes/continents-cities.php:129
+#: wp-admin/includes/continents-cities.php:138
msgid "Guyana"
msgstr "Guyana"
-#: wp-admin/includes/continents-cities.php:130
+#: wp-admin/includes/continents-cities.php:139
msgid "Halifax"
msgstr "Halifax"
-#: wp-admin/includes/continents-cities.php:131
+#: wp-admin/includes/continents-cities.php:140
msgid "Havana"
msgstr "Havana"
-#: wp-admin/includes/continents-cities.php:132
+#: wp-admin/includes/continents-cities.php:141
msgid "Hermosillo"
msgstr "Hermosillo"
-#: wp-admin/includes/continents-cities.php:133
+#: wp-admin/includes/continents-cities.php:142
msgid "Indiana"
msgstr "Indiana"
-#: wp-admin/includes/continents-cities.php:134
+#: wp-admin/includes/continents-cities.php:143
+#: wp-admin/includes/continents-cities.php:151
msgid "Indianapolis"
msgstr "Indianapolis"
-#: wp-admin/includes/continents-cities.php:135
+#: wp-admin/includes/continents-cities.php:144
msgid "Knox"
msgstr "Knox"
-#: wp-admin/includes/continents-cities.php:136
+#: wp-admin/includes/continents-cities.php:145
msgid "Marengo"
msgstr "Marengo"
-#: wp-admin/includes/continents-cities.php:137
+#: wp-admin/includes/continents-cities.php:146
msgid "Petersburg"
msgstr "Petersburg"
-#: wp-admin/includes/continents-cities.php:138
+#: wp-admin/includes/continents-cities.php:147
msgid "Tell City"
msgstr "Tell City"
-#: wp-admin/includes/continents-cities.php:139
+#: wp-admin/includes/continents-cities.php:148
msgid "Vevay"
msgstr "Vevay"
diff --git a/wp-content/languages/nb_NO.mo b/wp-content/languages/nb_NO.mo
index e6cd754..f7cf0ae 100644
Binary files a/wp-content/languages/nb_NO.mo and b/wp-content/languages/nb_NO.mo differ
diff --git a/wp-content/languages/nb_NO.po b/wp-content/languages/nb_NO.po
index 86a386a..ab36a69 100644
--- a/wp-content/languages/nb_NO.po
+++ b/wp-content/languages/nb_NO.po
@@ -1,96 +1,482 @@
-# Translation of 4.5.x in Norwegian (Bokmål)
-# This file is distributed under the same license as the 4.5.x package.
+# Translation of 4.6.x in Norwegian (Bokmål)
+# This file is distributed under the same license as the 4.6.x package.
msgid ""
msgstr ""
-"PO-Revision-Date: 2016-04-05 08:23:26+0000\n"
+"PO-Revision-Date: 2016-08-09 14:38:13+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: GlotPress/2.1.0-alpha\n"
-"Project-Id-Version: 4.5.x\n"
+"Project-Id-Version: 4.6.x\n"
#. translators: Translate this to the correct language tag for your locale, see
#. https://www.w3.org/International/articles/language-tags/ for reference. Do
#. not translate into your own language.
-#: wp-includes/general-template.php:715
+#: wp-includes/general-template.php:716
msgid "html_lang_attribute"
msgstr "nb-NO"
#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
-#: wp-includes/locale.php:211
+#: wp-includes/class-wp-locale.php:223
msgctxt "text direction"
msgid "ltr"
msgstr "ltr"
-#. translators: $dec_point argument for http://php.net/number_format, default
-#. is .
-#: wp-includes/locale.php:203
+#. translators: $dec_point argument for https://secure.php.net/number_format,
+#. default is .
+#: wp-includes/class-wp-locale.php:215
msgid "number_format_decimal_point"
msgstr ","
-#. translators: $thousands_sep argument for http://php.net/number_format,
-#. default is ,
-#: wp-includes/locale.php:190
+#. translators: $thousands_sep argument for
+#. https://secure.php.net/number_format, default is ,
+#: wp-includes/class-wp-locale.php:202
msgid "number_format_thousands_sep"
-msgstr " "
+msgstr " "
-#: wp-includes/class-wp-editor.php:1048
+#. translators: %s: Plugin name and version
+#: wp-includes/script-loader.php:620
+msgid "Update %s now"
+msgstr "Oppdater %s nå"
+
+#. translators: %s: Plugin name
+#: wp-includes/script-loader.php:639
+msgid "Install %s now"
+msgstr "Installér %s nå"
+
+#: wp-includes/customize/class-wp-customize-nav-menu-location-control.php:80
+msgid "Edit selected menu"
+msgstr "Rediger valgt meny"
+
+#: wp-includes/class-wp-editor.php:1068
+msgid "Warning: the link has been inserted but may have errors. Please test it."
+msgstr "Advarsel: lenken er satt inn, men kan inneholde feil. Vennligst test den."
+
+#: wp-includes/script-loader.php:612
+msgid "Search Results"
+msgstr "Søkeresultater"
+
+#: wp-includes/class-wp-editor.php:1027
+msgid "Rich Text Area. Press Control-Option-H for help."
+msgstr "Område for rik tekst. Trykk ctrl-alt-H for hjelp."
+
+#: wp-includes/script-loader.php:362
+msgid "Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds."
+msgstr "Bruk venstre- og høyre-piltastene for å hoppe ett sekund, opp- og ned-piltastene for å hoppe ti sekunder."
+
+#: wp-includes/script-loader.php:349
+msgid "Pause"
+msgstr "Pause"
+
+#: wp-includes/script-loader.php:357
+msgid "Volume Slider"
+msgstr "Volumkontroll"
+
+#: wp-includes/script-loader.php:348
+msgid "Play"
+msgstr "Spill av"
+
+#. translators: %1: number of seconds (30 by default)
+#: wp-includes/script-loader.php:354
+msgid "Skip back %1 seconds"
+msgstr "Hopp tilbake %1 sekunder"
+
+#: wp-includes/script-loader.php:356
+msgid "Audio Player"
+msgstr "Lydavspiller"
+
+#: wp-includes/script-loader.php:355
+msgid "Video Player"
+msgstr "Videoavspiller"
+
+#: wp-includes/script-loader.php:352
+msgid "Time Slider"
+msgstr "Tidsskyver"
+
+#: wp-includes/script-loader.php:361
+msgid "Use Up/Down Arrow keys to increase or decrease volume."
+msgstr "Bruk opp- og ned-piltastene for å øke eller redusere lyden."
+
+#: wp-includes/class-wp-tax-query.php:658
+msgid "Inexistent terms."
+msgstr "Ikke-eksisterende begreper."
+
+#: wp-includes/taxonomy.php:2248 wp-includes/taxonomy.php:2849
+msgid "A name is required for this term."
+msgstr "Et navn er nødvendig for dette begrepet."
+
+#: wp-includes/script-loader.php:678
+msgid "Run Importer"
+msgstr "Kjør import"
+
+#. translators: %s: Activation URL
+#: wp-includes/script-loader.php:660
+msgid "Importer installed successfully. Run importer"
+msgstr "Installasjon av importør var vellykket. Kjør importør"
+
+#. translators: %s: Importer name
+#: wp-includes/script-loader.php:680
+msgid "Run %s"
+msgstr "Kjør %s"
+
+#: wp-includes/script-loader.php:677
+msgctxt "theme"
+msgid "Activate %s"
+msgstr "Aktiver %s"
+
+#: wp-includes/script-loader.php:675
+msgctxt "plugin"
+msgid "Activate %s"
+msgstr "Aktiver %s"
+
+#. translators: %s: Plugin name
+#: wp-includes/script-loader.php:675
+msgctxt "plugin"
+msgid "Network Activate %s"
+msgstr "Nettverksaktiver %s"
+
+#. translators: %s: Theme name
+#: wp-includes/script-loader.php:677
+msgctxt "theme"
+msgid "Network Activate %s"
+msgstr "Nettverksaktiver %s"
+
+#. translators: %s: Plugin name and version
+#: wp-includes/script-loader.php:650
+msgctxt "plugin"
+msgid "%s installed!"
+msgstr "%s installert!"
+
+#. translators: %s: Theme name and version
+#: wp-includes/script-loader.php:652
+msgctxt "theme"
+msgid "%s installed!"
+msgstr "%s installert!"
+
+#. translators: %s: Plugin name and version
+#: wp-includes/script-loader.php:654
+msgctxt "plugin"
+msgid "%s installation failed"
+msgstr "%s installasjon feilet"
+
+#. translators: %s: Theme name and version
+#: wp-includes/script-loader.php:656
+msgctxt "theme"
+msgid "%s installation failed"
+msgstr "%s installasjon feilet"
+
+#. translators: %s: Plugin name and version
+#: wp-includes/script-loader.php:646
+msgctxt "plugin"
+msgid "Installing %s..."
+msgstr "Installerer %s..."
+
+#. translators: %s: Theme name and version
+#: wp-includes/script-loader.php:648
+msgctxt "theme"
+msgid "Installing %s..."
+msgstr "Installerer %s..."
+
+#: wp-includes/class-wp-xmlrpc-server.php:4415
+msgid "Sorry, you are not allowed to access user data on this site."
+msgstr "Beklager, du har ikke tilgang til å se brukerdata på dette nettstedet."
+
+#: wp-includes/script-loader.php:684
+msgid "Number of plugins found: %d"
+msgstr "Antall utvidelser funnet: %d"
+
+#: wp-includes/class-wp-xmlrpc-server.php:2418
+msgid "Sorry, you are not allowed to edit this user."
+msgstr "Beklager, du har ikke lov til å redigere denne brukeren."
+
+#: wp-includes/class-wp-xmlrpc-server.php:2549
+#: wp-includes/class-wp-xmlrpc-server.php:2595
+msgid "Sorry, you are not allowed to edit your profile."
+msgstr "Beklager, du har ikke lov til å redigere profilen din."
+
+#: wp-includes/class-wp-xmlrpc-server.php:2706
+#: wp-includes/class-wp-xmlrpc-server.php:2908
+msgid "Sorry, you are not allowed to edit pages."
+msgstr "Beklager, du har ikke lov til å redigere sider."
+
+#. translators: If comment number in your language requires declension,
+#. translate this to 'on'. Do not translate into your own language.
+#: wp-includes/comment-template.php:899
+msgctxt "Comment number declension: on or off"
+msgid "off"
+msgstr "off"
+
+#: wp-includes/class-wp-theme.php:786
+msgid "Dark"
+msgstr "Mørk"
+
+#: wp-includes/class-wp-theme.php:785
+msgid "Tan"
+msgstr "Brun"
+
+#: wp-includes/class-wp-theme.php:789
+msgid "Photoblogging"
+msgstr "Fotoblogging"
+
+#: wp-includes/class-wp-theme.php:787
+msgid "Fixed Layout"
+msgstr "Fast (fixed) layout"
+
+#: wp-includes/class-wp-theme.php:787
+msgid "Fluid Layout"
+msgstr "Flytende (fluid) layout"
+
+#: wp-includes/class-wp-theme.php:788
+msgid "Responsive Layout"
+msgstr "Responsiv layout"
+
+#: wp-includes/class-wp-theme.php:789
+msgid "Seasonal"
+msgstr "Sesong"
+
+#. translators: %s: Error string for a failed installation
+#: wp-includes/script-loader.php:644
+msgid "Installation failed: %s"
+msgstr "Installering feilet: %s"
+
+#: wp-includes/class-wp-xmlrpc-server.php:1640
+#: wp-includes/class-wp-xmlrpc-server.php:4758
+msgid "Sorry, you are not allowed to delete this post."
+msgstr "Beklager, du har ikke lov til å slette dette innlegget."
+
+#: wp-includes/class-wp-xmlrpc-server.php:2800
+msgid "Sorry, you are not allowed to delete this page."
+msgstr "Beklager, du har ikke lov til å slette denne siden."
+
+#: wp-includes/class-wp-xmlrpc-server.php:2665
+#: wp-includes/class-wp-xmlrpc-server.php:2862
+msgid "Sorry, you are not allowed to edit this page."
+msgstr "Beklager, du har ikke lov til å redigere denne siden."
+
+#. translators: %s: Plugin name
+#: wp-includes/script-loader.php:664
+msgid "Are you sure you want to delete %s and its data?"
+msgstr "Er du sikker på at du vil slette %s og alt innholdet?"
+
+#: wp-includes/script-loader.php:667
+msgid "Deleting..."
+msgstr "Sletter..."
+
+#. translators: %s: Error string for a failed deletion
+#: wp-includes/script-loader.php:669
+msgid "Deletion failed: %s"
+msgstr "Sletting feilet: %s"
+
+#: wp-includes/script-loader.php:670
+msgid "Deleted!"
+msgstr "Slettet!"
+
+#: wp-includes/script-loader.php:681
+msgid "An unknown error occurred"
+msgstr "En ukjent feil har oppstått"
+
+#: wp-includes/script-loader.php:952
+msgid "Today"
+msgstr "I dag"
+
+#: wp-includes/customize/class-wp-customize-nav-menu-location-control.php:80
+#: wp-includes/widgets/class-wp-nav-menu-widget.php:153
+msgid "Edit Menu"
+msgstr "Rediger meny"
+
+#: wp-includes/wp-db.php:1782 wp-includes/wp-db.php:1788
+msgid "Unable to retrieve the error message from MySQL"
+msgstr "Greier ikke å hente feilmeldingen fra MySQL"
+
+#. translators: %s: site title
+#: wp-login.php:233
+msgctxt "site"
+msgid "← Back to %s"
+msgstr "← Tilbake til %s"
+
+#: wp-includes/script-loader.php:666
+msgid "Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?"
+msgstr "Forsiktig: Disse temaene kan være aktive på andre nettsteder i nettverket. Er du helt sikker på at du vil fortsette?"
+
+#: wp-includes/script-loader.php:665
+msgid "Are you sure you want to delete the selected plugins and their data?"
+msgstr "Er du sikker på at du vil slette valgte utvidelser og deres data?"
+
+#: wp-includes/script-loader.php:672
+msgid "Network Activate"
+msgstr "Aktiver for nettverk"
+
+#: wp-includes/script-loader.php:642
+msgid "Install Failed!"
+msgstr "Installasjonen feilet!"
+
+#. translators: %s: Theme name
+#: wp-includes/script-loader.php:662
+msgid "Are you sure you want to delete %s?"
+msgstr "Er du sikker på at du vil slette %s?"
+
+#: wp-includes/script-loader.php:403
+msgid "Confirm use of weak password."
+msgstr "Bekreft bruk av svakt passord."
+
+#: wp-includes/script-loader.php:392
+msgctxt "password strength"
+msgid "Password strength unknown"
+msgstr "Passordstyrken er ukjent"
+
+#. translators: %s: Search string
+#: wp-includes/script-loader.php:611
+msgid "Search results for “%s”"
+msgstr "Søkeresultat for «%s»"
+
+#: wp-includes/script-loader.php:613
+msgid "You do not appear to have any plugins available at this time."
+msgstr "Det virker ikke som at du har noen tilgjengelige utvidelser nå."
+
+#: wp-includes/script-loader.php:614
+msgid "Please select at least one item to perform this action on."
+msgstr "Vennligst velg minst én ting å gjennomføre valgte oppgave på."
+
+#. translators: %s: user name
+#: wp-includes/pluggable.php:1680
+msgid "Password changed for user: %s"
+msgstr "Passordet er endret for bruker: %s"
+
+#. translators: %s: site title
+#: wp-includes/pluggable.php:1685
+msgid "[%s] Password Changed"
+msgstr "[%s] Passord er endret"
+
+#: wp-includes/script-loader.php:618
+msgid "Update Now"
+msgstr "Oppdater nå"
+
+#: wp-includes/script-loader.php:510
+msgid ""
+"Are you sure you want to do this?\n"
+"The comment changes you made will be lost."
+msgstr ""
+"Er du sikker på du vil gjøre dette?\n"
+"Alle kommentarendringene du har gjort vil bli mistet."
+
+#: wp-includes/revision.php:549
+msgid "Sorry, you are not allowed to preview drafts."
+msgstr "Beklager, du har ikke lov til å forhåndsvise utkast."
+
+#: wp-includes/rest-api/class-wp-rest-server.php:882
+#: wp-includes/script-loader.php:127 wp-includes/script-loader.php:499
+msgid "Sorry, you are not allowed to do that."
+msgstr "Beklager, du har ikke lov til å gjøre dette."
+
+#. translators: %s: Codex URL
+#: wp-includes/formatting.php:4228
+msgid "A structure tag is required when using custom permalinks. Learn more"
+msgstr "En struktur-tagg kreves når du bruker tilpassede permalenker. Lær mer"
+
+#: wp-includes/formatting.php:4229
+msgid "https://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure"
+msgstr "https://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure"
+
+#: wp-includes/media-template.php:1235
+msgid "Image crop area preview. Requires mouse interaction."
+msgstr "Forhåndsvisning av bildebeskjæring. Krever mus-interaksjon."
+
+#: wp-includes/class-wp-xmlrpc-server.php:3926
+#: wp-includes/class-wp-xmlrpc-server.php:3974
+#: wp-includes/class-wp-xmlrpc-server.php:5796
+msgid "Sorry, you are not allowed to upload files."
+msgstr "Beklager, du har ikke lov til å laste opp filer."
+
+#: wp-includes/class-wp-xmlrpc-server.php:3059
+msgid "Sorry, you are not allowed to add a category."
+msgstr "Beklager, du har ikke lov til å legge til kategorier."
+
+#: wp-includes/class-wp-xmlrpc-server.php:2476
+msgid "Sorry, you are not allowed to browse users."
+msgstr "Beklager, du har ikke lov til å se på brukere."
+
+#: wp-includes/class-wp-customize-manager.php:1024
+#: wp-includes/class-wp-customize-setting.php:547
+msgid "Invalid value."
+msgstr "Ugyldig verdi."
+
+#: wp-includes/class-wp-customize-manager.php:1103
+msgid "There is %s invalid setting."
+msgid_plural "There are %s invalid settings."
+msgstr[0] "Det er %s ugyldig innstilling."
+msgstr[1] "Det er %s ugyldige innstillinger."
+
+#. translators: URL to the widgets panel of the customizer
+#: wp-includes/class-wp-customize-nav-menus.php:523
+msgid "You can also place menus in widget areas with the “Custom Menu” widget."
+msgstr "Du kan også plassere menyer i widget-områder med «Egendefinert meny»-widgeten."
+
+#: wp-includes/class-wp-customize-manager.php:390
+#: wp-includes/script-loader.php:459
+msgid "Sorry, you are not allowed to customize this site."
+msgstr "Beklager, du har ikke lov til å redigere dette nettstedet."
+
+#. translators: 1:
+
+
+
- multisite && !is_network_admin()) {
* @return array
*/
public function _get_post_types() {
- $all_post_types = get_post_types();
- $internal_post_types = get_post_types(array('public'=>false, '_builtin'=>true));
- $post_types = array_diff($all_post_types, $internal_post_types);
+ $post_types = get_transient('ure_public_post_types');
+ if (empty($post_types)) {
+ $all_post_types = get_post_types();
+ $internal_post_types = get_post_types(array('public'=>false, '_builtin'=>true));
+ $post_types = array_diff($all_post_types, $internal_post_types);
+ set_transient('ure_public_post_types', $post_types, 30);
+ }
return $post_types;
}
- // end of get_post_types()
+ // end of _get_post_types()
- protected function add_custom_post_type_caps() {
-
- global $wp_roles;
-
+ public function get_edit_post_capabilities() {
$capabilities = array(
'create_posts',
'edit_posts',
@@ -1689,6 +1275,16 @@ if ($this->multisite && !is_network_admin()) {
'delete_others_posts'
);
+ return $capabilities;
+ }
+ // end of get_edit_post_capabilities();
+
+
+ protected function add_custom_post_type_caps() {
+
+ global $wp_roles;
+
+ $capabilities = $this->get_edit_post_capabilities();
$post_types = get_post_types(array(), 'objects');
$_post_types = $this->_get_post_types();
// do not forget attachment post type as it may use the own capabilities set
@@ -1705,16 +1301,17 @@ if ($this->multisite && !is_network_admin()) {
continue;
}
foreach($capabilities as $capability) {
- if (isset($post_type->cap->$capability)) {
- $cap_to_check = $post_type->cap->$capability;
- $this->add_capability_to_full_caps_list($cap_to_check);
- if (!$this->multisite &&
- isset($wp_roles->role_objects['administrator']) &&
- !isset($wp_roles->role_objects['administrator']->capabilities[$cap_to_check])) {
- // admin should be capable to edit any posts
- $wp_roles->role_objects['administrator']->add_cap($cap_to_check, true);
- }
- }
+ if (!isset($post_type->cap->$capability)) {
+ continue;
+ }
+ $cap_to_check = $post_type->cap->$capability;
+ $this->add_capability_to_full_caps_list($cap_to_check);
+ if (!$this->multisite &&
+ isset($wp_roles->role_objects['administrator']) &&
+ !isset($wp_roles->role_objects['administrator']->capabilities[$cap_to_check])) {
+ // admin should be capable to edit any posts
+ $wp_roles->role_objects['administrator']->add_cap($cap_to_check, true);
+ }
}
}
@@ -1738,8 +1335,11 @@ if ($this->multisite && !is_network_admin()) {
* Add capabilities for URE permissions system in case some were excluded from Administrator role
*
*/
- protected function add_ure_caps() {
-
+ protected function add_ure_caps() {
+ $key_capability = $this->get_key_capability();
+ if (!current_user_can($key_capability)) {
+ return;
+ }
$ure_caps = $this->get_ure_caps();
foreach(array_keys($ure_caps) as $cap) {
$this->add_capability_to_full_caps_list($cap);
@@ -1838,10 +1438,21 @@ if ($this->multisite && !is_network_admin()) {
protected function last_check_before_update() {
+ global $current_user;
+
if (empty($this->roles) || !is_array($this->roles) || count($this->roles)==0) { // Nothing to save - something goes wrong - stop ...
return false;
}
+ $key_capability = $this->get_key_capability();
+ $user_is_ure_admin = current_user_can($key_capability);
+ if (!$user_is_ure_admin) {
+ if (in_array($this->current_role, $current_user->roles)) {
+ // do not allow to a user update his own role if he does not have full access to the User Role Editor
+ return false;
+ }
+ }
+
return true;
}
// end of last_check_before_update()
@@ -2606,34 +2217,6 @@ if ($this->multisite && !is_network_admin()) {
}
// end of roles_text()
-
- /**
- * display opening part of the HTML box with title and CSS style
- *
- * @param string $title
- * @param string $style
- */
- protected function display_box_start($title, $style = '') {
- ?>
-
-
-
-
-
-
- is_pro()) {
@@ -2677,125 +2260,18 @@ if ($this->multisite && !is_network_admin()) {
// end of set_current_role()
- protected function show_admin_role_allowed() {
+ public function show_admin_role_allowed() {
$show_admin_role = $this->get_option('show_admin_role', 0);
$show_admin_role = ((defined('URE_SHOW_ADMIN_ROLE') && URE_SHOW_ADMIN_ROLE==1) || $show_admin_role==1) && $this->user_is_admin();
return $show_admin_role;
}
// end of show_admin_role()
-
-
- public function role_default_prepare_html($select_width=200) {
-
- if (!isset($this->roles) || !$this->roles) {
- // get roles data from database
- $this->roles = $this->get_user_roles();
- }
- $caps_access_restrict_for_simple_admin = $this->get_option('caps_access_restrict_for_simple_admin', 0);
- $show_admin_role = $this->show_admin_role_allowed();
- if ($select_width>0) {
- $select_style = 'style="width: '. $select_width .'px"';
- } else {
- $select_style = '';
- }
- $this->role_default_html = '';
-
- }
- // end of role_default_prepare_html()
-
-
- private function role_delete_prepare_html() {
- $roles_can_delete = $this->get_roles_can_delete();
- if ($roles_can_delete && count($roles_can_delete) > 0) {
- $this->role_delete_html = '';
- } else {
- $this->role_delete_html = '';
- }
- }
- // end of role_delete_prepare_html()
-
-
- private function role_select_copy_prepare_html($select_width=200) {
- $caps_access_restrict_for_simple_admin = $this->get_option('caps_access_restrict_for_simple_admin', 0);
- $show_admin_role = $this->show_admin_role_allowed();
- $this->role_to_copy_html = '';
- }
- // end of role_select_copy_prepare_html()
-
-
- public function role_edit_prepare_html($select_width=200) {
-
- $this->role_select_copy_prepare_html($select_width);
- if ($this->multisite && !is_network_admin()) {
- $this->role_default_prepare_html($select_width);
- }
- $this->role_delete_prepare_html();
- $this->caps_to_remove_prepare_html();
- }
- // end of role_edit_prepare_html()
-
-
- public function user_primary_role_dropdown_list($user_roles) {
-?>
-
-' . esc_html__('— No role for this site —') . '';
-?>
-
-user_to_edit->caps[$capability])) {
return true;
@@ -2872,7 +2348,7 @@ if ($this->multisite && !is_network_admin()) {
// end of get_current_role()
- protected function get_edit_user_caps_mode() {
+ public function get_edit_user_caps_mode() {
if ($this->multisite && is_super_admin()) {
return 1;
}
@@ -2926,5 +2402,17 @@ if ($this->multisite && !is_network_admin()) {
}
// end of get_assign_role()
+
+ public function get_ure_page_url() {
+ $page_url = URE_WP_ADMIN_URL . URE_PARENT . '?page=users-' . URE_PLUGIN_FILE;
+ $object = $this->get_request_var('object', 'get');
+ $user_id = $this->get_request_var('user_id', 'get', 'int');
+ if ($object=='user' && $user_id>0) {
+ $page_url .= '&object=user&user_id='. $user_id;
+ }
+
+ return $page_url;
+ }
+ // end of get_ure_page_url()
}
// end of URE_Lib class
\ No newline at end of file
diff --git a/wp-content/plugins/user-role-editor/includes/classes/user-other-roles.php b/wp-content/plugins/user-role-editor/includes/classes/user-other-roles.php
index 7d68779..a018b68 100644
--- a/wp-content/plugins/user-role-editor/includes/classes/user-other-roles.php
+++ b/wp-content/plugins/user-role-editor/includes/classes/user-other-roles.php
@@ -33,7 +33,8 @@ class URE_User_Other_Roles {
add_action( 'user_new_form', array($this, 'user_new_form'), 10, 1 );
add_action( 'profile_update', array($this, 'update'), 10 );
}
- if ($this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if ($multisite) {
add_action( 'wpmu_activate_user', array($this, 'add_other_roles'), 10, 1 );
}
add_action( 'user_register', array($this, 'add_other_roles'), 10, 1 );
diff --git a/wp-content/plugins/user-role-editor/includes/classes/user-role-editor.php b/wp-content/plugins/user-role-editor/includes/classes/user-role-editor.php
index a2b70b0..0d6eb49 100644
--- a/wp-content/plugins/user-role-editor/includes/classes/user-role-editor.php
+++ b/wp-content/plugins/user-role-editor/includes/classes/user-role-editor.php
@@ -20,6 +20,8 @@ class User_Role_Editor {
// URE's key capability
public $key_capability = 'not allowed';
+ protected $main_page_hook_suffix = null;
+ protected $settings_hook_suffix = null;
// URE pages hook suffixes
protected $ure_hook_suffixes = null;
@@ -35,10 +37,13 @@ class User_Role_Editor {
$this->user_other_roles = new URE_User_Other_Roles();
if ($this->lib->is_pro()) {
- $this->ure_hook_suffixes = array('settings_page_settings-user-role-editor-pro', 'users_page_users-user-role-editor-pro');
+ $this->main_page_hook_suffix = 'users_page_users-user-role-editor-pro';
+ $this->settings_hook_suffix = 'settings_page_settings-user-role-editor-pro';
} else {
- $this->ure_hook_suffixes = array('settings_page_settings-user-role-editor', 'users_page_users-user-role-editor');
+ $this->main_page_hook_suffix = 'users_page_users-user-role-editor';
+ $this->settings_hook_suffix = 'settings_page_settings-user-role-editor';
}
+ $this->ure_hook_suffixes = array($this->settings_hook_suffix, $this->main_page_hook_suffix);
// activation action
register_activation_hook(URE_PLUGIN_FULL_PATH, array($this, 'setup'));
@@ -60,7 +65,8 @@ class User_Role_Editor {
private function set_hooks() {
- if ($this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if ($multisite) {
// new blog may be registered not at admin back-end only but automatically after new user registration, e.g.
// Gravity Forms User Registration Addon does
add_action( 'wpmu_new_blog', array($this, 'duplicate_roles_for_new_blog'), 10, 2);
@@ -81,7 +87,7 @@ class User_Role_Editor {
// add own submenu
add_action('admin_menu', array($this, 'plugin_menu'));
- if ($this->lib->multisite) {
+ if ($multisite) {
// add own submenu
add_action('network_admin_menu', array($this, 'network_plugin_menu'));
}
@@ -130,7 +136,8 @@ class User_Role_Editor {
add_action('user_row_actions', array($this, 'user_row'), 10, 2);
add_filter('all_plugins', array($this, 'exclude_from_plugins_list'));
- if ($this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if ($multisite) {
$allow_edit_users_to_not_super_admin = $this->lib->get_option('allow_edit_users_to_not_super_admin', 0);
if ($allow_edit_users_to_not_super_admin) {
add_filter('map_meta_cap', array($this, 'restore_users_edit_caps'), 1, 4);
@@ -167,7 +174,7 @@ class User_Role_Editor {
global $pagenow, $current_user;
- $this->lib->raised_permissions = false;
+ $this->lib->set_raised_permissions(false);
if ($pagenow!=='user-new.php') {
return $site_admins;
@@ -183,7 +190,7 @@ class User_Role_Editor {
}
if (!in_array($current_user->user_login, $site_admins)) {
- $this->lib->raised_permissions = true;
+ $this->lib->set_raised_permissions(true);
$site_admins[] = $current_user->user_login;
}
@@ -394,14 +401,14 @@ class User_Role_Editor {
* @param type array $plugins plugins list
* @return type array $plugins updated plugins list
*/
- public function exclude_from_plugins_list($plugins) {
-
+ public function exclude_from_plugins_list($plugins) {
+ $multisite = $this->lib->get('multisite');
// if multi-site, then allow plugin activation for network superadmins and, if that's specially defined, - for single site administrators too
- if ($this->lib->multisite) {
+ if ($multisite) {
if (is_super_admin() || $this->lib->user_is_admin()) {
return $plugins;
}
- } else {
+ } else {
// is_super_admin() defines superadmin for not multisite as user who can 'delete_users' which I don't like.
// So let's check if user has 'administrator' role better.
if (current_user_can('administrator') || $this->lib->user_is_admin()) {
@@ -410,14 +417,14 @@ class User_Role_Editor {
}
// exclude URE from plugins list
- $key = basename(URE_PLUGIN_DIR) .'/'. URE_PLUGIN_FILE;
- unset($plugins[$key]);
+ $key = basename(URE_PLUGIN_DIR) . '/' . URE_PLUGIN_FILE;
+ unset($plugins[$key]);
return $plugins;
}
// end of exclude_from_plugins_list()
+
-
/**
* Load plugin translation files - linked to the 'plugins_loaded' action
*
@@ -459,8 +466,9 @@ class User_Role_Editor {
public function settings_screen_configure() {
+ $multisite = $this->lib->get('multisite');
$settings_page_hook = $this->settings_page_hook;
- if (is_multisite()) {
+ if ($multisite) {
$settings_page_hook .= '-network';
}
$screen = get_current_screen();
@@ -474,7 +482,7 @@ class User_Role_Editor {
'title' => esc_html__('General', 'user-role-editor'),
'content' => $screen_help->get_settings_help('general')
));
- if ($this->lib->is_pro() || !$this->lib->multisite) {
+ if ($this->lib->is_pro() || !$multisite) {
$screen->add_help_tab( array(
'id' => 'additional_modules',
'title' => esc_html__('Additional Modules', 'user-role-editor'),
@@ -486,7 +494,7 @@ class User_Role_Editor {
'title' => esc_html__('Default Roles', 'user-role-editor'),
'content' => $screen_help->get_settings_help('default_roles')
));
- if ($this->lib->multisite) {
+ if ($multisite) {
$screen->add_help_tab( array(
'id' => 'multisite',
'title' => esc_html__('Multisite', 'user-role-editor'),
@@ -505,13 +513,15 @@ class User_Role_Editor {
'users.php',
$translated_title,
$translated_title,
- $this->key_capability,
+ 'ure_edit_roles',
'users-' . URE_PLUGIN_FILE,
array($this, 'edit_roles'));
add_action("admin_print_styles-$ure_page", array($this, 'admin_css_action'));
}
- if ( !$this->lib->multisite || ($this->lib->multisite && !$this->lib->active_for_network) ) {
+ $multisite = $this->lib->get('multisite');
+ $active_for_network = $this->lib->get('active_for_network');
+ if ( !$multisite || ($multisite && !$active_for_network) ) {
$settings_capability = $this->lib->get_settings_capability();
$this->settings_page_hook = add_options_page(
$translated_title,
@@ -601,8 +611,8 @@ class User_Role_Editor {
* Update Additional Modules Options tab
*/
protected function update_addons_options() {
-
- if (!$this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if (!$multisite) {
$count_users_without_role = $this->lib->get_request_var('count_users_without_role', 'checkbox');
$this->lib->put_option('count_users_without_role', $count_users_without_role);
}
@@ -643,7 +653,8 @@ class User_Role_Editor {
protected function update_multisite_options() {
- if (!$this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if (!$multisite) {
return;
}
@@ -691,28 +702,29 @@ class User_Role_Editor {
$show_deprecated_caps = $this->lib->get_option('ure_show_deprecated_caps', 0);
$confirm_role_update = $this->lib->get_option('ure_confirm_role_update', 1);
$edit_user_caps = $this->lib->get_option('edit_user_caps', 1);
-
- if ($this->lib->multisite) {
+ $multisite = $this->lib->get('multisite');
+ if ($multisite) {
$allow_edit_users_to_not_super_admin = $this->lib->get_option('allow_edit_users_to_not_super_admin', 0);
} else {
$count_users_without_role = $this->lib->get_option('count_users_without_role', 0);
}
$this->lib->get_default_role();
- //$this->lib->editor_init1();
- $this->lib->role_default_prepare_html(0);
+ $view = new URE_Role_View();
+ $view->role_default_prepare_html(0);
$ure_tab_idx = $this->lib->get_request_var('ure_tab_idx', 'int');
do_action('ure_settings_load');
- if ($this->lib->multisite && is_network_admin()) {
+ if ($multisite && is_network_admin()) {
$link = 'settings.php';
} else {
$link = 'options-general.php';
}
- $license_key_only = $this->lib->multisite && is_network_admin() && !$this->lib->active_for_network;
+ $active_for_network = $this->lib->get('active_for_network');
+ $license_key_only = $multisite && is_network_admin() && !$active_for_network;
require_once(URE_PLUGIN_DIR . 'includes/settings-template.php');
@@ -722,7 +734,8 @@ class User_Role_Editor {
public function admin_css_action() {
- wp_enqueue_style('wp-jquery-ui-dialog');
+ wp_enqueue_style('wp-jquery-ui-dialog');
+ wp_enqueue_style('wp-jquery-ui-selectable');
if (stripos($_SERVER['REQUEST_URI'], 'settings-user-role-editor')!==false) {
wp_enqueue_style('ure-jquery-ui-tabs', URE_PLUGIN_URL . 'css/jquery-ui-1.10.4.custom.min.css', array(), false, 'screen');
}
@@ -734,7 +747,7 @@ class User_Role_Editor {
// call roles editor page
public function edit_roles() {
- if (!current_user_can($this->key_capability)) {
+ if (!current_user_can('ure_edit_roles')) {
wp_die(esc_html__('Insufficient permissions to work with User Role Editor', 'user-role-editor'));
}
@@ -756,30 +769,20 @@ class User_Role_Editor {
}
// end of setup()
-
-
- /**
- * Load plugin javascript stuff
- *
- * @param string $hook_suffix
- */
- public function admin_load_js($hook_suffix) {
-
- URE_Known_JS_CSS_Compatibility_Issues::fix($hook_suffix, $this->ure_hook_suffixes);
+
+
+ protected function load_main_page_js() {
- if (!in_array($hook_suffix, $this->ure_hook_suffixes)) {
- return;
- }
-
- $confirm_role_update = $this->lib->get_option('ure_confirm_role_update', 1);
+ $confirm_role_update = $this->lib->get_option('ure_confirm_role_update', 1);
+ $page_url = $this->lib->get_ure_page_url();
wp_enqueue_script('jquery-ui-dialog', false, array('jquery-ui-core', 'jquery-ui-button', 'jquery'));
- wp_enqueue_script('jquery-ui-tabs', false, array('jquery-ui-core', 'jquery'));
+ wp_enqueue_script('jquery-ui-selectable', false, array('jquery-ui-core', 'jquery'));
wp_register_script('ure-js', plugins_url('/js/ure-js.js', URE_PLUGIN_FULL_PATH));
wp_enqueue_script('ure-js');
wp_localize_script('ure-js', 'ure_data', array(
'wp_nonce' => wp_create_nonce('user-role-editor'),
- 'page_url' => URE_WP_ADMIN_URL . URE_PARENT . '?page=users-' . URE_PLUGIN_FILE,
+ 'page_url' => $page_url,
'is_multisite' => is_multisite() ? 1 : 0,
'confirm_role_update' => $confirm_role_update ? 1 : 0,
'confirm_title' => esc_html__('Confirm', 'user-role-editor'),
@@ -816,7 +819,35 @@ class User_Role_Editor {
));
// load additional JS stuff for Pro version, if exists
- do_action('ure_load_js');
+ do_action('ure_load_js');
+
+ }
+ // end of load_main_page_js()
+
+
+ protected function load_settings_js() {
+
+ wp_enqueue_script('jquery-ui-tabs', false, array('jquery-ui-core', 'jquery'));
+ do_action('ure_load_js_settings');
+
+ }
+ // end of load_settings_js()
+
+
+ /**
+ * Load plugin javascript stuff
+ *
+ * @param string $hook_suffix
+ */
+ public function admin_load_js($hook_suffix) {
+
+ URE_Known_JS_CSS_Compatibility_Issues::fix($hook_suffix, $this->ure_hook_suffixes);
+
+ if ($hook_suffix==$this->main_page_hook_suffix) {
+ $this->load_main_page_js();
+ } elseif($hook_suffix==$this->settings_hook_suffix) {
+ $this->load_settings_js();
+ }
}
// end of admin_load_js()
diff --git a/wp-content/plugins/user-role-editor/includes/classes/user-view.php b/wp-content/plugins/user-role-editor/includes/classes/user-view.php
new file mode 100644
index 0000000..7d029f2
--- /dev/null
+++ b/wp-content/plugins/user-role-editor/includes/classes/user-view.php
@@ -0,0 +1,207 @@
+
+ * @copyright Copyright (c) 2010 - 2016, Vladimir Garagulya
+ **/
+class URE_User_View extends URE_View {
+
+ private $lib = null;
+ private $user_to_edit = null;
+
+
+ public function __construct() {
+
+ parent::__construct();
+ $this->lib = URE_Lib::get_instance();
+ $this->user_to_edit = $this->lib->get('user_to_edit');
+
+ }
+ // end of __construct()
+
+
+ public function display_edit_dialogs() {
+
+ }
+ // end of display_edit_dialogs()
+
+
+ /**
+ * output HTML code to create URE toolbar
+ *
+ * @param boolean $role_delete
+ * @param boolean $capability_remove
+ */
+ public function toolbar() {
+?>
+
' ;
+
+ echo $output;
+ }
+ // end of show_capabilities()
+
+
+ // content of User Role Editor Pro advertisement slot - for direct call
+ public function advertise_pro() {
+ ?>
+
+ advert = new URE_Advertisement();
+ $this->advert->display();
+ }
+ // end of advertisement()
+
+
+ public function output_confirmation_dialog() {
+ ?>
+
'. esc_html__('Note for multisite environment: take into account that other default roles should exist at the site, in order to be assigned to the new registered users.', 'user-role-editor') .'
\ No newline at end of file
diff --git a/wp-content/plugins/user-role-editor/js/ure-js.js b/wp-content/plugins/user-role-editor/js/ure-js.js
index 149e31c..0ab8307 100644
--- a/wp-content/plugins/user-role-editor/js/ure-js.js
+++ b/wp-content/plugins/user-role-editor/js/ure-js.js
@@ -1,3 +1,5 @@
+var ure_obj = {selected_group: 'all', caps_counter: null};
+
// get/post via jQuery
(function ($) {
$.extend({
@@ -28,14 +30,29 @@ function ure_ui_button_text(caption) {
}
+function ure_select_selectable_element(selectable_container, elements_to_select) {
+ // add unselecting class to all elements in the styleboard canvas except the ones to select
+ jQuery(".ui-selected", selectable_container).not(elements_to_select).removeClass("ui-selected").addClass("ui-unselecting");
+ // add ui-selecting class to the elements to select
+ jQuery(elements_to_select).not(".ui-selected").addClass("ui-selecting");
+ // trigger the mouse stop event (this will select all .ui-selecting elements, and deselect all .ui-unselecting elements)
+ selectable_container.data("ui-selectable")._mouseStop(null);
+}
+
+
jQuery(function ($) {
- $('#ure_select_all').button({
- label: ure_data.select_all
- }).click(function (event) {
- event.preventDefault();
- ure_select_all(1);
- });
+ ure_count_caps_in_groups();
+ ure_sizes_update();
+ $('#ure_select_all_caps').click(ure_auto_select_caps);
+ $('#ure_caps_groups_list').selectable({
+ selected: function( event, ui ) {
+ // do not allow multiple selection
+ $(ui.selected).siblings().removeClass("ui-selected");
+ ure_caps_refresh(ui.selected.id);
+ }
+ });
+ ure_select_selectable_element($('#ure_caps_groups_list'), $('#ure_caps_group_all'));
if (typeof ure_current_role === 'undefined' || 'administrator' !== ure_current_role) {
$('#ure_unselect_all').button({
@@ -75,7 +92,7 @@ jQuery(function ($) {
modal: true,
autoOpen: true,
closeOnEscape: true,
- width: 400,
+ width: 450,
height: 230,
resizable: false,
title: ure_data.add_new_role_title,
@@ -131,7 +148,7 @@ jQuery(function ($) {
modal: true,
autoOpen: true,
closeOnEscape: true,
- width: 400,
+ width: 450,
height: 230,
resizable: false,
title: ure_data.rename_role_title,
@@ -444,6 +461,42 @@ function ure_select_all(selected) {
// end of ure_select_all()
+function ure_apply_selection(cb_id) {
+ var qfilter = jQuery('#quick_filter').val();
+ var parent_div = jQuery('#ure_cap_div_'+ cb_id);
+ var disabled = jQuery('#'+ cb_id).attr('disabled');
+ var result = false;
+ if (parent_div.hasClass(ure_obj.selected_group) && // make selection inside currently selected group of capabilities only
+ !parent_div.hasClass('hidden') && disabled!=='disabled') { // select not hidden and not disabled checkboxes (capabilities) only
+ // if quick filter is not empty, then apply selection to the tagged element only
+ if (qfilter==='' || parent_div.hasClass('ure_tag')) {
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+
+function ure_auto_select_caps(event) {
+ jQuery(function($) {
+ if (event.shiftKey) {
+ $('.ure-cap-cb').each(function () { // reverse selection
+ if (ure_apply_selection(this.id)) {
+ $(this).prop('checked', !$(this).prop('checked'));
+ }
+ });
+ } else {
+ $('.ure-cap-cb').each(function () { // switch On/Off all checkboxes
+ if (ure_apply_selection(this.id)) {
+ $(this).prop('checked', $('#ure_select_all_caps').prop('checked'));
+ }
+ });
+ }
+ });
+}
+
+
function ure_turn_caps_readable(user_id) {
var ure_object = 'user';
if (user_id === 0) {
@@ -479,14 +532,14 @@ function ure_role_change(role_name) {
function ure_filter_capabilities(cap_id) {
- var div_list = jQuery("div[id^='ure_div_cap_']");
+ var div_list = jQuery('.ure-cap-div');
for (i = 0; i < div_list.length; i++) {
if (cap_id !== '' && div_list[i].id.substr(11).indexOf(cap_id) !== -1) {
- div_list[i].ure_tag = true;
+ jQuery('#'+ div_list[i].id).addClass('ure_tag');
div_list[i].style.color = '#27CF27';
} else {
div_list[i].style.color = '#000000';
- div_list[i].ure_tag = false;
+ jQuery('#'+ div_list[i].id).removeClass('ure_tag');
}
}
;
@@ -501,3 +554,129 @@ function ure_hide_pro_banner() {
}
// end of ure_hide_this_banner()
+
+
+function ure_caps_refresh_all() {
+ jQuery('.ure-cap-div').each(function () {
+ if (jQuery(this).hasClass('hidden') && !jQuery(this).hasClass('deprecated')) {
+ jQuery(this).removeClass('hidden');
+ }
+ });
+}
+
+
+function ure_caps_refresh_for_group(group_id) {
+ var show_deprecated = jQuery('#ure_show_deprecated_caps').attr('checked');
+ jQuery('.ure-cap-div').each(function () {
+ var el = jQuery(this);
+ if (el.hasClass(group_id)) {
+ if (el.hasClass('hidden')) {
+ if (el.hasClass('blocked')) {
+ return;
+ }
+ if (el.hasClass('deprecated')) {
+ if (group_id==='deprecated' || show_deprecated) {
+ el.removeClass('hidden');
+ }
+ } else {
+ el.removeClass('hidden');
+ }
+ }
+ } else {
+ if (!el.hasClass('hidden')) {
+ el.addClass('hidden');
+ }
+ }
+ });
+}
+
+
+function ure_caps_refresh(group) {
+
+ var group_id = group.substr(15);
+ ure_obj.selected_group = group_id;
+ if (group_id === 'all') {
+ ure_caps_refresh_all();
+ } else {
+ ure_caps_refresh_for_group(group_id);
+ }
+ ure_change_caps_columns_quant();
+}
+
+
+function ure_validate_columns(columns) {
+ if (columns==1 || ure_obj.selected_group=='all') {
+ return columns;
+ }
+
+ // Do not split list on columns in case it contains less then < 25 capabilities
+ for (i=0; i\n"
+"Last-Translator: Vladimir Garagulya \n"
"Language-Team: https://www.role-editor.com \n"
"Language: en_EN\n"
"MIME-Version: 1.0\n"
@@ -13,254 +14,910 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;esc_html__;esc_html_e\n"
"X-Poedit-Basepath: .\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.8.7.1\n"
"X-Poedit-SearchPath-0: ..\n"
-#: ../includes/ure-role-edit.php:17
-msgid "Select Role and change its capabilities:"
+#: ../includes/classes/capabilities-groups-manager.php:44
+msgid "Custom Post Types"
msgstr ""
-#: ../includes/ure-role-edit.php:30 ../includes/ure-user-edit.php:54
-msgid "Show capabilities in human readable form"
+#: ../includes/classes/capabilities-groups-manager.php:73
+msgid "All"
msgstr ""
-#: ../includes/ure-role-edit.php:40 ../includes/settings-template.php:69
-#: ../includes/ure-user-edit.php:64 ../includes/class-ure-screen-help.php:21
-msgid "Show deprecated capabilities"
+#: ../includes/classes/capabilities-groups-manager.php:74
+msgid "Core"
msgstr ""
-#: ../includes/ure-role-edit.php:44
-msgid "If checked, then apply action to ALL sites of this Network"
-msgstr ""
-
-#: ../includes/ure-role-edit.php:56
-msgid "Apply to All Sites"
-msgstr ""
-
-#: ../includes/ure-role-edit.php:63 ../includes/ure-user-edit.php:110
-msgid "Core capabilities:"
-msgstr ""
-
-#: ../includes/ure-role-edit.php:65 ../includes/ure-user-edit.php:112
-msgid "Quick filter:"
-msgstr ""
-
-#: ../includes/ure-role-edit.php:83 ../includes/ure-user-edit.php:131
-msgid "Custom capabilities:"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:231
-msgid "Change role for users without role"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:232
-msgid "No rights"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:233
-msgid "Provide new role"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:296
-#: ../includes/class-user-role-editor.php:298
-msgid "You do not have permission to edit this user."
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:322
-#: ../includes/class-user-other-roles.php:162
-msgid "Capabilities"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:415
-msgid "Settings"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:426
-#: ../includes/class-ure-lib.php:2564
-msgid "Changelog"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:448
+#: ../includes/classes/capabilities-groups-manager.php:75
+#: ../includes/classes/user-role-editor.php:482
#: ../includes/settings-template.php:21
msgid "General"
msgstr ""
-#: ../includes/class-user-role-editor.php:454
-#: ../includes/settings-template.php:26
-msgid "Additional Modules"
+#: ../includes/classes/capabilities-groups-manager.php:76
+msgid "Themes"
msgstr ""
-#: ../includes/class-user-role-editor.php:460
-#: ../includes/settings-template.php:30
-msgid "Default Roles"
+#: ../includes/classes/capabilities-groups-manager.php:77
+msgid "Posts"
msgstr ""
-#: ../includes/class-user-role-editor.php:466
+#: ../includes/classes/capabilities-groups-manager.php:78
+msgid "Pages"
+msgstr ""
+
+#: ../includes/classes/capabilities-groups-manager.php:79
+msgid "Plugins"
+msgstr ""
+
+#: ../includes/classes/capabilities-groups-manager.php:80
+msgid "Users"
+msgstr ""
+
+#: ../includes/classes/capabilities-groups-manager.php:84
+#: ../includes/classes/user-role-editor.php:500
#: ../includes/settings-template.php:34
msgid "Multisite"
msgstr ""
-#: ../includes/class-user-role-editor.php:476
-#: ../includes/class-user-role-editor.php:505
-#: ../includes/class-ure-lib.php:357
+#: ../includes/classes/capabilities-groups-manager.php:86
+msgid "Deprecated"
+msgstr ""
+
+#: ../includes/classes/capabilities-groups-manager.php:91
+msgid "Custom capabilities"
+msgstr ""
+
+#: ../includes/classes/role-additional-options.php:69
+msgid "Hide admin bar"
+msgstr ""
+
+#: ../includes/classes/role-additional-options.php:121
+msgid "Additional Options"
+msgstr ""
+
+#: ../includes/classes/role-view.php:75
+msgid "None"
+msgstr ""
+
+#: ../includes/classes/role-view.php:108
+msgid "Delete All Unused Roles"
+msgstr ""
+
+#: ../includes/classes/role-view.php:168 ../includes/classes/role-view.php:179
+msgid "Role name (ID): "
+msgstr ""
+
+#: ../includes/classes/role-view.php:170 ../includes/classes/role-view.php:181
+msgid "Display Role Name: "
+msgstr ""
+
+#: ../includes/classes/role-view.php:172
+msgid "Make copy of: "
+msgstr ""
+
+#: ../includes/classes/role-view.php:188
+msgid "Select Role:"
+msgstr ""
+
+#: ../includes/classes/role-view.php:207
+msgid "Delete:"
+msgstr ""
+
+#: ../includes/classes/role-view.php:214
+msgid "Capability name (ID): "
+msgstr ""
+
+#: ../includes/classes/role-view.php:332 ../includes/classes/user-view.php:154
+msgid "Show capabilities in human readable form"
+msgstr ""
+
+#: ../includes/classes/role-view.php:342 ../includes/classes/screen-help.php:21
+#: ../includes/classes/user-view.php:164 ../includes/settings-template.php:69
+msgid "Show deprecated capabilities"
+msgstr ""
+
+#: ../includes/classes/role-view.php:346
+msgid "If checked, then apply action to ALL sites of this Network"
+msgstr ""
+
+#: ../includes/classes/role-view.php:359
+msgid "Apply to All Sites"
+msgstr ""
+
+#: ../includes/classes/role-view.php:376
+msgid "Select Role and change its capabilities:"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:12
+#: ../includes/classes/screen-help.php:41
+#: ../includes/classes/screen-help.php:60
+#: ../includes/classes/screen-help.php:79
+msgid "User Role Editor Options page help"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:15 ../includes/settings-template.php:53
+msgid "Show Administrator role at User Role Editor"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:16
+msgid ""
+"turn this option on in order to make the \"Administrator\" role available at "
+"the User Role Editor roles selection drop-down list. It is hidden by default "
+"for security reasons."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:18 ../includes/settings-template.php:61
+msgid "Show capabilities in the human readable form"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:19
+msgid ""
+"automatically converts capability names from the technical form for internal "
+"use like \"edit_others_posts\" to more user friendly form, e.g. \"Edit "
+"others posts\"."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:22
+msgid ""
+"Capabilities like \"level_0\", \"level_1\" are deprecated and are not used "
+"by WordPress. They are left at the user roles for the compatibility purpose "
+"with the old themes and plugins code. Turning on this option will show those "
+"deprecated capabilities."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:25 ../includes/settings-template.php:85
+msgid "Edit user capabilities"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:26
+msgid ""
+"If turned off - capabilities section of selected user is shown in readonly "
+"mode. Administrator can not assign capabilities to the user directly. He "
+"should make it using roles only."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:45 ../includes/settings-template.php:119
+msgid "Count users without role"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:46
+msgid ""
+"Show at the \"Users\" page a quant of users without role. Module allows to "
+"assign all of them an empty role \"No rights\", in order to look on the "
+"users list with role \"No rights\" at the separate tab then."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:63
+msgid "Other default roles for new registered user"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:64
+msgid ""
+"select roles below to assign them to the new user automatically as an "
+"addition to the primary role. Note for multisite environment: take into "
+"account that other default roles should exist at the site, in order to be "
+"assigned to the new registered users."
+msgstr ""
+
+#: ../includes/classes/screen-help.php:82
+msgid "Allow non super-admininstrators to create, edit and delete users"
+msgstr ""
+
+#: ../includes/classes/screen-help.php:83
+msgid ""
+"Super administrator only may create, edit and delete users under WordPress "
+"multi-site by default. Turn this option on in order to remove this "
+"limitation."
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:292
+msgid "Error: wrong request"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:327
+#: ../includes/classes/user-role-editor.php:510
+#: ../includes/classes/user-role-editor.php:541
msgid "User Role Editor"
msgstr ""
-#: ../includes/class-user-role-editor.php:568
-#: ../includes/class-user-role-editor.php:586
-#: ../includes/class-user-role-editor.php:630
+#: ../includes/classes/ure-lib.php:388
+msgid "Error: "
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:388
+msgid "Role"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:389
+msgid "does not exist"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:432
+msgid "Role is updated successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:434
+msgid "Roles are updated for all network"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:440
+msgid "Error occured during role(s) update"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:447
+msgid "User capabilities are updated successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:452
+msgid "Error occured during user update"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:510
+msgid "User Roles are restored to WordPress default values. "
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1047
+msgid "read about"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1048
+msgid "user capability"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1049
+msgid "Help"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1381 ../includes/classes/ure-lib.php:1657
+#: ../includes/classes/ure-lib.php:1773 ../includes/classes/ure-lib.php:1821
+#: ../includes/classes/ure-lib.php:2100 ../includes/classes/ure-lib.php:2143
+#: ../includes/classes/user-role-editor.php:751
+msgid "Insufficient permissions to work with User Role Editor"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1620
+msgid "Error is occur. Please check the log file."
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1666 ../includes/classes/ure-lib.php:1733
+msgid ""
+"Error: Role ID must contain latin characters, digits, hyphens or underscore "
+"only!"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1670 ../includes/classes/ure-lib.php:1737
+msgid ""
+"Error: WordPress does not support numeric Role name (ID). Add latin "
+"characters to it."
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1685
+#, php-format
+msgid "Role %s exists already"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1700
+msgid "Error is encountered during new role create operation"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1702
+#, php-format
+msgid "Role %s is created successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1726
+msgid "Error: Role ID is empty!"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1744
+msgid "Error: Empty role display name is not allowed."
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1751
+#, php-format
+msgid "Role %s does not exists"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1759
+#, php-format
+msgid "Role %s is renamed to %s successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1832
+msgid "Error encountered during role delete operation"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1834
+msgid "Unused roles are deleted successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1836
+#, php-format
+msgid "Role %s is deleted successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1867
+msgid "Error encountered during default role change operation"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1870
+#, php-format
+msgid "Default role for new users is set to %s successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1873
+msgid "Can not set Administrator role as a default one"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1875
+msgid "This role does not exist - "
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1891
+msgid "Editor"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1892
+msgid "Author"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1893
+msgid "Contributor"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1894
+msgid "Subscriber"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1896
+msgid "Switch themes"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1897
+msgid "Edit themes"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1898
+msgid "Activate plugins"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1899
+msgid "Edit plugins"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1900
+msgid "Edit users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1901
+msgid "Edit files"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1902
+msgid "Manage options"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1903
+msgid "Moderate comments"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1904
+msgid "Manage categories"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1905
+msgid "Manage links"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1906
+msgid "Upload files"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1907
+msgid "Import"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1908
+msgid "Unfiltered html"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1909
+msgid "Edit posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1910
+msgid "Edit others posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1911
+msgid "Edit published posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1912
+msgid "Publish posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1913
+msgid "Edit pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1914
+msgid "Read"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1915
+msgid "Level 10"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1916
+msgid "Level 9"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1917
+msgid "Level 8"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1918
+msgid "Level 7"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1919
+msgid "Level 6"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1920
+msgid "Level 5"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1921
+msgid "Level 4"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1922
+msgid "Level 3"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1923
+msgid "Level 2"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1924
+msgid "Level 1"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1925
+msgid "Level 0"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1926
+msgid "Edit others pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1927
+msgid "Edit published pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1928
+msgid "Publish pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1929
+msgid "Delete pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1930
+msgid "Delete others pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1931
+msgid "Delete published pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1932
+msgid "Delete posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1933
+msgid "Delete others posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1934
+msgid "Delete published posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1935
+msgid "Delete private posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1936
+msgid "Edit private posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1937
+msgid "Read private posts"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1938
+msgid "Delete private pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1939
+msgid "Edit private pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1940
+msgid "Read private pages"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1941
+msgid "Delete users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1942
+msgid "Create users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1943
+msgid "Unfiltered upload"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1944
+msgid "Edit dashboard"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1945
+msgid "Update plugins"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1946
+msgid "Delete plugins"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1947
+msgid "Install plugins"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1948
+msgid "Update themes"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1949
+msgid "Install themes"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1950
+msgid "Update core"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1951
+msgid "List users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1952
+msgid "Remove users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1953
+msgid "Add users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1954
+msgid "Promote users"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1955
+msgid "Edit theme options"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1956
+msgid "Delete themes"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:1957
+msgid "Export"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2111
+msgid "Error: Capability name must contain latin characters and digits only!"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2121
+#, php-format
+msgid "Capability %s is added successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2123
+#, php-format
+msgid "Capability %s exists already"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2150
+#, php-format
+msgid "Error! You do not have permission to delete this capability: %s!"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2169
+#, php-format
+msgid "Capability %s was removed successfully"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2209
+msgid "Version:"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2210
+msgid "Author's website"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2211
+msgid "Plugin webpage"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2212
+msgid "Plugin download"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2213
+#: ../includes/classes/user-role-editor.php:459
+msgid "Changelog"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2214
+msgid "FAQ"
+msgstr ""
+
+#: ../includes/classes/ure-lib.php:2359
+#, php-format
+msgid "Denied: %s"
+msgstr ""
+
+#: ../includes/classes/user-other-roles.php:81
+#: ../includes/classes/user-other-roles.php:182
+msgid "Other Roles"
+msgstr ""
+
+#: ../includes/classes/user-other-roles.php:82
+msgid "Select additional roles for this user"
+msgstr ""
+
+#: ../includes/classes/user-other-roles.php:161
+#: ../includes/classes/user-role-editor.php:355
+msgid "Capabilities"
+msgstr ""
+
+#: ../includes/classes/user-other-roles.php:168
+msgid "Edit"
+msgstr ""
+
+#: ../includes/classes/user-other-roles.php:218
+msgid "Additional Capabilities"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:254
+msgid "Change role for users without role"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:255
+msgid "To:"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:256
+msgid "No rights"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:257
+msgid "Provide new role"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:329
+#: ../includes/classes/user-role-editor.php:331
+msgid "You do not have permission to edit this user."
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:448
+msgid "Settings"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:488
+#: ../includes/settings-template.php:26
+msgid "Additional Modules"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:494
+#: ../includes/settings-template.php:30
+msgid "Default Roles"
+msgstr ""
+
+#: ../includes/classes/user-role-editor.php:604
+#: ../includes/classes/user-role-editor.php:622
+#: ../includes/classes/user-role-editor.php:667
msgid "User Role Editor options are updated"
msgstr ""
-#: ../includes/class-user-role-editor.php:614
+#: ../includes/classes/user-role-editor.php:650
msgid "Default Roles are updated"
msgstr ""
-#: ../includes/class-user-role-editor.php:639
+#: ../includes/classes/user-role-editor.php:676
msgid ""
"You do not have sufficient permissions to manage options for User Role "
"Editor."
msgstr ""
-#: ../includes/class-user-role-editor.php:712
-#: ../includes/class-ure-lib.php:1747 ../includes/class-ure-lib.php:2006
-#: ../includes/class-ure-lib.php:2122 ../includes/class-ure-lib.php:2170
-#: ../includes/class-ure-lib.php:2421 ../includes/class-ure-lib.php:2466
-msgid "Insufficient permissions to work with User Role Editor"
-msgstr ""
-
-#: ../includes/class-user-role-editor.php:772
+#: ../includes/classes/user-role-editor.php:788
msgid "Confirm"
msgstr ""
-#: ../includes/class-user-role-editor.php:773
+#: ../includes/classes/user-role-editor.php:789
msgid "Yes"
msgstr ""
-#: ../includes/class-user-role-editor.php:774
+#: ../includes/classes/user-role-editor.php:790
msgid "No"
msgstr ""
-#: ../includes/class-user-role-editor.php:775
+#: ../includes/classes/user-role-editor.php:791
msgid "Select All"
msgstr ""
-#: ../includes/class-user-role-editor.php:776
+#: ../includes/classes/user-role-editor.php:792
msgid "Unselect All"
msgstr ""
-#: ../includes/class-user-role-editor.php:777
+#: ../includes/classes/user-role-editor.php:793
msgid "Reverse"
msgstr ""
-#: ../includes/class-user-role-editor.php:778
+#: ../includes/classes/user-role-editor.php:794
msgid "Update"
msgstr ""
-#: ../includes/class-user-role-editor.php:779
+#: ../includes/classes/user-role-editor.php:795
msgid "Please confirm permissions update"
msgstr ""
-#: ../includes/class-user-role-editor.php:780
+#: ../includes/classes/user-role-editor.php:796
msgid "Add New Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:781
-#: ../includes/class-user-role-editor.php:786
+#: ../includes/classes/user-role-editor.php:797
+#: ../includes/classes/user-role-editor.php:802
msgid "Rename Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:782
+#: ../includes/classes/user-role-editor.php:798
msgid " Role name (ID) can not be empty!"
msgstr ""
-#: ../includes/class-user-role-editor.php:783
+#: ../includes/classes/user-role-editor.php:799
msgid ""
" Role name (ID) must contain latin characters, digits, hyphens or underscore "
"only!"
msgstr ""
-#: ../includes/class-user-role-editor.php:784
+#: ../includes/classes/user-role-editor.php:800
msgid ""
" WordPress does not support numeric Role name (ID). Add latin characters to "
"it."
msgstr ""
-#: ../includes/class-user-role-editor.php:785
+#: ../includes/classes/user-role-editor.php:801
msgid "Add Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:787
+#: ../includes/classes/user-role-editor.php:803
msgid "Delete Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:788
+#: ../includes/classes/user-role-editor.php:804
msgid "Cancel"
msgstr ""
-#: ../includes/class-user-role-editor.php:789
+#: ../includes/classes/user-role-editor.php:805
msgid "Add Capability"
msgstr ""
-#: ../includes/class-user-role-editor.php:790
-#: ../includes/class-user-role-editor.php:799
+#: ../includes/classes/user-role-editor.php:806
+#: ../includes/classes/user-role-editor.php:815
msgid "Delete Capability"
msgstr ""
-#: ../includes/class-user-role-editor.php:791
+#: ../includes/classes/user-role-editor.php:807
msgid "Reset"
msgstr ""
-#: ../includes/class-user-role-editor.php:792
+#: ../includes/classes/user-role-editor.php:808
msgid "DANGER! Resetting will restore default settings from WordPress Core."
msgstr ""
-#: ../includes/class-user-role-editor.php:793
+#: ../includes/classes/user-role-editor.php:809
msgid ""
"If any plugins have changed capabilities in any way upon installation (such "
"as S2Member, WooCommerce, and many more), those capabilities will be DELETED!"
msgstr ""
-#: ../includes/class-user-role-editor.php:794
+#: ../includes/classes/user-role-editor.php:810
msgid ""
"For more information on how to undo changes and restore plugin capabilities "
"go to"
msgstr ""
-#: ../includes/class-user-role-editor.php:796
+#: ../includes/classes/user-role-editor.php:812
msgid "Continue?"
msgstr ""
-#: ../includes/class-user-role-editor.php:797
+#: ../includes/classes/user-role-editor.php:813
msgid "Default Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:798
+#: ../includes/classes/user-role-editor.php:814
msgid "Set New Default Role"
msgstr ""
-#: ../includes/class-user-role-editor.php:800
+#: ../includes/classes/user-role-editor.php:816
msgid ""
"Warning! Be careful - removing critical capability could crash some plugin "
"or other custom code"
msgstr ""
-#: ../includes/class-user-role-editor.php:801
+#: ../includes/classes/user-role-editor.php:817
msgid " Capability name (ID) can not be empty!"
msgstr ""
-#: ../includes/class-user-role-editor.php:802
+#: ../includes/classes/user-role-editor.php:818
msgid ""
" Capability name (ID) must contain latin characters, digits, hyphens or "
"underscore only!"
msgstr ""
-#: ../includes/class-role-additional-options.php:53
-msgid "Hide admin bar"
+#: ../includes/classes/user-view.php:61
+msgid "Switch To"
msgstr ""
-#: ../includes/class-role-additional-options.php:103
-msgid "Additional Options"
+#: ../includes/classes/user-view.php:73
+msgid "Network Super Admin"
+msgstr ""
+
+#: ../includes/classes/user-view.php:98
+msgid "— No role for this site —"
+msgstr ""
+
+#: ../includes/classes/user-view.php:137
+msgid "Change capabilities for user"
+msgstr ""
+
+#: ../includes/classes/user-view.php:172
+msgid "Primary Role:"
+msgstr ""
+
+#: ../includes/classes/user-view.php:178
+msgid "bbPress Role:"
+msgstr ""
+
+#: ../includes/classes/user-view.php:187
+msgid "Other Roles:"
+msgstr ""
+
+#: ../includes/classes/view.php:260
+msgid "Group"
+msgstr ""
+
+#: ../includes/classes/view.php:260
+msgid "Total"
+msgstr ""
+
+#: ../includes/classes/view.php:260
+msgid "Granted"
+msgstr ""
+
+#: ../includes/classes/view.php:267
+msgid "Quick filter:"
+msgstr ""
+
+#: ../includes/classes/view.php:271
+msgid "Columns:"
msgstr ""
#: ../includes/settings-template.php:17
@@ -271,35 +928,15 @@ msgstr ""
msgid "About"
msgstr ""
-#: ../includes/settings-template.php:53
-#: ../includes/class-ure-screen-help.php:15
-msgid "Show Administrator role at User Role Editor"
-msgstr ""
-
-#: ../includes/settings-template.php:61
-#: ../includes/class-ure-screen-help.php:18
-msgid "Show capabilities in the human readable form"
-msgstr ""
-
#: ../includes/settings-template.php:77
msgid "Confirm role update"
msgstr ""
-#: ../includes/settings-template.php:85
-#: ../includes/class-ure-screen-help.php:25
-msgid "Edit user capabilities"
-msgstr ""
-
#: ../includes/settings-template.php:98 ../includes/settings-template.php:134
#: ../includes/settings-template.php:166 ../includes/settings-template.php:198
msgid "Save"
msgstr ""
-#: ../includes/settings-template.php:119
-#: ../includes/class-ure-screen-help.php:45
-msgid "Count users without role"
-msgstr ""
-
#: ../includes/settings-template.php:146
msgid "Primary default role: "
msgstr ""
@@ -318,586 +955,3 @@ msgstr ""
#: ../includes/settings-template.php:185
msgid "Allow non super administrators to create, edit, and delete users"
msgstr ""
-
-#: ../includes/class-user-other-roles.php:82
-#: ../includes/class-user-other-roles.php:183
-#: ../includes/class-user-other-roles.php:243
-msgid "Other Roles"
-msgstr ""
-
-#: ../includes/class-user-other-roles.php:83
-msgid "Select additional roles for this user"
-msgstr ""
-
-#: ../includes/class-user-other-roles.php:169
-msgid "Edit"
-msgstr ""
-
-#: ../includes/class-user-other-roles.php:215
-msgid "Additional Capabilities"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:255
-msgid "Error: wrong request"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:288 ../includes/class-ure-lib.php:299
-msgid "Role name (ID): "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:290 ../includes/class-ure-lib.php:301
-msgid "Display Role Name: "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:292
-msgid "Make copy of: "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:308
-msgid "Select Role:"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:327
-msgid "Delete:"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:334
-msgid "Capability name (ID): "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:454
-msgid "Error: "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:454
-msgid "Role"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:455
-msgid "does not exist"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:498
-msgid "Role is updated successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:500
-msgid "Roles are updated for all network"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:506
-msgid "Error occured during role(s) update"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:513
-msgid "User capabilities are updated successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:518
-msgid "Error occured during user update"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:576
-msgid "User Roles are restored to WordPress default values. "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:1465
-msgid "read about"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:1466
-msgid "user capability"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:1467
-msgid "Help"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:1969
-msgid "Error is occur. Please check the log file."
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2015 ../includes/class-ure-lib.php:2082
-msgid ""
-"Error: Role ID must contain latin characters, digits, hyphens or underscore "
-"only!"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2019 ../includes/class-ure-lib.php:2086
-msgid ""
-"Error: WordPress does not support numeric Role name (ID). Add latin "
-"characters to it."
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2034
-#, php-format
-msgid "Role %s exists already"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2049
-msgid "Error is encountered during new role create operation"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2051
-#, php-format
-msgid "Role %s is created successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2075
-msgid "Error: Role ID is empty!"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2093
-msgid "Error: Empty role display name is not allowed."
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2100
-#, php-format
-msgid "Role %s does not exists"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2108
-#, php-format
-msgid "Role %s is renamed to %s successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2181
-msgid "Error encountered during role delete operation"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2183
-msgid "Unused roles are deleted successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2185
-#, php-format
-msgid "Role %s is deleted successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2216
-msgid "Error encountered during default role change operation"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2219
-#, php-format
-msgid "Default role for new users is set to %s successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2222
-msgid "Can not set Administrator role as a default one"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2224
-msgid "This role does not exist - "
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2240
-msgid "Editor"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2241
-msgid "Author"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2242
-msgid "Contributor"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2243
-msgid "Subscriber"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2245
-msgid "Switch themes"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2246
-msgid "Edit themes"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2247
-msgid "Activate plugins"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2248
-msgid "Edit plugins"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2249
-msgid "Edit users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2250
-msgid "Edit files"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2251
-msgid "Manage options"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2252
-msgid "Moderate comments"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2253
-msgid "Manage categories"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2254
-msgid "Manage links"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2255
-msgid "Upload files"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2256
-msgid "Import"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2257
-msgid "Unfiltered html"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2258
-msgid "Edit posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2259
-msgid "Edit others posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2260
-msgid "Edit published posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2261
-msgid "Publish posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2262
-msgid "Edit pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2263
-msgid "Read"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2264
-msgid "Level 10"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2265
-msgid "Level 9"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2266
-msgid "Level 8"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2267
-msgid "Level 7"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2268
-msgid "Level 6"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2269
-msgid "Level 5"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2270
-msgid "Level 4"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2271
-msgid "Level 3"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2272
-msgid "Level 2"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2273
-msgid "Level 1"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2274
-msgid "Level 0"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2275
-msgid "Edit others pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2276
-msgid "Edit published pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2277
-msgid "Publish pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2278
-msgid "Delete pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2279
-msgid "Delete others pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2280
-msgid "Delete published pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2281
-msgid "Delete posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2282
-msgid "Delete others posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2283
-msgid "Delete published posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2284
-msgid "Delete private posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2285
-msgid "Edit private posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2286
-msgid "Read private posts"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2287
-msgid "Delete private pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2288
-msgid "Edit private pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2289
-msgid "Read private pages"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2290
-msgid "Delete users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2291
-msgid "Create users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2292
-msgid "Unfiltered upload"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2293
-msgid "Edit dashboard"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2294
-msgid "Update plugins"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2295
-msgid "Delete plugins"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2296
-msgid "Install plugins"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2297
-msgid "Update themes"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2298
-msgid "Install themes"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2299
-msgid "Update core"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2300
-msgid "List users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2301
-msgid "Remove users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2302
-msgid "Add users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2303
-msgid "Promote users"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2304
-msgid "Edit theme options"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2305
-msgid "Delete themes"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2306
-msgid "Export"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2429
-msgid "Error: Capability name must contain latin characters and digits only!"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2442
-#, php-format
-msgid "Capability %s is added successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2444
-#, php-format
-msgid "Capability %s exists already"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2473
-#, php-format
-msgid "Error! You do not have permission to delete this capability: %s!"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2492
-#, php-format
-msgid "Capability %s was removed successfully"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2560
-msgid "Version:"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2561
-msgid "Author's website"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2562
-msgid "Plugin webpage"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2563
-msgid "Plugin download"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2565
-msgid "FAQ"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2643
-msgid "Delete All Unused Roles"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2656
-msgid "None"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2702
-msgid "— No role for this site —"
-msgstr ""
-
-#: ../includes/class-ure-lib.php:2817
-#, php-format
-msgid "Denied: %s"
-msgstr ""
-
-#: ../includes/ure-user-edit.php:32
-msgid "Network Super Admin"
-msgstr ""
-
-#: ../includes/ure-user-edit.php:35
-msgid "Change capabilities for user"
-msgstr ""
-
-#: ../includes/ure-user-edit.php:72
-msgid "Primary Role:"
-msgstr ""
-
-#: ../includes/ure-user-edit.php:82
-msgid "bbPress Role:"
-msgstr ""
-
-#: ../includes/ure-user-edit.php:92
-msgid "Other Roles:"
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:12
-#: ../includes/class-ure-screen-help.php:41
-#: ../includes/class-ure-screen-help.php:60
-#: ../includes/class-ure-screen-help.php:79
-msgid "User Role Editor Options page help"
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:16
-msgid ""
-"turn this option on in order to make the \"Administrator\" role available at "
-"the User Role Editor roles selection drop-down list. It is hidden by default "
-"for security reasons."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:19
-msgid ""
-"automatically converts capability names from the technical form for internal "
-"use like \"edit_others_posts\" to more user friendly form, e.g. \"Edit "
-"others posts\"."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:22
-msgid ""
-"Capabilities like \"level_0\", \"level_1\" are deprecated and are not used "
-"by WordPress. They are left at the user roles for the compatibility purpose "
-"with the old themes and plugins code. Turning on this option will show those "
-"deprecated capabilities."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:26
-msgid ""
-"If turned off - capabilities section of selected user is shown in readonly "
-"mode. Administrator can not assign capabilities to the user directly. He "
-"should make it using roles only."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:46
-msgid ""
-"Show at the \"Users\" page a quant of users without role. Module allows to "
-"assign all of them an empty role \"No rights\", in order to look on the "
-"users list with role \"No rights\" at the separate tab then."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:63
-msgid "Other default roles for new registered user"
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:64
-msgid ""
-"select roles below to assign them to the new user automatically as an "
-"addition to the primary role. Note for multisite environment: take into "
-"account that other default roles should exist at the site, in order to be "
-"assigned to the new registered users."
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:82
-msgid "Allow non super-admininstrators to create, edit and delete users"
-msgstr ""
-
-#: ../includes/class-ure-screen-help.php:83
-msgid ""
-"Super administrator only may create, edit and delete users under WordPress "
-"multi-site by default. Turn this option on in order to remove this "
-"limitation."
-msgstr ""
diff --git a/wp-content/plugins/user-role-editor/readme.txt b/wp-content/plugins/user-role-editor/readme.txt
index c3d4eba..5c60cae 100644
--- a/wp-content/plugins/user-role-editor/readme.txt
+++ b/wp-content/plugins/user-role-editor/readme.txt
@@ -3,8 +3,8 @@ Contributors: shinephp
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=vladimir%40shinephp%2ecom&lc=RU&item_name=ShinePHP%2ecom&item_number=User%20Role%20Editor%20WordPress%20plugin¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
Tags: user, role, editor, security, access, permission, capability
Requires at least: 4.0
-Tested up to: 4.5.1
-Stable tag: 4.25.2
+Tested up to: 4.6
+Stable tag: 4.27
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -32,6 +32,7 @@ Do you need more functionality with quality support in the real time? Do you wis
Block selected admin menu items for role.
Block selected widgets under "Appearance" menu for role.
+
Show widgets at front-end for selected roles.
Block selected meta boxes (dashboard, posts, pages, custom post types) for role.
"Export/Import" module. You can export user roles to the local file and import them then to any WordPress site or other sites of the multi-site WordPress network.
Roles and Users permissions management via Network Admin for multisite configuration. One click Synchronization to the whole network.
@@ -77,6 +78,30 @@ https://translate.wordpress.org/projects/wp-plugins/user-role-editor/
== Changelog ==
+= [4.27] 18.08.2016 =
+* New: Total/Granted counters were added to the capabilities groups titles.
+* New: "Columns" drop-down menu allows to change capabilities section layout to 1, 2 or 3 columns.
+* New: Capabilities section is limited in height and has independent scrollbar.
+* Update: User Role Editor page markup was updated to use more available space on page.
+* Update: URE_Ajax_Processor class allows to differentiate required user permissions according to action submitted by user.
+* Fix: CSS updated to exclude text overlapping at capabilities groups section when custom post type name is not fitted into 1 line.
+* Fix: required JavaScript files were not loaded at "Network Admin->Settings->User Role Editor" page.
+
+= [4.26.3] 25.07.2016 =
+* Fix: Selecting a sub-group/list of caps does make the ure_select_all_caps checkbox select all within that group, but checking that box when at the "All" top-level group did not work.
+* Fix: Notice: Undefined property: URE_Role_View::$apply_to_all
+
+= [4.26.1] 14.07.2016 =
+* Fix: some bugs, like 'undefined property' notices, etc.
+
+= [4.26] 14.07.2016 =
+* New: User capabilities were groupd by functionality for more convenience.
+* Update: URE_KEY_CAPABILITY constant was changed from 'ure_edit_roles' to 'ure_manage_options'. To make possible for non-admin users access to the User Role Editor without access to the 'administrator' role and users with 'administrator' role.
+* Update: User receives full access to User Role Editor under WordPress multisite if he has 'manage_network_plugins' capability instead of 'manager_network_users' as earlier. This allows to give user ability to edit network users without giving him access to the User Role Editor.
+* Update: Multisite: use WordPress's global $current_site->blog_id to define main blog ID instead of selecting the 1st one from the sorted list of blogs.
+* Update: use WP transients at URE_Lib::_get_post_types() to reduce response time.
+* Update: various internal optimizations.
+
= [4.25.2] 03.05.2016 =
* Update: Enhanced inner processing of available custom post types list.
* Update: Uses 15 seconds transient cache in order to not count users without role twice when 'restrict_manage_users' action fires.
diff --git a/wp-content/plugins/user-role-editor/screenshot-1.png b/wp-content/plugins/user-role-editor/screenshot-1.png
index 39924f1..45164b0 100644
Binary files a/wp-content/plugins/user-role-editor/screenshot-1.png and b/wp-content/plugins/user-role-editor/screenshot-1.png differ
diff --git a/wp-content/plugins/user-role-editor/screenshot-2.png b/wp-content/plugins/user-role-editor/screenshot-2.png
index 0a091cb..934f6ec 100644
Binary files a/wp-content/plugins/user-role-editor/screenshot-2.png and b/wp-content/plugins/user-role-editor/screenshot-2.png differ
diff --git a/wp-content/plugins/user-role-editor/screenshot-3.png b/wp-content/plugins/user-role-editor/screenshot-3.png
index 0b93f41..42a95ad 100644
Binary files a/wp-content/plugins/user-role-editor/screenshot-3.png and b/wp-content/plugins/user-role-editor/screenshot-3.png differ
diff --git a/wp-content/plugins/user-role-editor/screenshot-4.png b/wp-content/plugins/user-role-editor/screenshot-4.png
index d572b11..03b5f84 100644
Binary files a/wp-content/plugins/user-role-editor/screenshot-4.png and b/wp-content/plugins/user-role-editor/screenshot-4.png differ
diff --git a/wp-content/plugins/user-role-editor/user-role-editor.php b/wp-content/plugins/user-role-editor/user-role-editor.php
index 4d299ef..e8314c3 100644
--- a/wp-content/plugins/user-role-editor/user-role-editor.php
+++ b/wp-content/plugins/user-role-editor/user-role-editor.php
@@ -3,7 +3,7 @@
Plugin Name: User Role Editor
Plugin URI: https://www.role-editor.com
Description: Change/add/delete WordPress user roles and capabilities.
-Version: 4.25.2
+Version: 4.27
Author: Vladimir Garagulya
Author URI: https://www.role-editor.com
Text Domain: ure
@@ -23,7 +23,7 @@ if (defined('URE_PLUGIN_URL')) {
wp_die('It seems that other version of User Role Editor is active. Please deactivate it before use this version');
}
-define('URE_VERSION', '4.25.2');
+define('URE_VERSION', '4.27');
define('URE_PLUGIN_URL', plugin_dir_url(__FILE__));
define('URE_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('URE_PLUGIN_BASE_NAME', plugin_basename(__FILE__));
diff --git a/wp-content/themes/aktiv2014/test/.bowerrc b/wp-content/themes/aktiv2014/test/.bowerrc
deleted file mode 100644
index 44491d3..0000000
--- a/wp-content/themes/aktiv2014/test/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "directory": "bower_components"
-}
diff --git a/wp-content/themes/aktiv2014/test/bower.json b/wp-content/themes/aktiv2014/test/bower.json
deleted file mode 100644
index e507e0d..0000000
--- a/wp-content/themes/aktiv2014/test/bower.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "aktiv2014",
- "private": true,
- "dependencies": {
- "chai": "~1.8.0",
- "mocha": "~1.14.0"
- },
- "devDependencies": {}
-}
diff --git a/wp-content/themes/aktiv2014/test/index.html b/wp-content/themes/aktiv2014/test/index.html
deleted file mode 100644
index d18b7d3..0000000
--- a/wp-content/themes/aktiv2014/test/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- Mocha Spec Runner
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/wp-content/themes/aktiv2014/test/spec/test.js b/wp-content/themes/aktiv2014/test/spec/test.js
deleted file mode 100644
index adfd614..0000000
--- a/wp-content/themes/aktiv2014/test/spec/test.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/* global describe, it */
-
-(function () {
- 'use strict';
-
- describe('Give it some context', function () {
- describe('maybe a bit more context here', function () {
- it('should run here few assertions', function () {
-
- });
- });
- });
-})();
diff --git a/wp-content/themes/twentyfifteen/functions.php b/wp-content/themes/twentyfifteen/functions.php
index 50cce93..056a361 100644
--- a/wp-content/themes/twentyfifteen/functions.php
+++ b/wp-content/themes/twentyfifteen/functions.php
@@ -55,11 +55,11 @@ function twentyfifteen_setup() {
/*
* Make theme available for translation.
- * Translations can be filed in the /languages/ directory.
+ * Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/twentyfifteen
* If you're building a theme based on twentyfifteen, use a find and replace
* to change 'twentyfifteen' to the name of your theme in all the template files
*/
- load_theme_textdomain( 'twentyfifteen', get_template_directory() . '/languages' );
+ load_theme_textdomain( 'twentyfifteen' );
// Add default posts and comments RSS feed links to head.
add_theme_support( 'automatic-feed-links' );
diff --git a/wp-content/themes/twentyfifteen/languages/twentyfifteen.pot b/wp-content/themes/twentyfifteen/languages/twentyfifteen.pot
deleted file mode 100644
index b01d427..0000000
--- a/wp-content/themes/twentyfifteen/languages/twentyfifteen.pot
+++ /dev/null
@@ -1,321 +0,0 @@
-# Copyright (C) 2016 the WordPress team
-# This file is distributed under the GNU General Public License v2 or later.
-msgid ""
-msgstr ""
-"Project-Id-Version: Twenty Fifteen 1.5\n"
-"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentyfifteen\n"
-"POT-Creation-Date: 2016-04-05 09:48:39+00:00\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-
-#: 404.php:17
-msgid "Oops! That page can’t be found."
-msgstr ""
-
-#: 404.php:21
-msgid "It looks like nothing was found at this location. Maybe try a search?"
-msgstr ""
-
-#: archive.php:49 index.php:46 search.php:38
-msgid "Previous page"
-msgstr ""
-
-#: archive.php:50 index.php:47 search.php:39
-msgid "Next page"
-msgstr ""
-
-#: archive.php:51 content-link.php:40 content-page.php:29 content.php:42
-#: image.php:63 index.php:48 search.php:40
-msgid "Page"
-msgstr ""
-
-#: author-bio.php:12
-msgid "Published by"
-msgstr ""
-
-#: author-bio.php:34
-msgid "View all posts by %s"
-msgstr ""
-
-#: comments.php:28
-msgctxt "comments title"
-msgid "One thought on “%2$s”"
-msgid_plural "%1$s thoughts on “%2$s”"
-msgstr[0] ""
-msgstr[1] ""
-
-#: comments.php:53
-msgid "Comments are closed."
-msgstr ""
-
-#. translators: %s: Name of current post
-#: content-link.php:31 content.php:33 inc/template-tags.php:238
-msgid "Continue reading %s"
-msgstr ""
-
-#: content-link.php:36 content-page.php:25 content.php:38 image.php:59
-msgid "Pages:"
-msgstr ""
-
-#: content-link.php:56 content-page.php:35 content-search.php:28
-#: content-search.php:33 content.php:57 image.php:71
-msgid "Edit"
-msgstr ""
-
-#: content-none.php:15
-msgid "Nothing Found"
-msgstr ""
-
-#: content-none.php:22
-msgid ""
-"Ready to publish your first post? Get started here."
-msgstr ""
-
-#: content-none.php:26
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with some "
-"different keywords."
-msgstr ""
-
-#: content-none.php:31
-msgid ""
-"It seems we can’t find what you’re looking for. Perhaps "
-"searching can help."
-msgstr ""
-
-#. #-#-#-#-# twentyfifteen.pot (Twenty Fifteen 1.5) #-#-#-#-#
-#. Author URI of the plugin/theme
-#: footer.php:25
-msgid "https://wordpress.org/"
-msgstr ""
-
-#: footer.php:25
-msgid "Proudly powered by %s"
-msgstr ""
-
-#: functions.php:85
-msgid "Primary Menu"
-msgstr ""
-
-#: functions.php:86
-msgid "Social Links Menu"
-msgstr ""
-
-#: functions.php:147
-msgid "Widget Area"
-msgstr ""
-
-#: functions.php:149
-msgid "Add widgets here to appear in your sidebar."
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Noto Sans, translate this to 'off'. Do not translate into your own
-#. language.
-#: functions.php:175
-msgctxt "Noto Sans font: on or off"
-msgid "on"
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Noto Serif, translate this to 'off'. Do not translate into your own
-#. language.
-#: functions.php:183
-msgctxt "Noto Serif font: on or off"
-msgid "on"
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Inconsolata, translate this to 'off'. Do not translate into your own
-#. language.
-#: functions.php:191
-msgctxt "Inconsolata font: on or off"
-msgid "on"
-msgstr ""
-
-#. Translators: To add an additional character subset specific to your
-#. language, translate this to 'greek', 'cyrillic', 'devanagari' or
-#. 'vietnamese'. Do not translate into your own language.
-#: functions.php:199
-msgctxt "Add new subset (greek, cyrillic, devanagari, vietnamese)"
-msgid "no-subset"
-msgstr ""
-
-#: functions.php:269
-msgid "expand child menu"
-msgstr ""
-
-#: functions.php:270
-msgid "collapse child menu"
-msgstr ""
-
-#: header.php:26
-msgid "Skip to content"
-msgstr ""
-
-#: header.php:45
-msgid "Menu and widgets"
-msgstr ""
-
-#: image.php:24
-msgid "Previous Image"
-msgstr ""
-
-#: image.php:24
-msgid "Next Image"
-msgstr ""
-
-#: image.php:84
-msgctxt "Parent post link"
-msgid ""
-"Published in"
-"%title"
-msgstr ""
-
-#: inc/back-compat.php:37 inc/back-compat.php:47 inc/back-compat.php:60
-msgid ""
-"Twenty Fifteen requires at least WordPress version 4.1. You are running "
-"version %s. Please upgrade and try again."
-msgstr ""
-
-#: inc/customizer.php:44
-msgid "Base Color Scheme"
-msgstr ""
-
-#: inc/customizer.php:59
-msgid "Header and Sidebar Text Color"
-msgstr ""
-
-#: inc/customizer.php:60 inc/customizer.php:76 inc/customizer.php:81
-msgid "Applied to the header on small screens and the sidebar on wide screens."
-msgstr ""
-
-#: inc/customizer.php:75
-msgid "Header and Sidebar Background Color"
-msgstr ""
-
-#: inc/customizer.php:150
-msgid "Default"
-msgstr ""
-
-#: inc/customizer.php:161
-msgid "Dark"
-msgstr ""
-
-#: inc/customizer.php:172
-msgid "Yellow"
-msgstr ""
-
-#: inc/customizer.php:183
-msgid "Pink"
-msgstr ""
-
-#: inc/customizer.php:194
-msgid "Purple"
-msgstr ""
-
-#: inc/customizer.php:205
-msgid "Blue"
-msgstr ""
-
-#: inc/template-tags.php:23
-msgid "Comment navigation"
-msgstr ""
-
-#: inc/template-tags.php:26
-msgid "Older Comments"
-msgstr ""
-
-#: inc/template-tags.php:30
-msgid "Newer Comments"
-msgstr ""
-
-#: inc/template-tags.php:49
-msgid "Featured"
-msgstr ""
-
-#: inc/template-tags.php:55
-msgctxt "Used before post format."
-msgid "Format"
-msgstr ""
-
-#: inc/template-tags.php:76
-msgctxt "Used before publish date."
-msgid "Posted on"
-msgstr ""
-
-#: inc/template-tags.php:85
-msgctxt "Used before post author name."
-msgid "Author"
-msgstr ""
-
-#: inc/template-tags.php:91 inc/template-tags.php:99
-msgctxt "Used between list items, there is a space after the comma."
-msgid ", "
-msgstr ""
-
-#: inc/template-tags.php:94
-msgctxt "Used before category names."
-msgid "Categories"
-msgstr ""
-
-#: inc/template-tags.php:102
-msgctxt "Used before tag names."
-msgid "Tags"
-msgstr ""
-
-#: inc/template-tags.php:113
-msgctxt "Used before full size attachment link."
-msgid "Full size"
-msgstr ""
-
-#. translators: %s: post title
-#: inc/template-tags.php:123
-msgid "Leave a comment on %s"
-msgstr ""
-
-#: search.php:18
-msgid "Search Results for: %s"
-msgstr ""
-
-#: single.php:33
-msgid "Next"
-msgstr ""
-
-#: single.php:34
-msgid "Next post:"
-msgstr ""
-
-#: single.php:36
-msgid "Previous"
-msgstr ""
-
-#: single.php:37
-msgid "Previous post:"
-msgstr ""
-
-#. Theme Name of the plugin/theme
-msgid "Twenty Fifteen"
-msgstr ""
-
-#. Theme URI of the plugin/theme
-msgid "https://wordpress.org/themes/twentyfifteen/"
-msgstr ""
-
-#. Description of the plugin/theme
-msgid ""
-"Our 2015 default theme is clean, blog-focused, and designed for clarity. "
-"Twenty Fifteen's simple, straightforward typography is readable on a wide "
-"variety of screen sizes, and suitable for multiple languages. We designed it "
-"using a mobile-first approach, meaning your content takes center-stage, "
-"regardless of whether your visitors arrive by smartphone, tablet, laptop, or "
-"desktop computer."
-msgstr ""
-
-#. Author of the plugin/theme
-msgid "the WordPress team"
-msgstr ""
diff --git a/wp-content/themes/twentyfifteen/readme.txt b/wp-content/themes/twentyfifteen/readme.txt
index 5403984..36ef940 100644
--- a/wp-content/themes/twentyfifteen/readme.txt
+++ b/wp-content/themes/twentyfifteen/readme.txt
@@ -1,11 +1,11 @@
=== Twenty Fifteen ===
Contributors: the WordPress team
Requires at least: WordPress 4.1
-Tested up to: WordPress 4.6-trunk
-Version: 1.5
+Tested up to: WordPress 4.7-trunk
+Version: 1.6
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, blue, gray, pink, purple, white, yellow, dark, light, two-columns, left-sidebar, fixed-layout, responsive-layout, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
+Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
== Description ==
Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer.
@@ -30,7 +30,7 @@ For more information about Twenty Fifteen please go to https://codex.wordpress.o
== Copyright ==
-Twenty Fifteen WordPress Theme, Copyright 2014-2015 WordPress.org & Automattic.com
+Twenty Fifteen WordPress Theme, Copyright 2014-2016 WordPress.org & Automattic.com
Twenty Fifteen is distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -49,12 +49,17 @@ HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas
Licenses: MIT/GPL2
Source: https://github.com/aFarkas/html5shiv
-Genericons icon font, Copyright 2013-2015 Automattic.com
+Genericons icon font, Copyright 2013-2016 Automattic.com
License: GNU GPL, Version 2 (or later)
Source: http://www.genericons.com
== Changelog ==
+= 1.6 =
+* Released: August 15, 2016
+
+https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_1.6
+
= 1.5 =
* Released: April 12, 2016
diff --git a/wp-content/themes/twentyfifteen/style.css b/wp-content/themes/twentyfifteen/style.css
index 6cae1e4..56e46b6 100644
--- a/wp-content/themes/twentyfifteen/style.css
+++ b/wp-content/themes/twentyfifteen/style.css
@@ -4,10 +4,10 @@ Theme URI: https://wordpress.org/themes/twentyfifteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer.
-Version: 1.5
+Version: 1.6
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, blue, gray, pink, purple, white, yellow, dark, light, two-columns, left-sidebar, fixed-layout, responsive-layout, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
+Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
Text Domain: twentyfifteen
This theme, like WordPress, is licensed under the GPL.
diff --git a/wp-content/themes/twentyfourteen/functions.php b/wp-content/themes/twentyfourteen/functions.php
index 9b7cf0b..f85ef1c 100644
--- a/wp-content/themes/twentyfourteen/functions.php
+++ b/wp-content/themes/twentyfourteen/functions.php
@@ -60,12 +60,12 @@ function twentyfourteen_setup() {
/*
* Make Twenty Fourteen available for translation.
*
- * Translations can be added to the /languages/ directory.
+ * Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/twentyfourteen
* If you're building a theme based on Twenty Fourteen, use a find and
* replace to change 'twentyfourteen' to the name of your theme in all
* template files.
*/
- load_theme_textdomain( 'twentyfourteen', get_template_directory() . '/languages' );
+ load_theme_textdomain( 'twentyfourteen' );
// This theme styles the visual editor to resemble the theme style.
add_editor_style( array( 'css/editor-style.css', twentyfourteen_font_url(), 'genericons/genericons.css' ) );
@@ -319,9 +319,9 @@ function twentyfourteen_the_attached_image() {
// If there is more than 1 attachment in a gallery...
if ( count( $attachment_ids ) > 1 ) {
- foreach ( $attachment_ids as $attachment_id ) {
+ foreach ( $attachment_ids as $idx => $attachment_id ) {
if ( $attachment_id == $post->ID ) {
- $next_id = current( $attachment_ids );
+ $next_id = $attachment_ids[ ( $idx + 1 ) % count( $attachment_ids ) ];
break;
}
}
diff --git a/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot b/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot
deleted file mode 100644
index d766ef4..0000000
--- a/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot
+++ /dev/null
@@ -1,478 +0,0 @@
-# Copyright (C) 2016 the WordPress team
-# This file is distributed under the GNU General Public License v2 or later.
-msgid ""
-msgstr ""
-"Project-Id-Version: Twenty Fourteen 1.7\n"
-"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentyfourteen\n"
-"POT-Creation-Date: 2016-04-05 09:48:39+00:00\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-
-#: 404.php:17
-msgid "Not Found"
-msgstr ""
-
-#: 404.php:21
-msgid "It looks like nothing was found at this location. Maybe try a search?"
-msgstr ""
-
-#: archive.php:31
-msgid "Daily Archives: %s"
-msgstr ""
-
-#: archive.php:34
-msgid "Monthly Archives: %s"
-msgstr ""
-
-#: archive.php:34
-msgctxt "monthly archives date format"
-msgid "F Y"
-msgstr ""
-
-#: archive.php:37
-msgid "Yearly Archives: %s"
-msgstr ""
-
-#: archive.php:37
-msgctxt "yearly archives date format"
-msgid "Y"
-msgstr ""
-
-#: archive.php:40 taxonomy-post_format.php:51
-msgid "Archives"
-msgstr ""
-
-#: author.php:31
-msgid "All posts by %s"
-msgstr ""
-
-#: category.php:20
-msgid "Category Archives: %s"
-msgstr ""
-
-#: comments.php:27
-msgid "One thought on “%2$s”"
-msgid_plural "%1$s thoughts on “%2$s”"
-msgstr[0] ""
-msgstr[1] ""
-
-#: comments.php:34 comments.php:52
-msgid "Comment navigation"
-msgstr ""
-
-#: comments.php:35 comments.php:53
-msgid "← Older Comments"
-msgstr ""
-
-#: comments.php:36 comments.php:54
-msgid "Newer Comments →"
-msgstr ""
-
-#: comments.php:59
-msgid "Comments are closed."
-msgstr ""
-
-#: content-aside.php:17 content-audio.php:17 content-featured-post.php:28
-#: content-gallery.php:17 content-image.php:17 content-link.php:17
-#: content-quote.php:17 content-video.php:17 content.php:19
-msgctxt "Used between list items, there is a space after the comma."
-msgid ", "
-msgstr ""
-
-#: content-aside.php:37 content-audio.php:37 content-gallery.php:37
-#: content-image.php:37 content-link.php:37 content-quote.php:37
-#: content-video.php:37 content.php:38 inc/widgets.php:215
-msgid "Leave a comment"
-msgstr ""
-
-#: content-aside.php:37 content-audio.php:37 content-gallery.php:37
-#: content-image.php:37 content-link.php:37 content-quote.php:37
-#: content-video.php:37 content.php:38 inc/widgets.php:215
-msgid "1 Comment"
-msgstr ""
-
-#: content-aside.php:37 content-audio.php:37 content-gallery.php:37
-#: content-image.php:37 content-link.php:37 content-quote.php:37
-#: content-video.php:37 content.php:38 inc/widgets.php:215
-msgid "% Comments"
-msgstr ""
-
-#: content-aside.php:40 content-audio.php:40 content-gallery.php:40
-#: content-image.php:40 content-link.php:40 content-page.php:28
-#: content-quote.php:40 content-video.php:40 content.php:42 image.php:34
-#: page-templates/contributors.php:35
-msgid "Edit"
-msgstr ""
-
-#. translators: %s: Name of current post
-#: content-aside.php:48 content-audio.php:48 content-gallery.php:48
-#: content-image.php:48 content-link.php:48 content-quote.php:48
-#: content-video.php:48 content.php:56 inc/template-tags.php:222
-msgid "Continue reading %s →"
-msgstr ""
-
-#: content-aside.php:53 content-audio.php:53 content-gallery.php:53
-#: content-image.php:53 content-link.php:53 content-page.php:22
-#: content-quote.php:53 content-video.php:53 content.php:61 image.php:54
-msgid "Pages:"
-msgstr ""
-
-#: content-none.php:12
-msgid "Nothing Found"
-msgstr ""
-
-#: content-none.php:18
-msgid ""
-"Ready to publish your first post? Get started here."
-msgstr ""
-
-#: content-none.php:22
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with some "
-"different keywords."
-msgstr ""
-
-#: content-none.php:27
-msgid ""
-"It seems we can’t find what you’re looking for. Perhaps "
-"searching can help."
-msgstr ""
-
-#. #-#-#-#-# twentyfourteen.pot (Twenty Fourteen 1.7) #-#-#-#-#
-#. Author URI of the plugin/theme
-#: footer.php:21
-msgid "https://wordpress.org/"
-msgstr ""
-
-#: footer.php:21
-msgid "Proudly powered by %s"
-msgstr ""
-
-#: functions.php:83
-msgid "Top primary menu"
-msgstr ""
-
-#: functions.php:84
-msgid "Secondary menu in left sidebar"
-msgstr ""
-
-#: functions.php:174
-msgid "Primary Sidebar"
-msgstr ""
-
-#: functions.php:176
-msgid "Main sidebar that appears on the left."
-msgstr ""
-
-#: functions.php:183
-msgid "Content Sidebar"
-msgstr ""
-
-#: functions.php:185
-msgid "Additional sidebar that appears on the right."
-msgstr ""
-
-#: functions.php:192
-msgid "Footer Widget Area"
-msgstr ""
-
-#: functions.php:194
-msgid "Appears in the footer section of the site."
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Lato, translate this to 'off'. Do not translate into your own language.
-#: functions.php:216
-msgctxt "Lato font: on or off"
-msgid "on"
-msgstr ""
-
-#: functions.php:261
-msgid "Previous"
-msgstr ""
-
-#: functions.php:262
-msgid "Next"
-msgstr ""
-
-#: functions.php:379
-msgid "%d Article"
-msgid_plural "%d Articles"
-msgstr[0] ""
-msgstr[1] ""
-
-#: functions.php:498
-msgid "Page %s"
-msgstr ""
-
-#: header.php:48
-msgid "Search"
-msgstr ""
-
-#: header.php:52
-msgid "Primary Menu"
-msgstr ""
-
-#: header.php:53
-msgid "Skip to content"
-msgstr ""
-
-#: image.php:65
-msgid "Previous Image"
-msgstr ""
-
-#: image.php:66
-msgid "Next Image"
-msgstr ""
-
-#: inc/back-compat.php:37 inc/back-compat.php:47 inc/back-compat.php:60
-msgid ""
-"Twenty Fourteen requires at least WordPress version 3.6. You are running "
-"version %s. Please upgrade and try again."
-msgstr ""
-
-#: inc/customizer.php:37
-msgid "Site Title Color"
-msgstr ""
-
-#: inc/customizer.php:40
-msgid "Display Site Title & Tagline"
-msgstr ""
-
-#: inc/customizer.php:44 inc/customizer.php:45
-msgid "May only be visible on wide screens."
-msgstr ""
-
-#: inc/customizer.php:47 inc/customizer.php:48
-msgid "Background may only be visible on wide screens."
-msgstr ""
-
-#: inc/customizer.php:53 inc/featured-content.php:403
-msgid "Featured Content"
-msgstr ""
-
-#: inc/customizer.php:54 inc/featured-content.php:404
-msgid ""
-"Use a tag to feature your posts. If no posts match the "
-"tag, sticky posts will be displayed instead."
-msgstr ""
-
-#: inc/customizer.php:55 inc/customizer.php:145 inc/featured-content.php:405
-#: inc/featured-content.php:414 inc/featured-content.php:474
-msgctxt "featured content default tag slug"
-msgid "featured"
-msgstr ""
-
-#: inc/customizer.php:69
-msgid "Layout"
-msgstr ""
-
-#: inc/customizer.php:73
-msgid "Grid"
-msgstr ""
-
-#: inc/customizer.php:74
-msgid "Slider"
-msgstr ""
-
-#. #-#-#-#-# twentyfourteen.pot (Twenty Fourteen 1.7) #-#-#-#-#
-#. Theme Name of the plugin/theme
-#: inc/customizer.php:142
-msgid "Twenty Fourteen"
-msgstr ""
-
-#: inc/customizer.php:145
-msgid ""
-"The home page features your choice of up to 6 posts prominently displayed in "
-"a grid or slider, controlled by a tag; you can change "
-"the tag and layout in Appearance → Customize. If "
-"no posts match the tag, sticky posts will be displayed "
-"instead."
-msgstr ""
-
-#: inc/customizer.php:146
-msgid ""
-"Enhance your site design by using Featured Images for "
-"posts you’d like to stand out (also known as post thumbnails). This "
-"allows you to associate an image with your post without inserting it. Twenty "
-"Fourteen uses featured images for posts and pages—above the "
-"title—and in the Featured Content area on the home page."
-msgstr ""
-
-#: inc/customizer.php:147
-msgid ""
-"For an in-depth tutorial, and more tips and tricks, visit the Twenty Fourteen documentation."
-msgstr ""
-
-#: inc/featured-content.php:426
-msgid "Tag Name"
-msgstr ""
-
-#: inc/featured-content.php:431
-msgid "Don’t display tag on front end."
-msgstr ""
-
-#: inc/template-tags.php:50
-msgid "← Previous"
-msgstr ""
-
-#: inc/template-tags.php:51
-msgid "Next →"
-msgstr ""
-
-#: inc/template-tags.php:58
-msgid "Posts navigation"
-msgstr ""
-
-#: inc/template-tags.php:85
-msgid "Post navigation"
-msgstr ""
-
-#: inc/template-tags.php:89
-msgid "Published In%title"
-msgstr ""
-
-#: inc/template-tags.php:91
-msgid "Previous Post%title"
-msgstr ""
-
-#: inc/template-tags.php:92
-msgid "Next Post%title"
-msgstr ""
-
-#: inc/template-tags.php:109
-msgid "Sticky"
-msgstr ""
-
-#: inc/widgets.php:34
-msgid "Twenty Fourteen Ephemera"
-msgstr ""
-
-#: inc/widgets.php:36
-msgid ""
-"Use this widget to list your recent Aside, Quote, Video, Audio, Image, "
-"Gallery, and Link posts."
-msgstr ""
-
-#: inc/widgets.php:75 taxonomy-post_format.php:33
-msgid "Images"
-msgstr ""
-
-#: inc/widgets.php:76
-msgid "More images"
-msgstr ""
-
-#: inc/widgets.php:79 taxonomy-post_format.php:36
-msgid "Videos"
-msgstr ""
-
-#: inc/widgets.php:80
-msgid "More videos"
-msgstr ""
-
-#: inc/widgets.php:83 taxonomy-post_format.php:39
-msgid "Audio"
-msgstr ""
-
-#: inc/widgets.php:84
-msgid "More audio"
-msgstr ""
-
-#: inc/widgets.php:87 taxonomy-post_format.php:42
-msgid "Quotes"
-msgstr ""
-
-#: inc/widgets.php:88
-msgid "More quotes"
-msgstr ""
-
-#: inc/widgets.php:91 taxonomy-post_format.php:45
-msgid "Links"
-msgstr ""
-
-#: inc/widgets.php:92
-msgid "More links"
-msgstr ""
-
-#: inc/widgets.php:95 taxonomy-post_format.php:48
-msgid "Galleries"
-msgstr ""
-
-#: inc/widgets.php:96
-msgid "More galleries"
-msgstr ""
-
-#: inc/widgets.php:100 taxonomy-post_format.php:30
-msgid "Asides"
-msgstr ""
-
-#: inc/widgets.php:101
-msgid "More asides"
-msgstr ""
-
-#: inc/widgets.php:148 inc/widgets.php:193
-msgid "Continue reading →"
-msgstr ""
-
-#: inc/widgets.php:183
-msgid "This gallery contains %2$s photo."
-msgid_plural ""
-"This gallery contains %2$s photos."
-msgstr[0] ""
-msgstr[1] ""
-
-#. translators: used with More archives link
-#: inc/widgets.php:227
-msgid "%s →"
-msgstr ""
-
-#: inc/widgets.php:276
-msgid "Title:"
-msgstr ""
-
-#: inc/widgets.php:279
-msgid "Number of posts to show:"
-msgstr ""
-
-#: inc/widgets.php:282
-msgid "Post format to show:"
-msgstr ""
-
-#: search.php:18
-msgid "Search Results for: %s"
-msgstr ""
-
-#: tag.php:22
-msgid "Tag Archives: %s"
-msgstr ""
-
-#. Theme URI of the plugin/theme
-msgid "https://wordpress.org/themes/twentyfourteen/"
-msgstr ""
-
-#. Description of the plugin/theme
-msgid ""
-"In 2014, our default theme lets you create a responsive magazine website "
-"with a sleek, modern design. Feature your favorite homepage content in "
-"either a grid or a slider. Use the three widget areas to customize your "
-"website, and change your content's layout with a full-width page template "
-"and a contributor page to show off your authors. Creating a magazine website "
-"with WordPress has never been easier."
-msgstr ""
-
-#. Author of the plugin/theme
-msgid "the WordPress team"
-msgstr ""
-
-#. Template Name of the plugin/theme
-msgid "Contributor Page"
-msgstr ""
-
-#. Template Name of the plugin/theme
-msgid "Full Width Page"
-msgstr ""
diff --git a/wp-content/themes/twentyfourteen/readme.txt b/wp-content/themes/twentyfourteen/readme.txt
index 5c35b83..0080a1e 100644
--- a/wp-content/themes/twentyfourteen/readme.txt
+++ b/wp-content/themes/twentyfourteen/readme.txt
@@ -1,11 +1,11 @@
=== Twenty Fourteen ===
Contributors: the WordPress team
Requires at least: WordPress 3.6
-Tested up to: WordPress 4.6-trunk
-Stable tag: 1.7
+Tested up to: WordPress 4.7-trunk
+Stable tag: 1.8
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, green, white, light, dark, two-columns, three-columns, left-sidebar, right-sidebar, fixed-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
+Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
== Description ==
In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.
@@ -22,7 +22,7 @@ For more information about Twenty Fourteen please go to https://codex.wordpress.
== Copyright ==
-Twenty Fourteen WordPress Theme, Copyright 2013-2015 WordPress.org & Automattic.com
+Twenty Fourteen WordPress Theme, Copyright 2013-2016 WordPress.org & Automattic.com
Twenty Fourteen is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -44,12 +44,17 @@ HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas
Licenses: MIT/GPL2
Source: https://github.com/aFarkas/html5shiv
-Genericons icon font, Copyright 2013-2015 Automattic.com
+Genericons icon font, Copyright 2013-2016 Automattic.com
License: GNU GPL, Version 2 (or later)
Source: http://www.genericons.com
== Changelog ==
+= 1.8 =
+* Released: August 15, 2016
+
+https://codex.wordpress.org/Twenty_Fourteen_Theme_Changelog#Version_1.8
+
= 1.7 =
* Released: April 12, 2016
diff --git a/wp-content/themes/twentyfourteen/style.css b/wp-content/themes/twentyfourteen/style.css
index 0bdc66d..4221371 100644
--- a/wp-content/themes/twentyfourteen/style.css
+++ b/wp-content/themes/twentyfourteen/style.css
@@ -4,10 +4,10 @@ Theme URI: https://wordpress.org/themes/twentyfourteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.
-Version: 1.7
+Version: 1.8
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, green, white, light, dark, two-columns, three-columns, left-sidebar, right-sidebar, fixed-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
+Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
Text Domain: twentyfourteen
This theme, like WordPress, is licensed under the GPL.
diff --git a/wp-content/themes/twentythirteen/functions.php b/wp-content/themes/twentythirteen/functions.php
index e1f27ad..ae1bd9e 100644
--- a/wp-content/themes/twentythirteen/functions.php
+++ b/wp-content/themes/twentythirteen/functions.php
@@ -61,12 +61,12 @@ function twentythirteen_setup() {
/*
* Makes Twenty Thirteen available for translation.
*
- * Translations can be added to the /languages/ directory.
+ * Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/twentythirteen
* If you're building a theme based on Twenty Thirteen, use a find and
* replace to change 'twentythirteen' to the name of your theme in all
* template files.
*/
- load_theme_textdomain( 'twentythirteen', get_template_directory() . '/languages' );
+ load_theme_textdomain( 'twentythirteen' );
/*
* This theme styles the visual editor to resemble the theme style,
@@ -173,7 +173,7 @@ function twentythirteen_scripts_styles() {
wp_enqueue_script( 'jquery-masonry' );
// Loads JavaScript file with functionality specific to Twenty Thirteen.
- wp_enqueue_script( 'twentythirteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20150330', true );
+ wp_enqueue_script( 'twentythirteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20160717', true );
// Add Source Sans Pro and Bitter fonts, used in the main stylesheet.
wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null );
@@ -421,9 +421,9 @@ function twentythirteen_the_attached_image() {
// If there is more than 1 attachment in a gallery...
if ( count( $attachment_ids ) > 1 ) {
- foreach ( $attachment_ids as $attachment_id ) {
+ foreach ( $attachment_ids as $idx => $attachment_id ) {
if ( $attachment_id == $post->ID ) {
- $next_id = current( $attachment_ids );
+ $next_id = $attachment_ids[ ( $idx + 1 ) % count( $attachment_ids ) ];
break;
}
}
diff --git a/wp-content/themes/twentythirteen/js/functions.js b/wp-content/themes/twentythirteen/js/functions.js
index e0d759b..88e8d0b 100644
--- a/wp-content/themes/twentythirteen/js/functions.js
+++ b/wp-content/themes/twentythirteen/js/functions.js
@@ -119,9 +119,13 @@
/**
* Arranges footer widgets vertically.
*/
- if ( $.isFunction( $.fn.masonry ) ) {
- var columnWidth = body.is( '.sidebar' ) ? 228 : 245,
- widgetArea = $( '#secondary .widget-area' );
+ $( function() {
+ var columnWidth, widgetArea;
+ if ( ! $.isFunction( $.fn.masonry ) ) {
+ return;
+ }
+ columnWidth = body.is( '.sidebar' ) ? 228 : 245;
+ widgetArea = $( '#secondary .widget-area' );
widgetArea.masonry( {
itemSelector: '.widget',
@@ -157,5 +161,5 @@
}
} );
}
- }
+ } );
} )( jQuery );
\ No newline at end of file
diff --git a/wp-content/themes/twentythirteen/languages/twentythirteen.pot b/wp-content/themes/twentythirteen/languages/twentythirteen.pot
deleted file mode 100644
index 068c37a..0000000
--- a/wp-content/themes/twentythirteen/languages/twentythirteen.pot
+++ /dev/null
@@ -1,330 +0,0 @@
-# Copyright (C) 2016 the WordPress team
-# This file is distributed under the GNU General Public License v2 or later.
-msgid ""
-msgstr ""
-"Project-Id-Version: Twenty Thirteen 1.9\n"
-"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentythirteen\n"
-"POT-Creation-Date: 2016-04-05 09:48:39+00:00\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-
-#: 404.php:16
-msgid "Not Found"
-msgstr ""
-
-#: 404.php:21
-msgid "This is somewhat embarrassing, isn’t it?"
-msgstr ""
-
-#: 404.php:22
-msgid "It looks like nothing was found at this location. Maybe try a search?"
-msgstr ""
-
-#: archive.php:29
-msgid "Daily Archives: %s"
-msgstr ""
-
-#: archive.php:31
-msgid "Monthly Archives: %s"
-msgstr ""
-
-#: archive.php:31
-msgctxt "monthly archives date format"
-msgid "F Y"
-msgstr ""
-
-#: archive.php:33
-msgid "Yearly Archives: %s"
-msgstr ""
-
-#: archive.php:33
-msgctxt "yearly archives date format"
-msgid "Y"
-msgstr ""
-
-#: archive.php:35
-msgid "Archives"
-msgstr ""
-
-#: author-bio.php:26
-msgid "About %s"
-msgstr ""
-
-#: author-bio.php:30
-msgid "View all posts by %s →"
-msgstr ""
-
-#: author.php:31
-msgid "All posts by %s"
-msgstr ""
-
-#: category.php:19
-msgid "Category Archives: %s"
-msgstr ""
-
-#: comments.php:25
-msgctxt "comments title"
-msgid "One thought on “%2$s”"
-msgid_plural "%1$s thoughts on “%2$s”"
-msgstr[0] ""
-msgstr[1] ""
-
-#: comments.php:45
-msgid "Comment navigation"
-msgstr ""
-
-#: comments.php:46
-msgid "← Older Comments"
-msgstr ""
-
-#: comments.php:47
-msgid "Newer Comments →"
-msgstr ""
-
-#: comments.php:52
-msgid "Comments are closed."
-msgstr ""
-
-#. translators: %s: Name of current post
-#: content-aside.php:16 content-audio.php:27 content-chat.php:26
-#: content-gallery.php:27 content-image.php:26 content-link.php:27
-#: content-quote.php:16 content-status.php:16 content-video.php:26
-#: content.php:44 functions.php:481
-msgid "Continue reading %s →"
-msgstr ""
-
-#: content-aside.php:20 content-audio.php:31 content-chat.php:30
-#: content-gallery.php:31 content-image.php:30 content-link.php:31
-#: content-quote.php:20 content-status.php:20 content-video.php:30
-#: content.php:48 image.php:76 page.php:35
-msgid "Pages:"
-msgstr ""
-
-#: content-aside.php:27 content-aside.php:35 content-audio.php:38
-#: content-chat.php:36 content-gallery.php:46 content-image.php:42
-#: content-link.php:19 content-quote.php:32 content-status.php:26
-#: content-video.php:42 content.php:31 image.php:50 page.php:39
-msgid "Edit"
-msgstr ""
-
-#: content-gallery.php:43 content-image.php:39 content-quote.php:29
-#: content-video.php:39 content.php:56
-msgid "Leave a comment"
-msgstr ""
-
-#: content-gallery.php:43 content-image.php:39 content-quote.php:29
-#: content-video.php:39 content.php:56
-msgid "One comment so far"
-msgstr ""
-
-#: content-gallery.php:43 content-image.php:39 content-quote.php:29
-#: content-video.php:39 content.php:56
-msgid "View all % comments"
-msgstr ""
-
-#: content-none.php:12
-msgid "Nothing Found"
-msgstr ""
-
-#: content-none.php:18
-msgid ""
-"Ready to publish your first post? Get started here."
-msgstr ""
-
-#: content-none.php:22
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with "
-"different keywords."
-msgstr ""
-
-#: content-none.php:27
-msgid ""
-"It seems we can’t find what you’re looking for. Perhaps "
-"searching can help."
-msgstr ""
-
-#. #-#-#-#-# twentythirteen.pot (Twenty Thirteen 1.9) #-#-#-#-#
-#. Author URI of the plugin/theme
-#: footer.php:19
-msgid "https://wordpress.org/"
-msgstr ""
-
-#: footer.php:19
-msgid "Proudly powered by %s"
-msgstr ""
-
-#: functions.php:97
-msgid "Navigation Menu"
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Source Sans Pro, translate this to 'off'. Do not translate into your own
-#. language.
-#: functions.php:131
-msgctxt "Source Sans Pro font: on or off"
-msgid "on"
-msgstr ""
-
-#. Translators: If there are characters in your language that are not supported
-#. by Bitter, translate this to 'off'. Do not translate into your own language.
-#: functions.php:137
-msgctxt "Bitter font: on or off"
-msgid "on"
-msgstr ""
-
-#: functions.php:221
-msgid "Page %s"
-msgstr ""
-
-#: functions.php:234
-msgid "Main Widget Area"
-msgstr ""
-
-#: functions.php:236
-msgid "Appears in the footer section of the site."
-msgstr ""
-
-#: functions.php:244
-msgid "Secondary Widget Area"
-msgstr ""
-
-#: functions.php:246
-msgid "Appears on posts and pages in the sidebar."
-msgstr ""
-
-#: functions.php:269
-msgid "Posts navigation"
-msgstr ""
-
-#: functions.php:273
-msgid "← Older posts"
-msgstr ""
-
-#: functions.php:277
-msgid "Newer posts →"
-msgstr ""
-
-#: functions.php:303
-msgid "Post navigation"
-msgstr ""
-
-#: functions.php:306
-msgctxt "Previous post link"
-msgid "← %title"
-msgstr ""
-
-#: functions.php:307
-msgctxt "Next post link"
-msgid "%title →"
-msgstr ""
-
-#: functions.php:325
-msgid "Sticky"
-msgstr ""
-
-#. Translators: used between list items, there is a space after the comma.
-#: functions.php:331 functions.php:337
-msgid ", "
-msgstr ""
-
-#: functions.php:346
-msgid "View all posts by %s"
-msgstr ""
-
-#: functions.php:366
-msgctxt "1: post format name. 2: date"
-msgid "%1$s on %2$s"
-msgstr ""
-
-#: functions.php:372
-msgid "Permalink to %s"
-msgstr ""
-
-#: header.php:43
-msgid "Menu"
-msgstr ""
-
-#: header.php:44
-msgid "Skip to content"
-msgstr ""
-
-#: image.php:28
-msgid ""
-"Published on in %5$s"
-msgstr ""
-
-#: image.php:44
-msgid "Link to full-size image"
-msgstr ""
-
-#: image.php:45
-msgid "Full resolution"
-msgstr ""
-
-#: image.php:57
-msgid "← Previous"
-msgstr ""
-
-#: image.php:58
-msgid "Next →"
-msgstr ""
-
-#: inc/back-compat.php:37 inc/back-compat.php:47 inc/back-compat.php:60
-msgid ""
-"Twenty Thirteen requires at least WordPress version 3.6. You are running "
-"version %s. Please upgrade and try again."
-msgstr ""
-
-#: inc/custom-header.php:49
-msgctxt "header image description"
-msgid "Circle"
-msgstr ""
-
-#: inc/custom-header.php:54
-msgctxt "header image description"
-msgid "Diamond"
-msgstr ""
-
-#: inc/custom-header.php:59
-msgctxt "header image description"
-msgid "Star"
-msgstr ""
-
-#: search.php:18
-msgid "Search Results for: %s"
-msgstr ""
-
-#: tag.php:21
-msgid "Tag Archives: %s"
-msgstr ""
-
-#: taxonomy-post_format.php:23
-msgid "%s Archives"
-msgstr ""
-
-#. Theme Name of the plugin/theme
-msgid "Twenty Thirteen"
-msgstr ""
-
-#. Theme URI of the plugin/theme
-msgid "https://wordpress.org/themes/twentythirteen/"
-msgstr ""
-
-#. Description of the plugin/theme
-msgid ""
-"The 2013 theme for WordPress takes us back to the blog, featuring a full "
-"range of post formats, each displayed beautifully in their own unique way. "
-"Design details abound, starting with a vibrant color scheme and matching "
-"header images, beautiful typography and icons, and a flexible layout that "
-"looks great on any device, big or small."
-msgstr ""
-
-#. Author of the plugin/theme
-msgid "the WordPress team"
-msgstr ""
diff --git a/wp-content/themes/twentythirteen/readme.txt b/wp-content/themes/twentythirteen/readme.txt
index 0fd7c9a..09ad527 100644
--- a/wp-content/themes/twentythirteen/readme.txt
+++ b/wp-content/themes/twentythirteen/readme.txt
@@ -1,11 +1,11 @@
=== Twenty Thirteen ===
Contributors: the WordPress team
Requires at least: WordPress 3.6
-Tested up to: WordPress 4.6-trunk
-Stable tag: 1.9
+Tested up to: WordPress 4.7-trunk
+Stable tag: 2.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, fluid-layout, responsive-layout, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
+Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
== Description ==
The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
@@ -22,7 +22,7 @@ For more information about Twenty Thirteen please go to https://codex.wordpress.
== Copyright ==
-Twenty Thirteen WordPress Theme, Copyright 2013-2015 WordPress.org & Automattic.com
+Twenty Thirteen WordPress Theme, Copyright 2013-2016 WordPress.org & Automattic.com
Twenty Thirteen is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -41,12 +41,17 @@ HTML5 Shiv v3.7.0, Copyright 2014 Alexander Farkas
Licenses: MIT/GPL2
Source: https://github.com/aFarkas/html5shiv
-Genericons icon font, Copyright 2013-2015 Automattic.com
+Genericons icon font, Copyright 2013-2016 Automattic.com
License: GNU GPL, Version 2 (or later)
Source: http://www.genericons.com
== Changelog ==
+= 2.0 =
+* Released: August 15, 2016
+
+https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.0
+
= 1.9 =
* Released: April 12, 2016
diff --git a/wp-content/themes/twentythirteen/style.css b/wp-content/themes/twentythirteen/style.css
index b947dc9..847a864 100644
--- a/wp-content/themes/twentythirteen/style.css
+++ b/wp-content/themes/twentythirteen/style.css
@@ -4,10 +4,10 @@ Theme URI: https://wordpress.org/themes/twentythirteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
-Version: 1.9
+Version: 2.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, fluid-layout, responsive-layout, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
+Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
Text Domain: twentythirteen
This theme, like WordPress, is licensed under the GPL.
diff --git a/wp-content/themes/twentytwelve/functions.php b/wp-content/themes/twentytwelve/functions.php
index 8ec0755..56cd8e5 100644
--- a/wp-content/themes/twentytwelve/functions.php
+++ b/wp-content/themes/twentytwelve/functions.php
@@ -45,11 +45,11 @@ function twentytwelve_setup() {
/*
* Makes Twenty Twelve available for translation.
*
- * Translations can be added to the /languages/ directory.
+ * Translations can be filed at WordPress.org. See: https://translate.wordpress.org/projects/wp-themes/twentytwelve
* If you're building a theme based on Twenty Twelve, use a find and replace
* to change 'twentytwelve' to the name of your theme in all the template files.
*/
- load_theme_textdomain( 'twentytwelve', get_template_directory() . '/languages' );
+ load_theme_textdomain( 'twentytwelve' );
// This theme styles the visual editor with editor-style.css to match the theme style.
add_editor_style();
diff --git a/wp-content/themes/twentytwelve/languages/twentytwelve.pot b/wp-content/themes/twentytwelve/languages/twentytwelve.pot
deleted file mode 100644
index 6be731a..0000000
--- a/wp-content/themes/twentytwelve/languages/twentytwelve.pot
+++ /dev/null
@@ -1,352 +0,0 @@
-# Copyright (C) 2016 the WordPress team
-# This file is distributed under the GNU General Public License v2 or later.
-msgid ""
-msgstr ""
-"Project-Id-Version: Twenty Twelve 2.0\n"
-"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentytwelve\n"
-"POT-Creation-Date: 2016-04-05 09:48:39+00:00\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-
-#: 404.php:17
-msgid "This is somewhat embarrassing, isn’t it?"
-msgstr ""
-
-#: 404.php:21
-msgid ""
-"It seems we can’t find what you’re looking for. Perhaps "
-"searching can help."
-msgstr ""
-
-#: archive.php:29
-msgid "Daily Archives: %s"
-msgstr ""
-
-#: archive.php:31
-msgid "Monthly Archives: %s"
-msgstr ""
-
-#: archive.php:31
-msgctxt "monthly archives date format"
-msgid "F Y"
-msgstr ""
-
-#: archive.php:33
-msgid "Yearly Archives: %s"
-msgstr ""
-
-#: archive.php:33
-msgctxt "yearly archives date format"
-msgid "Y"
-msgstr ""
-
-#: archive.php:35
-msgid "Archives"
-msgstr ""
-
-#: author.php:32
-msgid "Author Archives: %s"
-msgstr ""
-
-#: author.php:63 content.php:62
-msgid "About %s"
-msgstr ""
-
-#: category.php:21
-msgid "Category Archives: %s"
-msgstr ""
-
-#: comments.php:31
-msgid "One thought on “%2$s”"
-msgid_plural "%1$s thoughts on “%2$s”"
-msgstr[0] ""
-msgstr[1] ""
-
-#: comments.php:42
-msgid "Comment navigation"
-msgstr ""
-
-#: comments.php:43
-msgid "← Older Comments"
-msgstr ""
-
-#: comments.php:44
-msgid "Newer Comments →"
-msgstr ""
-
-#: comments.php:53
-msgid "Comments are closed."
-msgstr ""
-
-#: content-aside.php:15 content-image.php:13 content-link.php:14
-#: content-quote.php:13 content-status.php:31 content.php:44
-msgid "Continue reading →"
-msgstr ""
-
-#: content-aside.php:20 content-link.php:18 content-quote.php:17
-#: content-status.php:15
-msgid "Permalink to %s"
-msgstr ""
-
-#: content-aside.php:23 content-image.php:23 content-link.php:21
-#: content-quote.php:20 content-status.php:37 content.php:33
-msgid "Leave a reply"
-msgstr ""
-
-#: content-aside.php:23 content-image.php:23 content-link.php:21
-#: content-quote.php:20 content-status.php:37 content.php:33
-msgid "1 Reply"
-msgstr ""
-
-#: content-aside.php:23 content-image.php:23 content-link.php:21
-#: content-quote.php:20 content-status.php:37 content.php:33
-msgid "% Replies"
-msgstr ""
-
-#: content-aside.php:26 content-image.php:26 content-link.php:24
-#: content-page.php:24 content-quote.php:23 content-status.php:40
-#: content.php:51 functions.php:345 image.php:37
-msgid "Edit"
-msgstr ""
-
-#: content-link.php:12
-msgid "Link"
-msgstr ""
-
-#: content-none.php:13 index.php:49 search.php:34
-msgid "Nothing Found"
-msgstr ""
-
-#: content-none.php:17 index.php:53
-msgid ""
-"Apologies, but no results were found. Perhaps searching will help find a "
-"related post."
-msgstr ""
-
-#: content-page.php:21 content.php:45 image.php:102
-msgid "Pages:"
-msgstr ""
-
-#: content.php:16
-msgid "Featured post"
-msgstr ""
-
-#: content.php:66
-msgid "View all posts by %s →"
-msgstr ""
-
-#. #-#-#-#-# twentytwelve.pot (Twenty Twelve 2.0) #-#-#-#-#
-#. Author URI of the plugin/theme
-#: footer.php:16
-msgid "https://wordpress.org/"
-msgstr ""
-
-#: footer.php:16
-msgid "Semantic Personal Publishing Platform"
-msgstr ""
-
-#: footer.php:16
-msgid "Proudly powered by %s"
-msgstr ""
-
-#: functions.php:64
-msgid "Primary Menu"
-msgstr ""
-
-#. translators: If there are characters in your language that are not supported
-#. by Open Sans, translate this to 'off'. Do not translate into your own
-#. language.
-#: functions.php:104
-msgctxt "Open Sans font: on or off"
-msgid "on"
-msgstr ""
-
-#. translators: To add an additional Open Sans character subset specific to
-#. your language, translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not
-#. translate into your own language.
-#: functions.php:110
-msgctxt "Open Sans font: add new subset (greek, cyrillic, vietnamese)"
-msgid "no-subset"
-msgstr ""
-
-#: functions.php:215
-msgid "Page %s"
-msgstr ""
-
-#: functions.php:244
-msgid "Main Sidebar"
-msgstr ""
-
-#: functions.php:246
-msgid ""
-"Appears on posts and pages except the optional Front Page template, which "
-"has its own widgets"
-msgstr ""
-
-#: functions.php:254
-msgid "First Front Page Widget Area"
-msgstr ""
-
-#: functions.php:256 functions.php:266
-msgid ""
-"Appears when using the optional Front Page template with a page set as "
-"Static Front Page"
-msgstr ""
-
-#: functions.php:264
-msgid "Second Front Page Widget Area"
-msgstr ""
-
-#: functions.php:286 single.php:20
-msgid "Post navigation"
-msgstr ""
-
-#: functions.php:287
-msgid "← Older posts"
-msgstr ""
-
-#: functions.php:288
-msgid "Newer posts →"
-msgstr ""
-
-#: functions.php:313
-msgid "Pingback:"
-msgstr ""
-
-#: functions.php:313
-msgid "(Edit)"
-msgstr ""
-
-#: functions.php:328
-msgid "Post author"
-msgstr ""
-
-#. translators: 1: date, 2: time
-#: functions.php:334
-msgid "%1$s at %2$s"
-msgstr ""
-
-#: functions.php:340
-msgid "Your comment is awaiting moderation."
-msgstr ""
-
-#: functions.php:349
-msgid "Reply"
-msgstr ""
-
-#. Translators: used between list items, there is a space after the comma.
-#: functions.php:370 functions.php:373
-msgid ", "
-msgstr ""
-
-#: functions.php:384
-msgid "View all posts by %s"
-msgstr ""
-
-#. Translators: 1 is category, 2 is tag, 3 is the date and 4 is the author's
-#. name.
-#: functions.php:390
-msgid ""
-"This entry was posted in %1$s and tagged %2$s on %3$s by %4$s."
-msgstr ""
-
-#: functions.php:392
-msgid ""
-"This entry was posted in %1$s on %3$s by %4$s"
-"span>."
-msgstr ""
-
-#: functions.php:394
-msgid "This entry was posted on %3$s by %4$s."
-msgstr ""
-
-#: header.php:43
-msgid "Menu"
-msgstr ""
-
-#: header.php:44
-msgid "Skip to content"
-msgstr ""
-
-#: image.php:26
-msgid ""
-"Published "
-"span> at %4$s × "
-"%5$s in %8$s"
-"a>."
-msgstr ""
-
-#: image.php:41
-msgid "← Previous"
-msgstr ""
-
-#: image.php:42
-msgid "Next →"
-msgstr ""
-
-#: index.php:38
-msgid "No posts to display"
-msgstr ""
-
-#: index.php:42
-msgid "Ready to publish your first post? Get started here."
-msgstr ""
-
-#: search.php:18
-msgid "Search Results for: %s"
-msgstr ""
-
-#: search.php:38
-msgid ""
-"Sorry, but nothing matched your search criteria. Please try again with some "
-"different keywords."
-msgstr ""
-
-#: single.php:21
-msgctxt "Previous post link"
-msgid "←"
-msgstr ""
-
-#: single.php:22
-msgctxt "Next post link"
-msgid "→"
-msgstr ""
-
-#: tag.php:21
-msgid "Tag Archives: %s"
-msgstr ""
-
-#. Theme Name of the plugin/theme
-msgid "Twenty Twelve"
-msgstr ""
-
-#. Theme URI of the plugin/theme
-msgid "https://wordpress.org/themes/twentytwelve/"
-msgstr ""
-
-#. Description of the plugin/theme
-msgid ""
-"The 2012 theme for WordPress is a fully responsive theme that looks great on "
-"any device. Features include a front page template with its own widgets, an "
-"optional display font, styling for post formats on both index and single "
-"views, and an optional no-sidebar page template. Make it yours with a custom "
-"menu, header image, and background."
-msgstr ""
-
-#. Author of the plugin/theme
-msgid "the WordPress team"
-msgstr ""
-
-#. Template Name of the plugin/theme
-msgid "Front Page Template"
-msgstr ""
-
-#. Template Name of the plugin/theme
-msgid "Full-width Page Template, No Sidebar"
-msgstr ""
diff --git a/wp-content/themes/twentytwelve/readme.txt b/wp-content/themes/twentytwelve/readme.txt
index 991a869..8220e51 100644
--- a/wp-content/themes/twentytwelve/readme.txt
+++ b/wp-content/themes/twentytwelve/readme.txt
@@ -1,11 +1,11 @@
=== Twenty Twelve ===
Contributors: the WordPress team
Requires at least: WordPress 3.5
-Tested up to: WordPress 4.6-trunk
-Stable tag: 2.0
+Tested up to: WordPress 4.7-trunk
+Stable tag: 2.1
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: light, gray, white, one-column, two-columns, right-sidebar, fluid-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
+Tags: blog, one-column, two-columns, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
== Description ==
The 2012 theme for WordPress is a fully responsive theme that looks great on any device. Features include a front page template with its own widgets, an optional display font, styling for post formats on both index and single views, and an optional no-sidebar page template. Make it yours with a custom menu, header image, and background.
@@ -22,7 +22,7 @@ For more information about Twenty Twelve please go to https://codex.wordpress.or
== Copyright ==
-Twenty Twelve WordPress Theme, Copyright 2012-2015 WordPress.org & Automattic.com
+Twenty Twelve WordPress Theme, Copyright 2012-2016 WordPress.org & Automattic.com
Twenty Twelve is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -43,6 +43,11 @@ Source: https://github.com/aFarkas/html5shiv
== Changelog ==
+= 2.1 =
+* Released: August 15, 2016
+
+https://codex.wordpress.org/Twenty_Twelve_Theme_Changelog#Version_2.1
+
= 2.0 =
* Released: April 12, 2016
diff --git a/wp-content/themes/twentytwelve/style.css b/wp-content/themes/twentytwelve/style.css
index bacabf2..b809f18 100644
--- a/wp-content/themes/twentytwelve/style.css
+++ b/wp-content/themes/twentytwelve/style.css
@@ -4,10 +4,10 @@ Theme URI: https://wordpress.org/themes/twentytwelve/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: The 2012 theme for WordPress is a fully responsive theme that looks great on any device. Features include a front page template with its own widgets, an optional display font, styling for post formats on both index and single views, and an optional no-sidebar page template. Make it yours with a custom menu, header image, and background.
-Version: 2.0
+Version: 2.1
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Tags: light, gray, white, one-column, two-columns, right-sidebar, fluid-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
+Tags: blog, one-column, two-columns, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
Text Domain: twentytwelve
This theme, like WordPress, is licensed under the GPL.
diff --git a/wp-includes/Requests/Auth.php b/wp-includes/Requests/Auth.php
new file mode 100644
index 0000000..bca4109
--- /dev/null
+++ b/wp-includes/Requests/Auth.php
@@ -0,0 +1,33 @@
+user, $this->pass) = $args;
+ }
+ }
+
+ /**
+ * Register the necessary callbacks
+ *
+ * @see curl_before_send
+ * @see fsockopen_header
+ * @param Requests_Hooks $hooks Hook system
+ */
+ public function register(Requests_Hooks &$hooks) {
+ $hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
+ $hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
+ }
+
+ /**
+ * Set cURL parameters before the data is sent
+ *
+ * @param resource $handle cURL resource
+ */
+ public function curl_before_send(&$handle) {
+ curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
+ curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
+ }
+
+ /**
+ * Add extra headers to the request before sending
+ *
+ * @param string $out HTTP header string
+ */
+ public function fsockopen_header(&$out) {
+ $out .= sprintf("Authorization: Basic %s\r\n", base64_encode($this->getAuthString()));
+ }
+
+ /**
+ * Get the authentication string (user:pass)
+ *
+ * @return string
+ */
+ public function getAuthString() {
+ return $this->user . ':' . $this->pass;
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Cookie.php b/wp-includes/Requests/Cookie.php
new file mode 100644
index 0000000..00fbbc7
--- /dev/null
+++ b/wp-includes/Requests/Cookie.php
@@ -0,0 +1,500 @@
+name = $name;
+ $this->value = $value;
+ $this->attributes = $attributes;
+ $default_flags = array(
+ 'creation' => time(),
+ 'last-access' => time(),
+ 'persistent' => false,
+ 'host-only' => true,
+ );
+ $this->flags = array_merge($default_flags, $flags);
+
+ $this->reference_time = time();
+ if ($reference_time !== null) {
+ $this->reference_time = $reference_time;
+ }
+
+ $this->normalize();
+ }
+
+ /**
+ * Check if a cookie is expired.
+ *
+ * Checks the age against $this->reference_time to determine if the cookie
+ * is expired.
+ *
+ * @return boolean True if expired, false if time is valid.
+ */
+ public function is_expired() {
+ // RFC6265, s. 4.1.2.2:
+ // If a cookie has both the Max-Age and the Expires attribute, the Max-
+ // Age attribute has precedence and controls the expiration date of the
+ // cookie.
+ if (isset($this->attributes['max-age'])) {
+ $max_age = $this->attributes['max-age'];
+ return $max_age < $this->reference_time;
+ }
+
+ if (isset($this->attributes['expires'])) {
+ $expires = $this->attributes['expires'];
+ return $expires < $this->reference_time;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if a cookie is valid for a given URI
+ *
+ * @param Requests_IRI $uri URI to check
+ * @return boolean Whether the cookie is valid for the given URI
+ */
+ public function uri_matches(Requests_IRI $uri) {
+ if (!$this->domain_matches($uri->host)) {
+ return false;
+ }
+
+ if (!$this->path_matches($uri->path)) {
+ return false;
+ }
+
+ return empty($this->attributes['secure']) || $uri->scheme === 'https';
+ }
+
+ /**
+ * Check if a cookie is valid for a given domain
+ *
+ * @param string $string Domain to check
+ * @return boolean Whether the cookie is valid for the given domain
+ */
+ public function domain_matches($string) {
+ if (!isset($this->attributes['domain'])) {
+ // Cookies created manually; cookies created by Requests will set
+ // the domain to the requested domain
+ return true;
+ }
+
+ $domain_string = $this->attributes['domain'];
+ if ($domain_string === $string) {
+ // The domain string and the string are identical.
+ return true;
+ }
+
+ // If the cookie is marked as host-only and we don't have an exact
+ // match, reject the cookie
+ if ($this->flags['host-only'] === true) {
+ return false;
+ }
+
+ if (strlen($string) <= strlen($domain_string)) {
+ // For obvious reasons, the string cannot be a suffix if the domain
+ // is shorter than the domain string
+ return false;
+ }
+
+ if (substr($string, -1 * strlen($domain_string)) !== $domain_string) {
+ // The domain string should be a suffix of the string.
+ return false;
+ }
+
+ $prefix = substr($string, 0, strlen($string) - strlen($domain_string));
+ if (substr($prefix, -1) !== '.') {
+ // The last character of the string that is not included in the
+ // domain string should be a %x2E (".") character.
+ return false;
+ }
+
+ // The string should be a host name (i.e., not an IP address).
+ return !preg_match('#^(.+\.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $string);
+ }
+
+ /**
+ * Check if a cookie is valid for a given path
+ *
+ * From the path-match check in RFC 6265 section 5.1.4
+ *
+ * @param string $request_path Path to check
+ * @return boolean Whether the cookie is valid for the given path
+ */
+ public function path_matches($request_path) {
+ if (empty($request_path)) {
+ // Normalize empty path to root
+ $request_path = '/';
+ }
+
+ if (!isset($this->attributes['path'])) {
+ // Cookies created manually; cookies created by Requests will set
+ // the path to the requested path
+ return true;
+ }
+
+ $cookie_path = $this->attributes['path'];
+
+ if ($cookie_path === $request_path) {
+ // The cookie-path and the request-path are identical.
+ return true;
+ }
+
+ if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
+ if (substr($cookie_path, -1) === '/') {
+ // The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/").
+ return true;
+ }
+
+ if (substr($request_path, strlen($cookie_path), 1) === '/') {
+ // The cookie-path is a prefix of the request-path, and the
+ // first character of the request-path that is not included in
+ // the cookie-path is a %x2F ("/") character.
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Normalize cookie and attributes
+ *
+ * @return boolean Whether the cookie was successfully normalized
+ */
+ public function normalize() {
+ foreach ($this->attributes as $key => $value) {
+ $orig_value = $value;
+ $value = $this->normalize_attribute($key, $value);
+ if ($value === null) {
+ unset($this->attributes[$key]);
+ continue;
+ }
+
+ if ($value !== $orig_value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Parse an individual cookie attribute
+ *
+ * Handles parsing individual attributes from the cookie values.
+ *
+ * @param string $name Attribute name
+ * @param string|boolean $value Attribute value (string value, or true if empty/flag)
+ * @return mixed Value if available, or null if the attribute value is invalid (and should be skipped)
+ */
+ protected function normalize_attribute($name, $value) {
+ switch (strtolower($name)) {
+ case 'expires':
+ // Expiration parsing, as per RFC 6265 section 5.2.1
+ if (is_int($value)) {
+ return $value;
+ }
+
+ $expiry_time = strtotime($value);
+ if ($expiry_time === false) {
+ return null;
+ }
+
+ return $expiry_time;
+
+ case 'max-age':
+ // Expiration parsing, as per RFC 6265 section 5.2.2
+ if (is_int($value)) {
+ return $value;
+ }
+
+ // Check that we have a valid age
+ if (!preg_match('/^-?\d+$/', $value)) {
+ return null;
+ }
+
+ $delta_seconds = (int) $value;
+ if ($delta_seconds <= 0) {
+ $expiry_time = 0;
+ }
+ else {
+ $expiry_time = $this->reference_time + $delta_seconds;
+ }
+
+ return $expiry_time;
+
+ case 'domain':
+ // Domain normalization, as per RFC 6265 section 5.2.3
+ if ($value[0] === '.') {
+ $value = substr($value, 1);
+ }
+
+ return $value;
+
+ default:
+ return $value;
+ }
+ }
+
+ /**
+ * Format a cookie for a Cookie header
+ *
+ * This is used when sending cookies to a server.
+ *
+ * @return string Cookie formatted for Cookie header
+ */
+ public function format_for_header() {
+ return sprintf('%s=%s', $this->name, $this->value);
+ }
+
+ /**
+ * Format a cookie for a Cookie header
+ *
+ * @codeCoverageIgnore
+ * @deprecated Use {@see Requests_Cookie::format_for_header}
+ * @return string
+ */
+ public function formatForHeader() {
+ return $this->format_for_header();
+ }
+
+ /**
+ * Format a cookie for a Set-Cookie header
+ *
+ * This is used when sending cookies to clients. This isn't really
+ * applicable to client-side usage, but might be handy for debugging.
+ *
+ * @return string Cookie formatted for Set-Cookie header
+ */
+ public function format_for_set_cookie() {
+ $header_value = $this->format_for_header();
+ if (!empty($this->attributes)) {
+ $parts = array();
+ foreach ($this->attributes as $key => $value) {
+ // Ignore non-associative attributes
+ if (is_numeric($key)) {
+ $parts[] = $value;
+ }
+ else {
+ $parts[] = sprintf('%s=%s', $key, $value);
+ }
+ }
+
+ $header_value .= '; ' . implode('; ', $parts);
+ }
+ return $header_value;
+ }
+
+ /**
+ * Format a cookie for a Set-Cookie header
+ *
+ * @codeCoverageIgnore
+ * @deprecated Use {@see Requests_Cookie::format_for_set_cookie}
+ * @return string
+ */
+ public function formatForSetCookie() {
+ return $this->format_for_set_cookie();
+ }
+
+ /**
+ * Get the cookie value
+ *
+ * Attributes and other data can be accessed via methods.
+ */
+ public function __toString() {
+ return $this->value;
+ }
+
+ /**
+ * Parse a cookie string into a cookie object
+ *
+ * Based on Mozilla's parsing code in Firefox and related projects, which
+ * is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
+ * specifies some of this handling, but not in a thorough manner.
+ *
+ * @param string Cookie header value (from a Set-Cookie header)
+ * @return Requests_Cookie Parsed cookie object
+ */
+ public static function parse($string, $name = '', $reference_time = null) {
+ $parts = explode(';', $string);
+ $kvparts = array_shift($parts);
+
+ if (!empty($name)) {
+ $value = $string;
+ }
+ elseif (strpos($kvparts, '=') === false) {
+ // Some sites might only have a value without the equals separator.
+ // Deviate from RFC 6265 and pretend it was actually a blank name
+ // (`=foo`)
+ //
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=169091
+ $name = '';
+ $value = $kvparts;
+ }
+ else {
+ list($name, $value) = explode('=', $kvparts, 2);
+ }
+ $name = trim($name);
+ $value = trim($value);
+
+ // Attribute key are handled case-insensitively
+ $attributes = new Requests_Utility_CaseInsensitiveDictionary();
+
+ if (!empty($parts)) {
+ foreach ($parts as $part) {
+ if (strpos($part, '=') === false) {
+ $part_key = $part;
+ $part_value = true;
+ }
+ else {
+ list($part_key, $part_value) = explode('=', $part, 2);
+ $part_value = trim($part_value);
+ }
+
+ $part_key = trim($part_key);
+ $attributes[$part_key] = $part_value;
+ }
+ }
+
+ return new Requests_Cookie($name, $value, $attributes, array(), $reference_time);
+ }
+
+ /**
+ * Parse all Set-Cookie headers from request headers
+ *
+ * @param Requests_Response_Headers $headers Headers to parse from
+ * @param Requests_IRI|null $origin URI for comparing cookie origins
+ * @param int|null $time Reference time for expiration calculation
+ * @return array
+ */
+ public static function parse_from_headers(Requests_Response_Headers $headers, Requests_IRI $origin = null, $time = null) {
+ $cookie_headers = $headers->getValues('Set-Cookie');
+ if (empty($cookie_headers)) {
+ return array();
+ }
+
+ $cookies = array();
+ foreach ($cookie_headers as $header) {
+ $parsed = self::parse($header, '', $time);
+
+ // Default domain/path attributes
+ if (empty($parsed->attributes['domain']) && !empty($origin)) {
+ $parsed->attributes['domain'] = $origin->host;
+ $parsed->flags['host-only'] = true;
+ }
+ else {
+ $parsed->flags['host-only'] = false;
+ }
+
+ $path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
+ if (!$path_is_valid && !empty($origin)) {
+ $path = $origin->path;
+
+ // Default path normalization as per RFC 6265 section 5.1.4
+ if (substr($path, 0, 1) !== '/') {
+ // If the uri-path is empty or if the first character of
+ // the uri-path is not a %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining steps.
+ $path = '/';
+ }
+ elseif (substr_count($path, '/') === 1) {
+ // If the uri-path contains no more than one %x2F ("/")
+ // character, output %x2F ("/") and skip the remaining
+ // step.
+ $path = '/';
+ }
+ else {
+ // Output the characters of the uri-path from the first
+ // character up to, but not including, the right-most
+ // %x2F ("/").
+ $path = substr($path, 0, strrpos($path, '/'));
+ }
+ $parsed->attributes['path'] = $path;
+ }
+
+ // Reject invalid cookie domains
+ if (!empty($origin) && !$parsed->domain_matches($origin->host)) {
+ continue;
+ }
+
+ $cookies[$parsed->name] = $parsed;
+ }
+
+ return $cookies;
+ }
+
+ /**
+ * Parse all Set-Cookie headers from request headers
+ *
+ * @codeCoverageIgnore
+ * @deprecated Use {@see Requests_Cookie::parse_from_headers}
+ * @return string
+ */
+ public static function parseFromHeaders(Requests_Response_Headers $headers) {
+ return self::parse_from_headers($headers);
+ }
+}
diff --git a/wp-includes/Requests/Cookie/Jar.php b/wp-includes/Requests/Cookie/Jar.php
new file mode 100644
index 0000000..69be0fb
--- /dev/null
+++ b/wp-includes/Requests/Cookie/Jar.php
@@ -0,0 +1,175 @@
+cookies = $cookies;
+ }
+
+ /**
+ * Normalise cookie data into a Requests_Cookie
+ *
+ * @param string|Requests_Cookie $cookie
+ * @return Requests_Cookie
+ */
+ public function normalize_cookie($cookie, $key = null) {
+ if ($cookie instanceof Requests_Cookie) {
+ return $cookie;
+ }
+
+ return Requests_Cookie::parse($cookie, $key);
+ }
+
+ /**
+ * Normalise cookie data into a Requests_Cookie
+ *
+ * @codeCoverageIgnore
+ * @deprecated Use {@see Requests_Cookie_Jar::normalize_cookie}
+ * @return Requests_Cookie
+ */
+ public function normalizeCookie($cookie, $key = null) {
+ return $this->normalize_cookie($cookie, $key);
+ }
+
+ /**
+ * Check if the given item exists
+ *
+ * @param string $key Item key
+ * @return boolean Does the item exist?
+ */
+ public function offsetExists($key) {
+ return isset($this->cookies[$key]);
+ }
+
+ /**
+ * Get the value for the item
+ *
+ * @param string $key Item key
+ * @return string Item value
+ */
+ public function offsetGet($key) {
+ if (!isset($this->cookies[$key])) {
+ return null;
+ }
+
+ return $this->cookies[$key];
+ }
+
+ /**
+ * Set the given item
+ *
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
+ *
+ * @param string $key Item name
+ * @param string $value Item value
+ */
+ public function offsetSet($key, $value) {
+ if ($key === null) {
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
+ }
+
+ $this->cookies[$key] = $value;
+ }
+
+ /**
+ * Unset the given header
+ *
+ * @param string $key
+ */
+ public function offsetUnset($key) {
+ unset($this->cookies[$key]);
+ }
+
+ /**
+ * Get an iterator for the data
+ *
+ * @return ArrayIterator
+ */
+ public function getIterator() {
+ return new ArrayIterator($this->cookies);
+ }
+
+ /**
+ * Register the cookie handler with the request's hooking system
+ *
+ * @param Requests_Hooker $hooks Hooking system
+ */
+ public function register(Requests_Hooker $hooks) {
+ $hooks->register('requests.before_request', array($this, 'before_request'));
+ $hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
+ }
+
+ /**
+ * Add Cookie header to a request if we have any
+ *
+ * As per RFC 6265, cookies are separated by '; '
+ *
+ * @param string $url
+ * @param array $headers
+ * @param array $data
+ * @param string $type
+ * @param array $options
+ */
+ public function before_request($url, &$headers, &$data, &$type, &$options) {
+ if (!$url instanceof Requests_IRI) {
+ $url = new Requests_IRI($url);
+ }
+
+ if (!empty($this->cookies)) {
+ $cookies = array();
+ foreach ($this->cookies as $key => $cookie) {
+ $cookie = $this->normalize_cookie($cookie, $key);
+
+ // Skip expired cookies
+ if ($cookie->is_expired()) {
+ continue;
+ }
+
+ if ($cookie->domain_matches($url->host)) {
+ $cookies[] = $cookie->format_for_header();
+ }
+ }
+
+ $headers['Cookie'] = implode('; ', $cookies);
+ }
+ }
+
+ /**
+ * Parse all cookies from a response and attach them to the response
+ *
+ * @var Requests_Response $response
+ */
+ public function before_redirect_check(Requests_Response &$return) {
+ $url = $return->url;
+ if (!$url instanceof Requests_IRI) {
+ $url = new Requests_IRI($url);
+ }
+
+ $cookies = Requests_Cookie::parse_from_headers($return->headers, $url);
+ $this->cookies = array_merge($this->cookies, $cookies);
+ $return->cookies = $this;
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Exception.php b/wp-includes/Requests/Exception.php
new file mode 100644
index 0000000..37d4711
--- /dev/null
+++ b/wp-includes/Requests/Exception.php
@@ -0,0 +1,62 @@
+type = $type;
+ $this->data = $data;
+ }
+
+ /**
+ * Like {@see getCode()}, but a string code.
+ *
+ * @codeCoverageIgnore
+ * @return string
+ */
+ public function getType() {
+ return $this->type;
+ }
+
+ /**
+ * Gives any relevant data
+ *
+ * @codeCoverageIgnore
+ * @return mixed
+ */
+ public function getData() {
+ return $this->data;
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Exception/HTTP.php b/wp-includes/Requests/Exception/HTTP.php
new file mode 100644
index 0000000..9ac6a87
--- /dev/null
+++ b/wp-includes/Requests/Exception/HTTP.php
@@ -0,0 +1,71 @@
+reason = $reason;
+ }
+
+ $message = sprintf('%d %s', $this->code, $this->reason);
+ parent::__construct($message, 'httpresponse', $data, $this->code);
+ }
+
+ /**
+ * Get the status message
+ */
+ public function getReason() {
+ return $this->reason;
+ }
+
+ /**
+ * Get the correct exception class for a given error code
+ *
+ * @param int|bool $code HTTP status code, or false if unavailable
+ * @return string Exception class name to use
+ */
+ public static function get_class($code) {
+ if (!$code) {
+ return 'Requests_Exception_HTTP_Unknown';
+ }
+
+ $class = sprintf('Requests_Exception_HTTP_%d', $code);
+ if (class_exists($class)) {
+ return $class;
+ }
+
+ return 'Requests_Exception_HTTP_Unknown';
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Exception/HTTP/304.php b/wp-includes/Requests/Exception/HTTP/304.php
new file mode 100644
index 0000000..6799033
--- /dev/null
+++ b/wp-includes/Requests/Exception/HTTP/304.php
@@ -0,0 +1,27 @@
+code = $data->status_code;
+ }
+
+ parent::__construct($reason, $data);
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Exception/Transport.php b/wp-includes/Requests/Exception/Transport.php
new file mode 100644
index 0000000..e60b488
--- /dev/null
+++ b/wp-includes/Requests/Exception/Transport.php
@@ -0,0 +1,5 @@
+type = $type;
+ }
+
+ if ($code !== null) {
+ $this->code = $code;
+ }
+
+ if ($message !== null) {
+ $this->reason = $message;
+ }
+
+ $message = sprintf('%d %s', $this->code, $this->reason);
+ parent::__construct($message, $this->type, $data, $this->code);
+ }
+
+ /**
+ * Get the error message
+ */
+ public function getReason() {
+ return $this->reason;
+ }
+
+}
diff --git a/wp-includes/Requests/Hooker.php b/wp-includes/Requests/Hooker.php
new file mode 100644
index 0000000..f667ae9
--- /dev/null
+++ b/wp-includes/Requests/Hooker.php
@@ -0,0 +1,33 @@
+0 is executed later
+ */
+ public function register($hook, $callback, $priority = 0);
+
+ /**
+ * Dispatch a message
+ *
+ * @param string $hook Hook name
+ * @param array $parameters Parameters to pass to callbacks
+ * @return boolean Successfulness
+ */
+ public function dispatch($hook, $parameters = array());
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Hooks.php b/wp-includes/Requests/Hooks.php
new file mode 100644
index 0000000..2e61c73
--- /dev/null
+++ b/wp-includes/Requests/Hooks.php
@@ -0,0 +1,68 @@
+0 is executed later
+ */
+ public function register($hook, $callback, $priority = 0) {
+ if (!isset($this->hooks[$hook])) {
+ $this->hooks[$hook] = array();
+ }
+ if (!isset($this->hooks[$hook][$priority])) {
+ $this->hooks[$hook][$priority] = array();
+ }
+
+ $this->hooks[$hook][$priority][] = $callback;
+ }
+
+ /**
+ * Dispatch a message
+ *
+ * @param string $hook Hook name
+ * @param array $parameters Parameters to pass to callbacks
+ * @return boolean Successfulness
+ */
+ public function dispatch($hook, $parameters = array()) {
+ if (empty($this->hooks[$hook])) {
+ return false;
+ }
+
+ foreach ($this->hooks[$hook] as $priority => $hooked) {
+ foreach ($hooked as $callback) {
+ call_user_func_array($callback, $parameters);
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/IDNAEncoder.php b/wp-includes/Requests/IDNAEncoder.php
new file mode 100644
index 0000000..ebbe211
--- /dev/null
+++ b/wp-includes/Requests/IDNAEncoder.php
@@ -0,0 +1,388 @@
+ 0) {
+ if ($position + $length > $strlen) {
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
+ }
+ for ($position++; $remaining > 0; $position++) {
+ $value = ord($input[$position]);
+
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
+ if (($value & 0xC0) !== 0x80) {
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
+ }
+
+ $character |= ($value & 0x3F) << (--$remaining * 6);
+ }
+ $position--;
+ }
+
+ if (
+ // Non-shortest form sequences are invalid
+ $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of ucschar codepoints
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ || (
+ // Everything else not in ucschar
+ $character > 0xD7FF && $character < 0xF900
+ || $character < 0x20
+ || $character > 0x7E && $character < 0xA0
+ || $character > 0xEFFFD
+ )
+ ) {
+ throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
+ }
+
+ $codepoints[] = $character;
+ }
+
+ return $codepoints;
+ }
+
+ /**
+ * RFC3492-compliant encoder
+ *
+ * @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
+ * @throws Requests_Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
+ *
+ * @param string $input UTF-8 encoded string to encode
+ * @return string Punycode-encoded string
+ */
+ public static function punycode_encode($input) {
+ $output = '';
+# let n = initial_n
+ $n = self::BOOTSTRAP_INITIAL_N;
+# let delta = 0
+ $delta = 0;
+# let bias = initial_bias
+ $bias = self::BOOTSTRAP_INITIAL_BIAS;
+# let h = b = the number of basic code points in the input
+ $h = $b = 0; // see loop
+# copy them to the output in order
+ $codepoints = self::utf8_to_codepoints($input);
+ $extended = array();
+
+ foreach ($codepoints as $char) {
+ if ($char < 128) {
+ // Character is valid ASCII
+ // TODO: this should also check if it's valid for a URL
+ $output .= chr($char);
+ $h++;
+ }
+ // Check if the character is non-ASCII, but below initial n
+ // This never occurs for Punycode, so ignore in coverage
+ // @codeCoverageIgnoreStart
+ elseif ($char < $n) {
+ throw new Requests_Exception('Invalid character', 'idna.character_outside_domain', $char);
+ }
+ // @codeCoverageIgnoreEnd
+ else {
+ $extended[$char] = true;
+ }
+ }
+ $extended = array_keys($extended);
+ sort($extended);
+ $b = $h;
+# [copy them] followed by a delimiter if b > 0
+ if (strlen($output) > 0) {
+ $output .= '-';
+ }
+# {if the input contains a non-basic code point < n then fail}
+# while h < length(input) do begin
+ while ($h < count($codepoints)) {
+# let m = the minimum code point >= n in the input
+ $m = array_shift($extended);
+ //printf('next code point to insert is %s' . PHP_EOL, dechex($m));
+# let delta = delta + (m - n) * (h + 1), fail on overflow
+ $delta += ($m - $n) * ($h + 1);
+# let n = m
+ $n = $m;
+# for each code point c in the input (in order) do begin
+ for ($num = 0; $num < count($codepoints); $num++) {
+ $c = $codepoints[$num];
+# if c < n then increment delta, fail on overflow
+ if ($c < $n) {
+ $delta++;
+ }
+# if c == n then begin
+ elseif ($c === $n) {
+# let q = delta
+ $q = $delta;
+# for k = base to infinity in steps of base do begin
+ for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
+# let t = tmin if k <= bias {+ tmin}, or
+# tmax if k >= bias + tmax, or k - bias otherwise
+ if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
+ $t = self::BOOTSTRAP_TMIN;
+ }
+ elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
+ $t = self::BOOTSTRAP_TMAX;
+ }
+ else {
+ $t = $k - $bias;
+ }
+# if q < t then break
+ if ($q < $t) {
+ break;
+ }
+# output the code point for digit t + ((q - t) mod (base - t))
+ $digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
+ $output .= self::digit_to_char($digit);
+# let q = (q - t) div (base - t)
+ $q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
+# end
+ }
+# output the code point for digit q
+ $output .= self::digit_to_char($q);
+# let bias = adapt(delta, h + 1, test h equals b?)
+ $bias = self::adapt($delta, $h + 1, $h === $b);
+# let delta = 0
+ $delta = 0;
+# increment h
+ $h++;
+# end
+ }
+# end
+ }
+# increment delta and n
+ $delta++;
+ $n++;
+# end
+ }
+
+ return $output;
+ }
+
+ /**
+ * Convert a digit to its respective character
+ *
+ * @see https://tools.ietf.org/html/rfc3492#section-5
+ * @throws Requests_Exception On invalid digit (`idna.invalid_digit`)
+ *
+ * @param int $digit Digit in the range 0-35
+ * @return string Single character corresponding to digit
+ */
+ protected static function digit_to_char($digit) {
+ // @codeCoverageIgnoreStart
+ // As far as I know, this never happens, but still good to be sure.
+ if ($digit < 0 || $digit > 35) {
+ throw new Requests_Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
+ }
+ // @codeCoverageIgnoreEnd
+ $digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
+ return substr($digits, $digit, 1);
+ }
+
+ /**
+ * Adapt the bias
+ *
+ * @see https://tools.ietf.org/html/rfc3492#section-6.1
+ * @param int $delta
+ * @param int $numpoints
+ * @param bool $firsttime
+ * @return int New bias
+ */
+ protected static function adapt($delta, $numpoints, $firsttime) {
+# function adapt(delta,numpoints,firsttime):
+# if firsttime then let delta = delta div damp
+ if ($firsttime) {
+ $delta = floor($delta / self::BOOTSTRAP_DAMP);
+ }
+# else let delta = delta div 2
+ else {
+ $delta = floor($delta / 2);
+ }
+# let delta = delta + (delta div numpoints)
+ $delta += floor($delta / $numpoints);
+# let k = 0
+ $k = 0;
+# while delta > ((base - tmin) * tmax) div 2 do begin
+ $max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
+ while ($delta > $max) {
+# let delta = delta div (base - tmin)
+ $delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
+# let k = k + base
+ $k += self::BOOTSTRAP_BASE;
+# end
+ }
+# return k + (((base - tmin + 1) * delta) div (delta + skew))
+ return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/IPv6.php b/wp-includes/Requests/IPv6.php
new file mode 100644
index 0000000..204dbd7
--- /dev/null
+++ b/wp-includes/Requests/IPv6.php
@@ -0,0 +1,190 @@
+ FF01:0:0:0:0:0:0:101
+ * ::1 -> 0:0:0:0:0:0:0:1
+ *
+ * @author Alexander Merz
+ * @author elfrink at introweb dot nl
+ * @author Josh Peck
+ * @copyright 2003-2005 The PHP Group
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @param string $ip An IPv6 address
+ * @return string The uncompressed IPv6 address
+ */
+ public static function uncompress($ip) {
+ if (substr_count($ip, '::') !== 1) {
+ return $ip;
+ }
+
+ list($ip1, $ip2) = explode('::', $ip);
+ $c1 = ($ip1 === '') ? -1 : substr_count($ip1, ':');
+ $c2 = ($ip2 === '') ? -1 : substr_count($ip2, ':');
+
+ if (strpos($ip2, '.') !== false) {
+ $c2++;
+ }
+ // ::
+ if ($c1 === -1 && $c2 === -1) {
+ $ip = '0:0:0:0:0:0:0:0';
+ }
+ // ::xxx
+ else if ($c1 === -1) {
+ $fill = str_repeat('0:', 7 - $c2);
+ $ip = str_replace('::', $fill, $ip);
+ }
+ // xxx::
+ else if ($c2 === -1) {
+ $fill = str_repeat(':0', 7 - $c1);
+ $ip = str_replace('::', $fill, $ip);
+ }
+ // xxx::xxx
+ else {
+ $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
+ $ip = str_replace('::', $fill, $ip);
+ }
+ return $ip;
+ }
+
+ /**
+ * Compresses an IPv6 address
+ *
+ * RFC 4291 allows you to compress consecutive zero pieces in an address to
+ * '::'. This method expects a valid IPv6 address and compresses consecutive
+ * zero pieces to '::'.
+ *
+ * Example: FF01:0:0:0:0:0:0:101 -> FF01::101
+ * 0:0:0:0:0:0:0:1 -> ::1
+ *
+ * @see uncompress()
+ * @param string $ip An IPv6 address
+ * @return string The compressed IPv6 address
+ */
+ public static function compress($ip) {
+ // Prepare the IP to be compressed
+ $ip = self::uncompress($ip);
+ $ip_parts = self::split_v6_v4($ip);
+
+ // Replace all leading zeros
+ $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
+
+ // Find bunches of zeros
+ if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
+ $max = 0;
+ $pos = null;
+ foreach ($matches[0] as $match) {
+ if (strlen($match[0]) > $max) {
+ $max = strlen($match[0]);
+ $pos = $match[1];
+ }
+ }
+
+ $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
+ }
+
+ if ($ip_parts[1] !== '') {
+ return implode(':', $ip_parts);
+ }
+ else {
+ return $ip_parts[0];
+ }
+ }
+
+ /**
+ * Splits an IPv6 address into the IPv6 and IPv4 representation parts
+ *
+ * RFC 4291 allows you to represent the last two parts of an IPv6 address
+ * using the standard IPv4 representation
+ *
+ * Example: 0:0:0:0:0:0:13.1.68.3
+ * 0:0:0:0:0:FFFF:129.144.52.38
+ *
+ * @param string $ip An IPv6 address
+ * @return string[] [0] contains the IPv6 represented part, and [1] the IPv4 represented part
+ */
+ protected static function split_v6_v4($ip) {
+ if (strpos($ip, '.') !== false) {
+ $pos = strrpos($ip, ':');
+ $ipv6_part = substr($ip, 0, $pos);
+ $ipv4_part = substr($ip, $pos + 1);
+ return array($ipv6_part, $ipv4_part);
+ }
+ else {
+ return array($ip, '');
+ }
+ }
+
+ /**
+ * Checks an IPv6 address
+ *
+ * Checks if the given IP is a valid IPv6 address
+ *
+ * @param string $ip An IPv6 address
+ * @return bool true if $ip is a valid IPv6 address
+ */
+ public static function check_ipv6($ip) {
+ $ip = self::uncompress($ip);
+ list($ipv6, $ipv4) = self::split_v6_v4($ip);
+ $ipv6 = explode(':', $ipv6);
+ $ipv4 = explode('.', $ipv4);
+ if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
+ foreach ($ipv6 as $ipv6_part) {
+ // The section can't be empty
+ if ($ipv6_part === '') {
+ return false;
+ }
+
+ // Nor can it be over four characters
+ if (strlen($ipv6_part) > 4) {
+ return false;
+ }
+
+ // Remove leading zeros (this is safe because of the above)
+ $ipv6_part = ltrim($ipv6_part, '0');
+ if ($ipv6_part === '') {
+ $ipv6_part = '0';
+ }
+
+ // Check the value is valid
+ $value = hexdec($ipv6_part);
+ if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
+ return false;
+ }
+ }
+ if (count($ipv4) === 4) {
+ foreach ($ipv4 as $ipv4_part) {
+ $value = (int) $ipv4_part;
+ if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+}
diff --git a/wp-includes/Requests/IRI.php b/wp-includes/Requests/IRI.php
new file mode 100644
index 0000000..44a9517
--- /dev/null
+++ b/wp-includes/Requests/IRI.php
@@ -0,0 +1,1087 @@
+ array(
+ 'port' => 674
+ ),
+ 'dict' => array(
+ 'port' => 2628
+ ),
+ 'file' => array(
+ 'ihost' => 'localhost'
+ ),
+ 'http' => array(
+ 'port' => 80,
+ ),
+ 'https' => array(
+ 'port' => 443,
+ ),
+ );
+
+ /**
+ * Return the entire IRI when you try and read the object as a string
+ *
+ * @return string
+ */
+ public function __toString() {
+ return $this->get_iri();
+ }
+
+ /**
+ * Overload __set() to provide access via properties
+ *
+ * @param string $name Property name
+ * @param mixed $value Property value
+ */
+ public function __set($name, $value) {
+ if (method_exists($this, 'set_' . $name)) {
+ call_user_func(array($this, 'set_' . $name), $value);
+ }
+ elseif (
+ $name === 'iauthority'
+ || $name === 'iuserinfo'
+ || $name === 'ihost'
+ || $name === 'ipath'
+ || $name === 'iquery'
+ || $name === 'ifragment'
+ ) {
+ call_user_func(array($this, 'set_' . substr($name, 1)), $value);
+ }
+ }
+
+ /**
+ * Overload __get() to provide access via properties
+ *
+ * @param string $name Property name
+ * @return mixed
+ */
+ public function __get($name) {
+ // isset() returns false for null, we don't want to do that
+ // Also why we use array_key_exists below instead of isset()
+ $props = get_object_vars($this);
+
+ if (
+ $name === 'iri' ||
+ $name === 'uri' ||
+ $name === 'iauthority' ||
+ $name === 'authority'
+ ) {
+ $method = 'get_' . $name;
+ $return = $this->$method();
+ }
+ elseif (array_key_exists($name, $props)) {
+ $return = $this->$name;
+ }
+ // host -> ihost
+ elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
+ $name = $prop;
+ $return = $this->$prop;
+ }
+ // ischeme -> scheme
+ elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
+ $name = $prop;
+ $return = $this->$prop;
+ }
+ else {
+ trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
+ $return = null;
+ }
+
+ if ($return === null && isset($this->normalization[$this->scheme][$name])) {
+ return $this->normalization[$this->scheme][$name];
+ }
+ else {
+ return $return;
+ }
+ }
+
+ /**
+ * Overload __isset() to provide access via properties
+ *
+ * @param string $name Property name
+ * @return bool
+ */
+ public function __isset($name) {
+ return (method_exists($this, 'get_' . $name) || isset($this->$name));
+ }
+
+ /**
+ * Overload __unset() to provide access via properties
+ *
+ * @param string $name Property name
+ */
+ public function __unset($name) {
+ if (method_exists($this, 'set_' . $name)) {
+ call_user_func(array($this, 'set_' . $name), '');
+ }
+ }
+
+ /**
+ * Create a new IRI object, from a specified string
+ *
+ * @param string|null $iri
+ */
+ public function __construct($iri = null) {
+ $this->set_iri($iri);
+ }
+
+ /**
+ * Create a new IRI object by resolving a relative IRI
+ *
+ * Returns false if $base is not absolute, otherwise an IRI.
+ *
+ * @param IRI|string $base (Absolute) Base IRI
+ * @param IRI|string $relative Relative IRI
+ * @return IRI|false
+ */
+ public static function absolutize($base, $relative) {
+ if (!($relative instanceof Requests_IRI)) {
+ $relative = new Requests_IRI($relative);
+ }
+ if (!$relative->is_valid()) {
+ return false;
+ }
+ elseif ($relative->scheme !== null) {
+ return clone $relative;
+ }
+
+ if (!($base instanceof Requests_IRI)) {
+ $base = new Requests_IRI($base);
+ }
+ if ($base->scheme === null || !$base->is_valid()) {
+ return false;
+ }
+
+ if ($relative->get_iri() !== '') {
+ if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
+ $target = clone $relative;
+ $target->scheme = $base->scheme;
+ }
+ else {
+ $target = new Requests_IRI;
+ $target->scheme = $base->scheme;
+ $target->iuserinfo = $base->iuserinfo;
+ $target->ihost = $base->ihost;
+ $target->port = $base->port;
+ if ($relative->ipath !== '') {
+ if ($relative->ipath[0] === '/') {
+ $target->ipath = $relative->ipath;
+ }
+ elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
+ $target->ipath = '/' . $relative->ipath;
+ }
+ elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
+ $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
+ }
+ else {
+ $target->ipath = $relative->ipath;
+ }
+ $target->ipath = $target->remove_dot_segments($target->ipath);
+ $target->iquery = $relative->iquery;
+ }
+ else {
+ $target->ipath = $base->ipath;
+ if ($relative->iquery !== null) {
+ $target->iquery = $relative->iquery;
+ }
+ elseif ($base->iquery !== null) {
+ $target->iquery = $base->iquery;
+ }
+ }
+ $target->ifragment = $relative->ifragment;
+ }
+ }
+ else {
+ $target = clone $base;
+ $target->ifragment = null;
+ }
+ $target->scheme_normalization();
+ return $target;
+ }
+
+ /**
+ * Parse an IRI into scheme/authority/path/query/fragment segments
+ *
+ * @param string $iri
+ * @return array
+ */
+ protected function parse_iri($iri) {
+ $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
+ $has_match = preg_match('/^((?P[^:\/?#]+):)?(\/\/(?P[^\/?#]*))?(?P[^?#]*)(\?(?P[^#]*))?(#(?P.*))?$/', $iri, $match);
+ if (!$has_match) {
+ throw new Requests_Exception('Cannot parse supplied IRI', 'iri.cannot_parse', $iri);
+ }
+
+ if ($match[1] === '') {
+ $match['scheme'] = null;
+ }
+ if (!isset($match[3]) || $match[3] === '') {
+ $match['authority'] = null;
+ }
+ if (!isset($match[5])) {
+ $match['path'] = '';
+ }
+ if (!isset($match[6]) || $match[6] === '') {
+ $match['query'] = null;
+ }
+ if (!isset($match[8]) || $match[8] === '') {
+ $match['fragment'] = null;
+ }
+ return $match;
+ }
+
+ /**
+ * Remove dot segments from a path
+ *
+ * @param string $input
+ * @return string
+ */
+ protected function remove_dot_segments($input) {
+ $output = '';
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
+ // A: If the input buffer begins with a prefix of "../" or "./",
+ // then remove that prefix from the input buffer; otherwise,
+ if (strpos($input, '../') === 0) {
+ $input = substr($input, 3);
+ }
+ elseif (strpos($input, './') === 0) {
+ $input = substr($input, 2);
+ }
+ // B: if the input buffer begins with a prefix of "/./" or "/.",
+ // where "." is a complete path segment, then replace that prefix
+ // with "/" in the input buffer; otherwise,
+ elseif (strpos($input, '/./') === 0) {
+ $input = substr($input, 2);
+ }
+ elseif ($input === '/.') {
+ $input = '/';
+ }
+ // C: if the input buffer begins with a prefix of "/../" or "/..",
+ // where ".." is a complete path segment, then replace that prefix
+ // with "/" in the input buffer and remove the last segment and its
+ // preceding "/" (if any) from the output buffer; otherwise,
+ elseif (strpos($input, '/../') === 0) {
+ $input = substr($input, 3);
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ elseif ($input === '/..') {
+ $input = '/';
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ // D: if the input buffer consists only of "." or "..", then remove
+ // that from the input buffer; otherwise,
+ elseif ($input === '.' || $input === '..') {
+ $input = '';
+ }
+ // E: move the first path segment in the input buffer to the end of
+ // the output buffer, including the initial "/" character (if any)
+ // and any subsequent characters up to, but not including, the next
+ // "/" character or the end of the input buffer
+ elseif (($pos = strpos($input, '/', 1)) !== false) {
+ $output .= substr($input, 0, $pos);
+ $input = substr_replace($input, '', 0, $pos);
+ }
+ else {
+ $output .= $input;
+ $input = '';
+ }
+ }
+ return $output . $input;
+ }
+
+ /**
+ * Replace invalid character with percent encoding
+ *
+ * @param string $string Input string
+ * @param string $extra_chars Valid characters not in iunreserved or
+ * iprivate (this is ASCII-only)
+ * @param bool $iprivate Allow iprivate
+ * @return string
+ */
+ protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false) {
+ // Normalize as many pct-encoded sections as possible
+ $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
+
+ // Replace invalid percent characters
+ $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
+
+ // Add unreserved and % to $extra_chars (the latter is safe because all
+ // pct-encoded sections are now valid).
+ $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
+
+ // Now replace any bytes that aren't allowed with their pct-encoded versions
+ $position = 0;
+ $strlen = strlen($string);
+ while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
+ $value = ord($string[$position]);
+
+ // Start position
+ $start = $position;
+
+ // By default we are valid
+ $valid = true;
+
+ // No one byte sequences are valid due to the while.
+ // Two byte sequence:
+ if (($value & 0xE0) === 0xC0) {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0) {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0) {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else {
+ $valid = false;
+ $length = 1;
+ $remaining = 0;
+ }
+
+ if ($remaining) {
+ if ($position + $length <= $strlen) {
+ for ($position++; $remaining; $position++) {
+ $value = ord($string[$position]);
+
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80) {
+ $character |= ($value & 0x3F) << (--$remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
+ else {
+ $valid = false;
+ $position--;
+ break;
+ }
+ }
+ }
+ else {
+ $position = $strlen - 1;
+ $valid = false;
+ }
+ }
+
+ // Percent encode anything invalid or not in ucschar
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of ucschar codepoints
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ || (
+ // Everything else not in ucschar
+ $character > 0xD7FF && $character < 0xF900
+ || $character < 0xA0
+ || $character > 0xEFFFD
+ )
+ && (
+ // Everything not in iprivate, if it applies
+ !$iprivate
+ || $character < 0xE000
+ || $character > 0x10FFFD
+ )
+ ) {
+ // If we were a character, pretend we weren't, but rather an error.
+ if ($valid) {
+ $position--;
+ }
+
+ for ($j = $start; $j <= $position; $j++) {
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
+ $j += 2;
+ $position += 2;
+ $strlen += 2;
+ }
+ }
+ }
+
+ return $string;
+ }
+
+ /**
+ * Callback function for preg_replace_callback.
+ *
+ * Removes sequences of percent encoded bytes that represent UTF-8
+ * encoded characters in iunreserved
+ *
+ * @param array $match PCRE match
+ * @return string Replacement
+ */
+ protected function remove_iunreserved_percent_encoded($match) {
+ // As we just have valid percent encoded sequences we can just explode
+ // and ignore the first member of the returned array (an empty string).
+ $bytes = explode('%', $match[0]);
+
+ // Initialize the new string (this is what will be returned) and that
+ // there are no bytes remaining in the current sequence (unsurprising
+ // at the first byte!).
+ $string = '';
+ $remaining = 0;
+
+ // Loop over each and every byte, and set $value to its value
+ for ($i = 1, $len = count($bytes); $i < $len; $i++) {
+ $value = hexdec($bytes[$i]);
+
+ // If we're the first byte of sequence:
+ if (!$remaining) {
+ // Start position
+ $start = $i;
+
+ // By default we are valid
+ $valid = true;
+
+ // One byte sequence:
+ if ($value <= 0x7F) {
+ $character = $value;
+ $length = 1;
+ }
+ // Two byte sequence:
+ elseif (($value & 0xE0) === 0xC0) {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0) {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0) {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else {
+ $valid = false;
+ $remaining = 0;
+ }
+ }
+ // Continuation byte:
+ else {
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80) {
+ $remaining--;
+ $character |= ($value & 0x3F) << ($remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
+ else {
+ $valid = false;
+ $remaining = 0;
+ $i--;
+ }
+ }
+
+ // If we've reached the end of the current byte sequence, append it to Unicode::$data
+ if (!$remaining) {
+ // Percent encode anything invalid or not in iunreserved
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of iunreserved codepoints
+ || $character < 0x2D
+ || $character > 0xEFFFD
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ // Everything else not in iunreserved (this is all BMP)
+ || $character === 0x2F
+ || $character > 0x39 && $character < 0x41
+ || $character > 0x5A && $character < 0x61
+ || $character > 0x7A && $character < 0x7E
+ || $character > 0x7E && $character < 0xA0
+ || $character > 0xD7FF && $character < 0xF900
+ ) {
+ for ($j = $start; $j <= $i; $j++) {
+ $string .= '%' . strtoupper($bytes[$j]);
+ }
+ }
+ else {
+ for ($j = $start; $j <= $i; $j++) {
+ $string .= chr(hexdec($bytes[$j]));
+ }
+ }
+ }
+ }
+
+ // If we have any bytes left over they are invalid (i.e., we are
+ // mid-way through a multi-byte sequence)
+ if ($remaining) {
+ for ($j = $start; $j < $len; $j++) {
+ $string .= '%' . strtoupper($bytes[$j]);
+ }
+ }
+
+ return $string;
+ }
+
+ protected function scheme_normalization() {
+ if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
+ $this->iuserinfo = null;
+ }
+ if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
+ $this->ihost = null;
+ }
+ if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
+ $this->port = null;
+ }
+ if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
+ $this->ipath = '';
+ }
+ if (isset($this->ihost) && empty($this->ipath)) {
+ $this->ipath = '/';
+ }
+ if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
+ $this->iquery = null;
+ }
+ if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
+ $this->ifragment = null;
+ }
+ }
+
+ /**
+ * Check if the object represents a valid IRI. This needs to be done on each
+ * call as some things change depending on another part of the IRI.
+ *
+ * @return bool
+ */
+ public function is_valid() {
+ $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
+ if ($this->ipath !== '' &&
+ (
+ $isauthority && (
+ $this->ipath[0] !== '/' ||
+ substr($this->ipath, 0, 2) === '//'
+ ) ||
+ (
+ $this->scheme === null &&
+ !$isauthority &&
+ strpos($this->ipath, ':') !== false &&
+ (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
+ )
+ )
+ ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Set the entire IRI. Returns true on success, false on failure (if there
+ * are any invalid characters).
+ *
+ * @param string $iri
+ * @return bool
+ */
+ protected function set_iri($iri) {
+ static $cache;
+ if (!$cache) {
+ $cache = array();
+ }
+
+ if ($iri === null) {
+ return true;
+ }
+ if (isset($cache[$iri])) {
+ list($this->scheme,
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $this->ipath,
+ $this->iquery,
+ $this->ifragment,
+ $return) = $cache[$iri];
+ return $return;
+ }
+
+ $parsed = $this->parse_iri((string) $iri);
+
+ $return = $this->set_scheme($parsed['scheme'])
+ && $this->set_authority($parsed['authority'])
+ && $this->set_path($parsed['path'])
+ && $this->set_query($parsed['query'])
+ && $this->set_fragment($parsed['fragment']);
+
+ $cache[$iri] = array($this->scheme,
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $this->ipath,
+ $this->iquery,
+ $this->ifragment,
+ $return);
+ return $return;
+ }
+
+ /**
+ * Set the scheme. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @param string $scheme
+ * @return bool
+ */
+ protected function set_scheme($scheme) {
+ if ($scheme === null) {
+ $this->scheme = null;
+ }
+ elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
+ $this->scheme = null;
+ return false;
+ }
+ else {
+ $this->scheme = strtolower($scheme);
+ }
+ return true;
+ }
+
+ /**
+ * Set the authority. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @param string $authority
+ * @return bool
+ */
+ protected function set_authority($authority) {
+ static $cache;
+ if (!$cache) {
+ $cache = array();
+ }
+
+ if ($authority === null) {
+ $this->iuserinfo = null;
+ $this->ihost = null;
+ $this->port = null;
+ return true;
+ }
+ if (isset($cache[$authority])) {
+ list($this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $return) = $cache[$authority];
+
+ return $return;
+ }
+
+ $remaining = $authority;
+ if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
+ $iuserinfo = substr($remaining, 0, $iuserinfo_end);
+ $remaining = substr($remaining, $iuserinfo_end + 1);
+ }
+ else {
+ $iuserinfo = null;
+ }
+ if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) {
+ $port = substr($remaining, $port_start + 1);
+ if ($port === false || $port === '') {
+ $port = null;
+ }
+ $remaining = substr($remaining, 0, $port_start);
+ }
+ else {
+ $port = null;
+ }
+
+ $return = $this->set_userinfo($iuserinfo) &&
+ $this->set_host($remaining) &&
+ $this->set_port($port);
+
+ $cache[$authority] = array($this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $return);
+
+ return $return;
+ }
+
+ /**
+ * Set the iuserinfo.
+ *
+ * @param string $iuserinfo
+ * @return bool
+ */
+ protected function set_userinfo($iuserinfo) {
+ if ($iuserinfo === null) {
+ $this->iuserinfo = null;
+ }
+ else {
+ $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
+ $this->scheme_normalization();
+ }
+
+ return true;
+ }
+
+ /**
+ * Set the ihost. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @param string $ihost
+ * @return bool
+ */
+ protected function set_host($ihost) {
+ if ($ihost === null) {
+ $this->ihost = null;
+ return true;
+ }
+ if (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
+ if (Requests_IPv6::check_ipv6(substr($ihost, 1, -1))) {
+ $this->ihost = '[' . Requests_IPv6::compress(substr($ihost, 1, -1)) . ']';
+ }
+ else {
+ $this->ihost = null;
+ return false;
+ }
+ }
+ else {
+ $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
+
+ // Lowercase, but ignore pct-encoded sections (as they should
+ // remain uppercase). This must be done after the previous step
+ // as that can add unescaped characters.
+ $position = 0;
+ $strlen = strlen($ihost);
+ while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
+ if ($ihost[$position] === '%') {
+ $position += 3;
+ }
+ else {
+ $ihost[$position] = strtolower($ihost[$position]);
+ $position++;
+ }
+ }
+
+ $this->ihost = $ihost;
+ }
+
+ $this->scheme_normalization();
+
+ return true;
+ }
+
+ /**
+ * Set the port. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @param string $port
+ * @return bool
+ */
+ protected function set_port($port) {
+ if ($port === null) {
+ $this->port = null;
+ return true;
+ }
+
+ if (strspn($port, '0123456789') === strlen($port)) {
+ $this->port = (int) $port;
+ $this->scheme_normalization();
+ return true;
+ }
+
+ $this->port = null;
+ return false;
+ }
+
+ /**
+ * Set the ipath.
+ *
+ * @param string $ipath
+ * @return bool
+ */
+ protected function set_path($ipath) {
+ static $cache;
+ if (!$cache) {
+ $cache = array();
+ }
+
+ $ipath = (string) $ipath;
+
+ if (isset($cache[$ipath])) {
+ $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
+ }
+ else {
+ $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
+ $removed = $this->remove_dot_segments($valid);
+
+ $cache[$ipath] = array($valid, $removed);
+ $this->ipath = ($this->scheme !== null) ? $removed : $valid;
+ }
+ $this->scheme_normalization();
+ return true;
+ }
+
+ /**
+ * Set the iquery.
+ *
+ * @param string $iquery
+ * @return bool
+ */
+ protected function set_query($iquery) {
+ if ($iquery === null) {
+ $this->iquery = null;
+ }
+ else {
+ $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
+ $this->scheme_normalization();
+ }
+ return true;
+ }
+
+ /**
+ * Set the ifragment.
+ *
+ * @param string $ifragment
+ * @return bool
+ */
+ protected function set_fragment($ifragment) {
+ if ($ifragment === null) {
+ $this->ifragment = null;
+ }
+ else {
+ $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
+ $this->scheme_normalization();
+ }
+ return true;
+ }
+
+ /**
+ * Convert an IRI to a URI (or parts thereof)
+ *
+ * @param string|bool IRI to convert (or false from {@see get_iri})
+ * @return string|false URI if IRI is valid, false otherwise.
+ */
+ protected function to_uri($string) {
+ if (!is_string($string)) {
+ return false;
+ }
+
+ static $non_ascii;
+ if (!$non_ascii) {
+ $non_ascii = implode('', range("\x80", "\xFF"));
+ }
+
+ $position = 0;
+ $strlen = strlen($string);
+ while (($position += strcspn($string, $non_ascii, $position)) < $strlen) {
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
+ $position += 3;
+ $strlen += 2;
+ }
+
+ return $string;
+ }
+
+ /**
+ * Get the complete IRI
+ *
+ * @return string
+ */
+ protected function get_iri() {
+ if (!$this->is_valid()) {
+ return false;
+ }
+
+ $iri = '';
+ if ($this->scheme !== null) {
+ $iri .= $this->scheme . ':';
+ }
+ if (($iauthority = $this->get_iauthority()) !== null) {
+ $iri .= '//' . $iauthority;
+ }
+ $iri .= $this->ipath;
+ if ($this->iquery !== null) {
+ $iri .= '?' . $this->iquery;
+ }
+ if ($this->ifragment !== null) {
+ $iri .= '#' . $this->ifragment;
+ }
+
+ return $iri;
+ }
+
+ /**
+ * Get the complete URI
+ *
+ * @return string
+ */
+ protected function get_uri() {
+ return $this->to_uri($this->get_iri());
+ }
+
+ /**
+ * Get the complete iauthority
+ *
+ * @return string
+ */
+ protected function get_iauthority() {
+ if ($this->iuserinfo === null && $this->ihost === null && $this->port === null) {
+ return null;
+ }
+
+ $iauthority = '';
+ if ($this->iuserinfo !== null) {
+ $iauthority .= $this->iuserinfo . '@';
+ }
+ if ($this->ihost !== null) {
+ $iauthority .= $this->ihost;
+ }
+ if ($this->port !== null) {
+ $iauthority .= ':' . $this->port;
+ }
+ return $iauthority;
+ }
+
+ /**
+ * Get the complete authority
+ *
+ * @return string
+ */
+ protected function get_authority() {
+ $iauthority = $this->get_iauthority();
+ if (is_string($iauthority)) {
+ return $this->to_uri($iauthority);
+ }
+ else {
+ return $iauthority;
+ }
+ }
+}
diff --git a/wp-includes/Requests/Proxy.php b/wp-includes/Requests/Proxy.php
new file mode 100644
index 0000000..ac7c1d6
--- /dev/null
+++ b/wp-includes/Requests/Proxy.php
@@ -0,0 +1,35 @@
+proxy = $args;
+ }
+ elseif (is_array($args)) {
+ if (count($args) == 1) {
+ list($this->proxy) = $args;
+ }
+ elseif (count($args) == 3) {
+ list($this->proxy, $this->user, $this->pass) = $args;
+ $this->use_authentication = true;
+ }
+ else {
+ throw new Requests_Exception('Invalid number of arguments', 'proxyhttpbadargs');
+ }
+ }
+ }
+
+ /**
+ * Register the necessary callbacks
+ *
+ * @since 1.6
+ * @see curl_before_send
+ * @see fsockopen_remote_socket
+ * @see fsockopen_remote_host_path
+ * @see fsockopen_header
+ * @param Requests_Hooks $hooks Hook system
+ */
+ public function register(Requests_Hooks &$hooks) {
+ $hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
+
+ $hooks->register('fsockopen.remote_socket', array(&$this, 'fsockopen_remote_socket'));
+ $hooks->register('fsockopen.remote_host_path', array(&$this, 'fsockopen_remote_host_path'));
+ if ($this->use_authentication) {
+ $hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
+ }
+ }
+
+ /**
+ * Set cURL parameters before the data is sent
+ *
+ * @since 1.6
+ * @param resource $handle cURL resource
+ */
+ public function curl_before_send(&$handle) {
+ curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+ curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
+
+ if ($this->use_authentication) {
+ curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+ curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
+ }
+ }
+
+ /**
+ * Alter remote socket information before opening socket connection
+ *
+ * @since 1.6
+ * @param string $remote_socket Socket connection string
+ */
+ public function fsockopen_remote_socket(&$remote_socket) {
+ $remote_socket = $this->proxy;
+ }
+
+ /**
+ * Alter remote path before getting stream data
+ *
+ * @since 1.6
+ * @param string $path Path to send in HTTP request string ("GET ...")
+ * @param string $url Full URL we're requesting
+ */
+ public function fsockopen_remote_host_path(&$path, $url) {
+ $path = $url;
+ }
+
+ /**
+ * Add extra headers to the request before sending
+ *
+ * @since 1.6
+ * @param string $out HTTP header string
+ */
+ public function fsockopen_header(&$out) {
+ $out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
+ }
+
+ /**
+ * Get the authentication string (user:pass)
+ *
+ * @since 1.6
+ * @return string
+ */
+ public function get_auth_string() {
+ return $this->user . ':' . $this->pass;
+ }
+}
\ No newline at end of file
diff --git a/wp-includes/Requests/Response.php b/wp-includes/Requests/Response.php
new file mode 100644
index 0000000..3152fb6
--- /dev/null
+++ b/wp-includes/Requests/Response.php
@@ -0,0 +1,121 @@
+headers = new Requests_Response_Headers();
+ $this->cookies = new Requests_Cookie_Jar();
+ }
+
+ /**
+ * Response body
+ *
+ * @var string
+ */
+ public $body = '';
+
+ /**
+ * Raw HTTP data from the transport
+ *
+ * @var string
+ */
+ public $raw = '';
+
+ /**
+ * Headers, as an associative array
+ *
+ * @var Requests_Response_Headers Array-like object representing headers
+ */
+ public $headers = array();
+
+ /**
+ * Status code, false if non-blocking
+ *
+ * @var integer|boolean
+ */
+ public $status_code = false;
+
+ /**
+ * Protocol version, false if non-blocking
+ * @var float|boolean
+ */
+ public $protocol_version = false;
+
+ /**
+ * Whether the request succeeded or not
+ *
+ * @var boolean
+ */
+ public $success = false;
+
+ /**
+ * Number of redirects the request used
+ *
+ * @var integer
+ */
+ public $redirects = 0;
+
+ /**
+ * URL requested
+ *
+ * @var string
+ */
+ public $url = '';
+
+ /**
+ * Previous requests (from redirects)
+ *
+ * @var array Array of Requests_Response objects
+ */
+ public $history = array();
+
+ /**
+ * Cookies from the request
+ *
+ * @var Requests_Cookie_Jar Array-like object representing a cookie jar
+ */
+ public $cookies = array();
+
+ /**
+ * Is the response a redirect?
+ *
+ * @return boolean True if redirect (3xx status), false if not.
+ */
+ public function is_redirect() {
+ $code = $this->status_code;
+ return in_array($code, array(300, 301, 302, 303, 307)) || $code > 307 && $code < 400;
+ }
+
+ /**
+ * Throws an exception if the request was not successful
+ *
+ * @throws Requests_Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
+ * @throws Requests_Exception_HTTP On non-successful status code. Exception class corresponds to code (e.g. {@see Requests_Exception_HTTP_404})
+ * @param boolean $allow_redirects Set to false to throw on a 3xx as well
+ */
+ public function throw_for_status($allow_redirects = true) {
+ if ($this->is_redirect()) {
+ if (!$allow_redirects) {
+ throw new Requests_Exception('Redirection not allowed', 'response.no_redirects', $this);
+ }
+ }
+ elseif (!$this->success) {
+ $exception = Requests_Exception_HTTP::get_class($this->status_code);
+ throw new $exception(null, $this);
+ }
+ }
+}
diff --git a/wp-includes/Requests/Response/Headers.php b/wp-includes/Requests/Response/Headers.php
new file mode 100644
index 0000000..cc6a208
--- /dev/null
+++ b/wp-includes/Requests/Response/Headers.php
@@ -0,0 +1,98 @@
+data[$key])) {
+ return null;
+ }
+
+ return $this->flatten($this->data[$key]);
+ }
+
+ /**
+ * Set the given item
+ *
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
+ *
+ * @param string $key Item name
+ * @param string $value Item value
+ */
+ public function offsetSet($key, $value) {
+ if ($key === null) {
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
+ }
+
+ $key = strtolower($key);
+
+ if (!isset($this->data[$key])) {
+ $this->data[$key] = array();
+ }
+
+ $this->data[$key][] = $value;
+ }
+
+ /**
+ * Get all values for a given header
+ *
+ * @param string $key
+ * @return array Header values
+ */
+ public function getValues($key) {
+ $key = strtolower($key);
+ if (!isset($this->data[$key])) {
+ return null;
+ }
+
+ return $this->data[$key];
+ }
+
+ /**
+ * Flattens a value into a string
+ *
+ * Converts an array into a string by imploding values with a comma, as per
+ * RFC2616's rules for folding headers.
+ *
+ * @param string|array $value Value to flatten
+ * @return string Flattened value
+ */
+ public function flatten($value) {
+ if (is_array($value)) {
+ $value = implode(',', $value);
+ }
+
+ return $value;
+ }
+
+ /**
+ * Get an iterator for the data
+ *
+ * Converts the internal
+ * @return ArrayIterator
+ */
+ public function getIterator() {
+ return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
+ }
+}
diff --git a/wp-includes/Requests/SSL.php b/wp-includes/Requests/SSL.php
new file mode 100644
index 0000000..2b03768
--- /dev/null
+++ b/wp-includes/Requests/SSL.php
@@ -0,0 +1,152 @@
+useragent = 'X';`
+ *
+ * @var array
+ */
+ public $options = array();
+
+ /**
+ * Create a new session
+ *
+ * @param string|null $url Base URL for requests
+ * @param array $headers Default headers for requests
+ * @param array $data Default data for requests
+ * @param array $options Default options for requests
+ */
+ public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
+ $this->url = $url;
+ $this->headers = $headers;
+ $this->data = $data;
+ $this->options = $options;
+
+ if (empty($this->options['cookies'])) {
+ $this->options['cookies'] = new Requests_Cookie_Jar();
+ }
+ }
+
+ /**
+ * Get a property's value
+ *
+ * @param string $key Property key
+ * @return mixed|null Property value, null if none found
+ */
+ public function __get($key) {
+ if (isset($this->options[$key])) {
+ return $this->options[$key];
+ }
+
+ return null;
+ }
+
+ /**
+ * Set a property's value
+ *
+ * @param string $key Property key
+ * @param mixed $value Property value
+ */
+ public function __set($key, $value) {
+ $this->options[$key] = $value;
+ }
+
+ /**
+ * Remove a property's value
+ *
+ * @param string $key Property key
+ */
+ public function __isset($key) {
+ return isset($this->options[$key]);
+ }
+
+ /**
+ * Remove a property's value
+ *
+ * @param string $key Property key
+ */
+ public function __unset($key) {
+ if (isset($this->options[$key])) {
+ unset($this->options[$key]);
+ }
+ }
+
+ /**#@+
+ * @see request()
+ * @param string $url
+ * @param array $headers
+ * @param array $options
+ * @return Requests_Response
+ */
+ /**
+ * Send a GET request
+ */
+ public function get($url, $headers = array(), $options = array()) {
+ return $this->request($url, $headers, null, Requests::GET, $options);
+ }
+
+ /**
+ * Send a HEAD request
+ */
+ public function head($url, $headers = array(), $options = array()) {
+ return $this->request($url, $headers, null, Requests::HEAD, $options);
+ }
+
+ /**
+ * Send a DELETE request
+ */
+ public function delete($url, $headers = array(), $options = array()) {
+ return $this->request($url, $headers, null, Requests::DELETE, $options);
+ }
+ /**#@-*/
+
+ /**#@+
+ * @see request()
+ * @param string $url
+ * @param array $headers
+ * @param array $data
+ * @param array $options
+ * @return Requests_Response
+ */
+ /**
+ * Send a POST request
+ */
+ public function post($url, $headers = array(), $data = array(), $options = array()) {
+ return $this->request($url, $headers, $data, Requests::POST, $options);
+ }
+
+ /**
+ * Send a PUT request
+ */
+ public function put($url, $headers = array(), $data = array(), $options = array()) {
+ return $this->request($url, $headers, $data, Requests::PUT, $options);
+ }
+
+ /**
+ * Send a PATCH request
+ *
+ * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
+ * specification recommends that should send an ETag
+ *
+ * @link https://tools.ietf.org/html/rfc5789
+ */
+ public function patch($url, $headers, $data = array(), $options = array()) {
+ return $this->request($url, $headers, $data, Requests::PATCH, $options);
+ }
+ /**#@-*/
+
+ /**
+ * Main interface for HTTP requests
+ *
+ * This method initiates a request and sends it via a transport before
+ * parsing.
+ *
+ * @see Requests::request()
+ *
+ * @throws Requests_Exception On invalid URLs (`nonhttp`)
+ *
+ * @param string $url URL to request
+ * @param array $headers Extra headers to send with the request
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
+ * @param string $type HTTP request type (use Requests constants)
+ * @param array $options Options for the request (see {@see Requests::request})
+ * @return Requests_Response
+ */
+ public function request($url, $headers = array(), $data = array(), $type = Requests::GET, $options = array()) {
+ $request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
+
+ return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
+ }
+
+ /**
+ * Send multiple HTTP requests simultaneously
+ *
+ * @see Requests::request_multiple()
+ *
+ * @param array $requests Requests data (see {@see Requests::request_multiple})
+ * @param array $options Global and default options (see {@see Requests::request})
+ * @return array Responses (either Requests_Response or a Requests_Exception object)
+ */
+ public function request_multiple($requests, $options = array()) {
+ foreach ($requests as $key => $request) {
+ $requests[$key] = $this->merge_request($request, false);
+ }
+
+ $options = array_merge($this->options, $options);
+
+ // Disallow forcing the type, as that's a per request setting
+ unset($options['type']);
+
+ return Requests::request_multiple($requests, $options);
+ }
+
+ /**
+ * Merge a request's data with the default data
+ *
+ * @param array $request Request data (same form as {@see request_multiple})
+ * @param boolean $merge_options Should we merge options as well?
+ * @return array Request data
+ */
+ protected function merge_request($request, $merge_options = true) {
+ if ($this->url !== null) {
+ $request['url'] = Requests_IRI::absolutize($this->url, $request['url']);
+ $request['url'] = $request['url']->uri;
+ }
+
+ if (empty($request['headers'])) {
+ $request['headers'] = array();
+ }
+ $request['headers'] = array_merge($this->headers, $request['headers']);
+
+ if (empty($request['data'])) {
+ if (is_array($this->data)) {
+ $request['data'] = $this->data;
+ }
+ }
+ elseif (is_array($request['data']) && is_array($this->data)) {
+ $request['data'] = array_merge($this->data, $request['data']);
+ }
+
+ if ($merge_options !== false) {
+ $request['options'] = array_merge($this->options, $request['options']);
+
+ // Disallow forcing the type, as that's a per request setting
+ unset($request['options']['type']);
+ }
+
+ return $request;
+ }
+}
diff --git a/wp-includes/Requests/Transport.php b/wp-includes/Requests/Transport.php
new file mode 100644
index 0000000..7e4a262
--- /dev/null
+++ b/wp-includes/Requests/Transport.php
@@ -0,0 +1,41 @@
+version = $curl['version_number'];
+ $this->handle = curl_init();
+
+ curl_setopt($this->handle, CURLOPT_HEADER, false);
+ curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
+ if ($this->version >= self::CURL_7_10_5) {
+ curl_setopt($this->handle, CURLOPT_ENCODING, '');
+ }
+ if (defined('CURLOPT_PROTOCOLS')) {
+ curl_setopt($this->handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
+ }
+ if (defined('CURLOPT_REDIR_PROTOCOLS')) {
+ curl_setopt($this->handle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
+ }
+ }
+
+ /**
+ * Destructor
+ */
+ public function __destruct() {
+ if (is_resource($this->handle)) {
+ curl_close($this->handle);
+ }
+ }
+
+ /**
+ * Perform a request
+ *
+ * @throws Requests_Exception On a cURL error (`curlerror`)
+ *
+ * @param string $url URL to request
+ * @param array $headers Associative array of request headers
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
+ * @param array $options Request options, see {@see Requests::response()} for documentation
+ * @return string Raw HTTP result
+ */
+ public function request($url, $headers = array(), $data = array(), $options = array()) {
+ $this->hooks = $options['hooks'];
+
+ $this->setup_handle($url, $headers, $data, $options);
+
+ $options['hooks']->dispatch('curl.before_send', array(&$this->handle));
+
+ if ($options['filename'] !== false) {
+ $this->stream_handle = fopen($options['filename'], 'wb');
+ }
+
+ $this->response_data = '';
+ $this->response_bytes = 0;
+ $this->response_byte_limit = false;
+ if ($options['max_bytes'] !== false) {
+ $this->response_byte_limit = $options['max_bytes'];
+ }
+
+ if (isset($options['verify'])) {
+ if ($options['verify'] === false) {
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYPEER, 0);
+ }
+ elseif (is_string($options['verify'])) {
+ curl_setopt($this->handle, CURLOPT_CAINFO, $options['verify']);
+ }
+ }
+
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
+ curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
+ }
+
+ curl_exec($this->handle);
+ $response = $this->response_data;
+
+ $options['hooks']->dispatch('curl.after_send', array());
+
+ if (curl_errno($this->handle) === 23 || curl_errno($this->handle) === 61) {
+ // Reset encoding and try again
+ curl_setopt($this->handle, CURLOPT_ENCODING, 'none');
+
+ $this->response_data = '';
+ $this->response_bytes = 0;
+ curl_exec($this->handle);
+ $response = $this->response_data;
+ }
+
+ $this->process_response($response, $options);
+
+ // Need to remove the $this reference from the curl handle.
+ // Otherwise Requests_Transport_cURL wont be garbage collected and the curl_close() will never be called.
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, null);
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, null);
+
+ return $this->headers;
+ }
+
+ /**
+ * Send multiple requests simultaneously
+ *
+ * @param array $requests Request data
+ * @param array $options Global options
+ * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
+ */
+ public function request_multiple($requests, $options) {
+ // If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
+ if (empty($requests)) {
+ return array();
+ }
+
+ $multihandle = curl_multi_init();
+ $subrequests = array();
+ $subhandles = array();
+
+ $class = get_class($this);
+ foreach ($requests as $id => $request) {
+ $subrequests[$id] = new $class();
+ $subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
+ $request['options']['hooks']->dispatch('curl.before_multi_add', array(&$subhandles[$id]));
+ curl_multi_add_handle($multihandle, $subhandles[$id]);
+ }
+
+ $completed = 0;
+ $responses = array();
+
+ $request['options']['hooks']->dispatch('curl.before_multi_exec', array(&$multihandle));
+
+ do {
+ $active = false;
+
+ do {
+ $status = curl_multi_exec($multihandle, $active);
+ }
+ while ($status === CURLM_CALL_MULTI_PERFORM);
+
+ $to_process = array();
+
+ // Read the information as needed
+ while ($done = curl_multi_info_read($multihandle)) {
+ $key = array_search($done['handle'], $subhandles, true);
+ if (!isset($to_process[$key])) {
+ $to_process[$key] = $done;
+ }
+ }
+
+ // Parse the finished requests before we start getting the new ones
+ foreach ($to_process as $key => $done) {
+ $options = $requests[$key]['options'];
+ if (CURLE_OK !== $done['result']) {
+ //get error string for handle.
+ $reason = curl_error($done['handle']);
+ $exception = new Requests_Exception_Transport_cURL(
+ $reason,
+ Requests_Exception_Transport_cURL::EASY,
+ $done['handle'],
+ $done['result']
+ );
+ $responses[$key] = $exception;
+ $options['hooks']->dispatch('transport.internal.parse_error', array(&$responses[$key], $requests[$key]));
+ }
+ else {
+ $responses[$key] = $subrequests[$key]->process_response($subrequests[$key]->response_data, $options);
+
+ $options['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$key], $requests[$key]));
+ }
+
+ curl_multi_remove_handle($multihandle, $done['handle']);
+ curl_close($done['handle']);
+
+ if (!is_string($responses[$key])) {
+ $options['hooks']->dispatch('multiple.request.complete', array(&$responses[$key], $key));
+ }
+ $completed++;
+ }
+ }
+ while ($active || $completed < count($subrequests));
+
+ $request['options']['hooks']->dispatch('curl.after_multi_exec', array(&$multihandle));
+
+ curl_multi_close($multihandle);
+
+ return $responses;
+ }
+
+ /**
+ * Get the cURL handle for use in a multi-request
+ *
+ * @param string $url URL to request
+ * @param array $headers Associative array of request headers
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
+ * @param array $options Request options, see {@see Requests::response()} for documentation
+ * @return resource Subrequest's cURL handle
+ */
+ public function &get_subrequest_handle($url, $headers, $data, $options) {
+ $this->setup_handle($url, $headers, $data, $options);
+
+ if ($options['filename'] !== false) {
+ $this->stream_handle = fopen($options['filename'], 'wb');
+ }
+
+ $this->response_data = '';
+ $this->response_bytes = 0;
+ $this->response_byte_limit = false;
+ if ($options['max_bytes'] !== false) {
+ $this->response_byte_limit = $options['max_bytes'];
+ }
+ $this->hooks = $options['hooks'];
+
+ return $this->handle;
+ }
+
+ /**
+ * Setup the cURL handle for the given data
+ *
+ * @param string $url URL to request
+ * @param array $headers Associative array of request headers
+ * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
+ * @param array $options Request options, see {@see Requests::response()} for documentation
+ */
+ protected function setup_handle($url, $headers, $data, $options) {
+ $options['hooks']->dispatch('curl.before_request', array(&$this->handle));
+
+ // Force closing the connection for old versions of cURL (<7.22).
+ if ( ! isset( $headers['Connection'] ) ) {
+ $headers['Connection'] = 'close';
+ }
+
+ $headers = Requests::flatten($headers);
+
+ if (!empty($data)) {
+ $data_format = $options['data_format'];
+
+ if ($data_format === 'query') {
+ $url = self::format_get($url, $data);
+ $data = '';
+ }
+ elseif (!is_string($data)) {
+ $data = http_build_query($data, null, '&');
+ }
+ }
+
+ switch ($options['type']) {
+ case Requests::POST:
+ curl_setopt($this->handle, CURLOPT_POST, true);
+ curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
+ break;
+ case Requests::HEAD:
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
+ curl_setopt($this->handle, CURLOPT_NOBODY, true);
+ break;
+ case Requests::TRACE:
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
+ break;
+ case Requests::PATCH:
+ case Requests::PUT:
+ case Requests::DELETE:
+ case Requests::OPTIONS:
+ default:
+ curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
+ if (!empty($data)) {
+ curl_setopt( $this->handle, CURLOPT_POSTFIELDS, $data );
+ }
+ }
+
+ // cURL requires a minimum timeout of 1 second when using the system
+ // DNS resolver, as it uses `alarm()`, which is second resolution only.
+ // There's no way to detect which DNS resolver is being used from our
+ // end, so we need to round up regardless of the supplied timeout.
+ //
+ // https://github.com/curl/curl/blob/4f45240bc84a9aa648c8f7243be7b79e9f9323a5/lib/hostip.c#L606-L609
+ $timeout = max($options['timeout'], 1);
+
+ if (is_int($timeout) || $this->version < self::CURL_7_16_2) {
+ curl_setopt($this->handle, CURLOPT_TIMEOUT, ceil($timeout));
+ }
+ else {
+ curl_setopt($this->handle, CURLOPT_TIMEOUT_MS, round($timeout * 1000));
+ }
+
+ if (is_int($options['connect_timeout']) || $this->version < self::CURL_7_16_2) {
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
+ }
+ else {
+ curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
+ }
+ curl_setopt($this->handle, CURLOPT_URL, $url);
+ curl_setopt($this->handle, CURLOPT_REFERER, $url);
+ curl_setopt($this->handle, CURLOPT_USERAGENT, $options['useragent']);
+ curl_setopt($this->handle, CURLOPT_HTTPHEADER, $headers);
+
+ if ($options['protocol_version'] === 1.1) {
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+ }
+ else {
+ curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+ }
+
+ if (true === $options['blocking']) {
+ curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, array(&$this, 'stream_headers'));
+ curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, array(&$this, 'stream_body'));
+ curl_setopt($this->handle, CURLOPT_BUFFERSIZE, Requests::BUFFER_SIZE);
+ }
+ }
+
+ /**
+ * Process a response
+ *
+ * @param string $response Response data from the body
+ * @param array $options Request options
+ * @return string HTTP response data including headers
+ */
+ public function process_response($response, $options) {
+ if ($options['blocking'] === false) {
+ $fake_headers = '';
+ $options['hooks']->dispatch('curl.after_request', array(&$fake_headers));
+ return false;
+ }
+ if ($options['filename'] !== false) {
+ fclose($this->stream_handle);
+ $this->headers = trim($this->headers);
+ }
+ else {
+ $this->headers .= $response;
+ }
+
+ if (curl_errno($this->handle)) {
+ $error = sprintf(
+ 'cURL error %s: %s',
+ curl_errno($this->handle),
+ curl_error($this->handle)
+ );
+ throw new Requests_Exception($error, 'curlerror', $this->handle);
+ }
+ $this->info = curl_getinfo($this->handle);
+
+ $options['hooks']->dispatch('curl.after_request', array(&$this->headers, &$this->info));
+ return $this->headers;
+ }
+
+ /**
+ * Collect the headers as they are received
+ *
+ * @param resource $handle cURL resource
+ * @param string $headers Header string
+ * @return integer Length of provided header
+ */
+ public function stream_headers($handle, $headers) {
+ // Why do we do this? cURL will send both the final response and any
+ // interim responses, such as a 100 Continue. We don't need that.
+ // (We may want to keep this somewhere just in case)
+ if ($this->done_headers) {
+ $this->headers = '';
+ $this->done_headers = false;
+ }
+ $this->headers .= $headers;
+
+ if ($headers === "\r\n") {
+ $this->done_headers = true;
+ }
+ return strlen($headers);
+ }
+
+ /**
+ * Collect data as it's received
+ *
+ * @since 1.6.1
+ *
+ * @param resource $handle cURL resource
+ * @param string $data Body data
+ * @return integer Length of provided data
+ */
+ protected function stream_body($handle, $data) {
+ $this->hooks->dispatch('request.progress', array($data, $this->response_bytes, $this->response_byte_limit));
+ $data_length = strlen($data);
+
+ // Are we limiting the response size?
+ if ($this->response_byte_limit) {
+ if ($this->response_bytes === $this->response_byte_limit) {
+ // Already at maximum, move on
+ return $data_length;
+ }
+
+ if (($this->response_bytes + $data_length) > $this->response_byte_limit) {
+ // Limit the length
+ $limited_length = ($this->response_byte_limit - $this->response_bytes);
+ $data = substr($data, 0, $limited_length);
+ }
+ }
+
+ if ($this->stream_handle) {
+ fwrite($this->stream_handle, $data);
+ }
+ else {
+ $this->response_data .= $data;
+ }
+
+ $this->response_bytes += strlen($data);
+ return $data_length;
+ }
+
+ /**
+ * Format a URL given GET data
+ *
+ * @param string $url
+ * @param array|object $data Data to build query using, see {@see https://secure.php.net/http_build_query}
+ * @return string URL with data
+ */
+ protected static function format_get($url, $data) {
+ if (!empty($data)) {
+ $url_parts = parse_url($url);
+ if (empty($url_parts['query'])) {
+ $query = $url_parts['query'] = '';
+ }
+ else {
+ $query = $url_parts['query'];
+ }
+
+ $query .= '&' . http_build_query($data, null, '&');
+ $query = trim($query, '&');
+
+ if (empty($url_parts['query'])) {
+ $url .= '?' . $query;
+ }
+ else {
+ $url = str_replace($url_parts['query'], $query, $url);
+ }
+ }
+ return $url;
+ }
+
+ /**
+ * Whether this transport is valid
+ *
+ * @codeCoverageIgnore
+ * @return boolean True if the transport is valid, false otherwise.
+ */
+ public static function test($capabilities = array()) {
+ if (!function_exists('curl_init') && !function_exists('curl_exec')) {
+ return false;
+ }
+
+ // If needed, check that our installed curl version supports SSL
+ if (isset($capabilities['ssl']) && $capabilities['ssl']) {
+ $curl_version = curl_version();
+ if (!(CURL_VERSION_SSL & $curl_version['features'])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/wp-includes/Requests/Transport/fsockopen.php b/wp-includes/Requests/Transport/fsockopen.php
new file mode 100644
index 0000000..e9170f4
--- /dev/null
+++ b/wp-includes/Requests/Transport/fsockopen.php
@@ -0,0 +1,441 @@
+dispatch('fsockopen.before_request');
+
+ $url_parts = parse_url($url);
+ if (empty($url_parts)) {
+ throw new Requests_Exception('Invalid URL.', 'invalidurl', $url);
+ }
+ $host = $url_parts['host'];
+ $context = stream_context_create();
+ $verifyname = false;
+ $case_insensitive_headers = new Requests_Utility_CaseInsensitiveDictionary($headers);
+
+ // HTTPS support
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
+ $remote_socket = 'ssl://' . $host;
+ $url_parts['port'] = 443;
+
+ $context_options = array(
+ 'verify_peer' => true,
+ // 'CN_match' => $host,
+ 'capture_peer_cert' => true
+ );
+ $verifyname = true;
+
+ // SNI, if enabled (OpenSSL >=0.9.8j)
+ if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
+ $context_options['SNI_enabled'] = true;
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
+ $context_options['SNI_enabled'] = false;
+ }
+ }
+
+ if (isset($options['verify'])) {
+ if ($options['verify'] === false) {
+ $context_options['verify_peer'] = false;
+ }
+ elseif (is_string($options['verify'])) {
+ $context_options['cafile'] = $options['verify'];
+ }
+ }
+
+ if (isset($options['verifyname']) && $options['verifyname'] === false) {
+ $verifyname = false;
+ }
+
+ stream_context_set_option($context, array('ssl' => $context_options));
+ }
+ else {
+ $remote_socket = 'tcp://' . $host;
+ }
+
+ $this->max_bytes = $options['max_bytes'];
+
+ if (!isset($url_parts['port'])) {
+ $url_parts['port'] = 80;
+ }
+ $remote_socket .= ':' . $url_parts['port'];
+
+ set_error_handler(array($this, 'connect_error_handler'), E_WARNING | E_NOTICE);
+
+ $options['hooks']->dispatch('fsockopen.remote_socket', array(&$remote_socket));
+
+ $socket = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);
+
+ restore_error_handler();
+
+ if ($verifyname && !$this->verify_certificate_from_context($host, $context)) {
+ throw new Requests_Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
+ }
+
+ if (!$socket) {
+ if ($errno === 0) {
+ // Connection issue
+ throw new Requests_Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
+ }
+
+ throw new Requests_Exception($errstr, 'fsockopenerror', null, $errno);
+ }
+
+ $data_format = $options['data_format'];
+
+ if ($data_format === 'query') {
+ $path = self::format_get($url_parts, $data);
+ $data = '';
+ }
+ else {
+ $path = self::format_get($url_parts, array());
+ }
+
+ $options['hooks']->dispatch('fsockopen.remote_host_path', array(&$path, $url));
+
+ $request_body = '';
+ $out = sprintf("%s %s HTTP/%.1f\r\n", $options['type'], $path, $options['protocol_version']);
+
+ if ($options['type'] !== Requests::TRACE) {
+ if (is_array($data)) {
+ $request_body = http_build_query($data, null, '&');
+ }
+ else {
+ $request_body = $data;
+ }
+
+ if (!empty($data)) {
+ if (!isset($case_insensitive_headers['Content-Length'])) {
+ $headers['Content-Length'] = strlen($request_body);
+ }
+
+ if (!isset($case_insensitive_headers['Content-Type'])) {
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
+ }
+ }
+ }
+
+ if (!isset($case_insensitive_headers['Host'])) {
+ $out .= sprintf('Host: %s', $url_parts['host']);
+
+ if ($url_parts['port'] !== 80) {
+ $out .= ':' . $url_parts['port'];
+ }
+ $out .= "\r\n";
+ }
+
+ if (!isset($case_insensitive_headers['User-Agent'])) {
+ $out .= sprintf("User-Agent: %s\r\n", $options['useragent']);
+ }
+
+ $accept_encoding = $this->accept_encoding();
+ if (!isset($case_insensitive_headers['Accept-Encoding']) && !empty($accept_encoding)) {
+ $out .= sprintf("Accept-Encoding: %s\r\n", $accept_encoding);
+ }
+
+ $headers = Requests::flatten($headers);
+
+ if (!empty($headers)) {
+ $out .= implode($headers, "\r\n") . "\r\n";
+ }
+
+ $options['hooks']->dispatch('fsockopen.after_headers', array(&$out));
+
+ if (substr($out, -2) !== "\r\n") {
+ $out .= "\r\n";
+ }
+
+ if (!isset($case_insensitive_headers['Connection'])) {
+ $out .= "Connection: Close\r\n";
+ }
+
+ $out .= "\r\n" . $request_body;
+
+ $options['hooks']->dispatch('fsockopen.before_send', array(&$out));
+
+ fwrite($socket, $out);
+ $options['hooks']->dispatch('fsockopen.after_send', array($out));
+
+ if (!$options['blocking']) {
+ fclose($socket);
+ $fake_headers = '';
+ $options['hooks']->dispatch('fsockopen.after_request', array(&$fake_headers));
+ return '';
+ }
+
+ $timeout_sec = (int) floor($options['timeout']);
+ if ($timeout_sec == $options['timeout']) {
+ $timeout_msec = 0;
+ }
+ else {
+ $timeout_msec = self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
+ }
+ stream_set_timeout($socket, $timeout_sec, $timeout_msec);
+
+ $response = $body = $headers = '';
+ $this->info = stream_get_meta_data($socket);
+ $size = 0;
+ $doingbody = false;
+ $download = false;
+ if ($options['filename']) {
+ $download = fopen($options['filename'], 'wb');
+ }
+
+ while (!feof($socket)) {
+ $this->info = stream_get_meta_data($socket);
+ if ($this->info['timed_out']) {
+ throw new Requests_Exception('fsocket timed out', 'timeout');
+ }
+
+ $block = fread($socket, Requests::BUFFER_SIZE);
+ if (!$doingbody) {
+ $response .= $block;
+ if (strpos($response, "\r\n\r\n")) {
+ list($headers, $block) = explode("\r\n\r\n", $response, 2);
+ $doingbody = true;
+ }
+ }
+
+ // Are we in body mode now?
+ if ($doingbody) {
+ $options['hooks']->dispatch('request.progress', array($block, $size, $this->max_bytes));
+ $data_length = strlen($block);
+ if ($this->max_bytes) {
+ // Have we already hit a limit?
+ if ($size === $this->max_bytes) {
+ continue;
+ }
+ if (($size + $data_length) > $this->max_bytes) {
+ // Limit the length
+ $limited_length = ($this->max_bytes - $size);
+ $block = substr($block, 0, $limited_length);
+ }
+ }
+
+ $size += strlen($block);
+ if ($download) {
+ fwrite($download, $block);
+ }
+ else {
+ $body .= $block;
+ }
+ }
+ }
+ $this->headers = $headers;
+
+ if ($download) {
+ fclose($download);
+ }
+ else {
+ $this->headers .= "\r\n\r\n" . $body;
+ }
+ fclose($socket);
+
+ $options['hooks']->dispatch('fsockopen.after_request', array(&$this->headers, &$this->info));
+ return $this->headers;
+ }
+
+ /**
+ * Send multiple requests simultaneously
+ *
+ * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
+ * @param array $options Global options, see {@see Requests::response()} for documentation
+ * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
+ */
+ public function request_multiple($requests, $options) {
+ $responses = array();
+ $class = get_class($this);
+ foreach ($requests as $id => $request) {
+ try {
+ $handler = new $class();
+ $responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
+
+ $request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
+ }
+ catch (Requests_Exception $e) {
+ $responses[$id] = $e;
+ }
+
+ if (!is_string($responses[$id])) {
+ $request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
+ }
+ }
+
+ return $responses;
+ }
+
+ /**
+ * Retrieve the encodings we can accept
+ *
+ * @return string Accept-Encoding header value
+ */
+ protected static function accept_encoding() {
+ $type = array();
+ if (function_exists('gzinflate')) {
+ $type[] = 'deflate;q=1.0';
+ }
+
+ if (function_exists('gzuncompress')) {
+ $type[] = 'compress;q=0.5';
+ }
+
+ $type[] = 'gzip;q=0.5';
+
+ return implode(', ', $type);
+ }
+
+ /**
+ * Format a URL given GET data
+ *
+ * @param array $url_parts
+ * @param array|object $data Data to build query using, see {@see https://secure.php.net/http_build_query}
+ * @return string URL with data
+ */
+ protected static function format_get($url_parts, $data) {
+ if (!empty($data)) {
+ if (empty($url_parts['query'])) {
+ $url_parts['query'] = '';
+ }
+
+ $url_parts['query'] .= '&' . http_build_query($data, null, '&');
+ $url_parts['query'] = trim($url_parts['query'], '&');
+ }
+ if (isset($url_parts['path'])) {
+ if (isset($url_parts['query'])) {
+ $get = $url_parts['path'] . '?' . $url_parts['query'];
+ }
+ else {
+ $get = $url_parts['path'];
+ }
+ }
+ else {
+ $get = '/';
+ }
+ return $get;
+ }
+
+ /**
+ * Error handler for stream_socket_client()
+ *
+ * @param int $errno Error number (e.g. E_WARNING)
+ * @param string $errstr Error message
+ */
+ public function connect_error_handler($errno, $errstr) {
+ // Double-check we can handle it
+ if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
+ // Return false to indicate the default error handler should engage
+ return false;
+ }
+
+ $this->connect_error .= $errstr . "\n";
+ return true;
+ }
+
+ /**
+ * Verify the certificate against common name and subject alternative names
+ *
+ * Unfortunately, PHP doesn't check the certificate against the alternative
+ * names, leading things like 'https://www.github.com/' to be invalid.
+ * Instead
+ *
+ * @see https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
+ *
+ * @throws Requests_Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
+ * @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
+ * @param string $host Host name to verify against
+ * @param resource $context Stream context
+ * @return bool
+ */
+ public function verify_certificate_from_context($host, $context) {
+ $meta = stream_context_get_options($context);
+
+ // If we don't have SSL options, then we couldn't make the connection at
+ // all
+ if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
+ throw new Requests_Exception(rtrim($this->connect_error), 'ssl.connect_error');
+ }
+
+ $cert = openssl_x509_parse($meta['ssl']['peer_certificate']);
+
+ return Requests_SSL::verify_certificate($host, $cert);
+ }
+
+ /**
+ * Whether this transport is valid
+ *
+ * @codeCoverageIgnore
+ * @return boolean True if the transport is valid, false otherwise.
+ */
+ public static function test($capabilities = array()) {
+ if (!function_exists('fsockopen')) {
+ return false;
+ }
+
+ // If needed, check that streams support SSL
+ if (isset($capabilities['ssl']) && $capabilities['ssl']) {
+ if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse')) {
+ return false;
+ }
+
+ // Currently broken, thanks to https://github.com/facebook/hhvm/issues/2156
+ if (defined('HHVM_VERSION')) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php b/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php
new file mode 100644
index 0000000..2c97893
--- /dev/null
+++ b/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php
@@ -0,0 +1,103 @@
+ $value) {
+ $this->offsetSet($key, $value);
+ }
+ }
+
+ /**
+ * Check if the given item exists
+ *
+ * @param string $key Item key
+ * @return boolean Does the item exist?
+ */
+ public function offsetExists($key) {
+ $key = strtolower($key);
+ return isset($this->data[$key]);
+ }
+
+ /**
+ * Get the value for the item
+ *
+ * @param string $key Item key
+ * @return string Item value
+ */
+ public function offsetGet($key) {
+ $key = strtolower($key);
+ if (!isset($this->data[$key])) {
+ return null;
+ }
+
+ return $this->data[$key];
+ }
+
+ /**
+ * Set the given item
+ *
+ * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
+ *
+ * @param string $key Item name
+ * @param string $value Item value
+ */
+ public function offsetSet($key, $value) {
+ if ($key === null) {
+ throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
+ }
+
+ $key = strtolower($key);
+ $this->data[$key] = $value;
+ }
+
+ /**
+ * Unset the given header
+ *
+ * @param string $key
+ */
+ public function offsetUnset($key) {
+ unset($this->data[strtolower($key)]);
+ }
+
+ /**
+ * Get an iterator for the data
+ *
+ * @return ArrayIterator
+ */
+ public function getIterator() {
+ return new ArrayIterator($this->data);
+ }
+
+ /**
+ * Get the headers as an array
+ *
+ * @return array Header data
+ */
+ public function getAll() {
+ return $this->data;
+ }
+}
diff --git a/wp-includes/Requests/Utility/FilteredIterator.php b/wp-includes/Requests/Utility/FilteredIterator.php
new file mode 100644
index 0000000..76a29e7
--- /dev/null
+++ b/wp-includes/Requests/Utility/FilteredIterator.php
@@ -0,0 +1,45 @@
+callback = $callback;
+ }
+
+ /**
+ * Get the current item's value after filtering
+ *
+ * @return string
+ */
+ public function current() {
+ $value = parent::current();
+ $value = call_user_func($this->callback, $value);
+ return $value;
+ }
+}
diff --git a/wp-includes/admin-bar.php b/wp-includes/admin-bar.php
index c043aef..b57dfae 100644
--- a/wp-includes/admin-bar.php
+++ b/wp-includes/admin-bar.php
@@ -11,7 +11,7 @@
* Instantiate the admin bar object and set it up as a global for access elsewhere.
*
* UNHOOKING THIS FUNCTION WILL NOT PROPERLY REMOVE THE ADMIN BAR.
- * For that, use show_admin_bar(false) or the 'show_admin_bar' filter.
+ * For that, use show_admin_bar(false) or the {@see 'show_admin_bar'} filter.
*
* @since 3.1.0
* @access private
@@ -32,7 +32,7 @@ function _wp_admin_bar_init() {
/* Instantiate the admin bar */
/**
- * Filter the admin bar class to instantiate.
+ * Filters the admin bar class to instantiate.
*
* @since 3.1.0
*
@@ -51,13 +51,15 @@ function _wp_admin_bar_init() {
}
/**
- * Render the admin bar to the page based on the $wp_admin_bar->menu member var.
- * This is called very late on the footer actions so that it will render after anything else being
- * added to the footer.
+ * Renders the admin bar to the page based on the $wp_admin_bar->menu member var.
*
- * It includes the action "admin_bar_menu" which should be used to hook in and
- * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point,
- * right before the admin bar is rendered. This also gives you access to the $post global, among others.
+ * This is called very late on the footer actions so that it will render after
+ * anything else being added to the footer.
+ *
+ * It includes the {@see 'admin_bar_menu'} action which should be used to hook in and
+ * add new menus to the admin bar. That way you can be sure that you are adding at most
+ * optimal point, right before the admin bar is rendered. This also gives you access to
+ * the `$post` global, among others.
*
* @since 3.1.0
*
@@ -872,9 +874,10 @@ function _admin_bar_bump_cb() { ?>
}
/**
- * Set the display status of the admin bar.
+ * Sets the display status of the admin bar.
*
- * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action.
+ * This can be called immediately upon plugin load. It does not need to be called
+ * from a function hooked to the {@see 'init'} action.
*
* @since 3.1.0
*
@@ -921,7 +924,7 @@ function is_admin_bar_showing() {
}
/**
- * Filter whether to show the admin bar.
+ * Filters whether to show the admin bar.
*
* Returning false to this hook is the recommended way to hide the admin bar.
* The user's display preference is used for logged in users.
diff --git a/wp-includes/atomlib.php b/wp-includes/atomlib.php
index 271635f..368015a 100644
--- a/wp-includes/atomlib.php
+++ b/wp-includes/atomlib.php
@@ -159,7 +159,7 @@ class AtomParser {
function start_element($parser, $name, $attrs) {
- $tag = array_pop(split(":", $name));
+ $tag = array_pop(explode(":", $name));
switch($name) {
case $this->NS . ':feed':
@@ -238,7 +238,7 @@ class AtomParser {
function end_element($parser, $name) {
- $tag = array_pop(split(":", $name));
+ $tag = array_pop(explode(":", $name));
$ccount = count($this->in_content);
@@ -313,7 +313,7 @@ class AtomParser {
function ns_to_prefix($qname, $attr=false) {
# split 'http://www.w3.org/1999/xhtml:div' into ('http','//www.w3.org/1999/xhtml','div')
- $components = split(":", $qname);
+ $components = explode(":", $qname);
# grab the last one (e.g 'div')
$name = array_pop($components);
diff --git a/wp-includes/author-template.php b/wp-includes/author-template.php
index ba609ab..915805f 100644
--- a/wp-includes/author-template.php
+++ b/wp-includes/author-template.php
@@ -24,10 +24,10 @@ function get_the_author($deprecated = '') {
global $authordata;
if ( !empty( $deprecated ) )
- _deprecated_argument( __FUNCTION__, '2.1' );
+ _deprecated_argument( __FUNCTION__, '2.1.0' );
/**
- * Filter the display name of the current post's author.
+ * Filters the display name of the current post's author.
*
* @since 2.9.0
*
@@ -45,7 +45,7 @@ function get_the_author($deprecated = '') {
* still use the old behavior will also pass the value from get_the_author().
*
* The normal, expected behavior of this function is to echo the author and not
- * return it. However, backwards compatibility has to be maintained.
+ * return it. However, backward compatibility has to be maintained.
*
* @since 0.71
* @see get_the_author()
@@ -57,11 +57,11 @@ function get_the_author($deprecated = '') {
*/
function the_author( $deprecated = '', $deprecated_echo = true ) {
if ( ! empty( $deprecated ) ) {
- _deprecated_argument( __FUNCTION__, '2.1' );
+ _deprecated_argument( __FUNCTION__, '2.1.0' );
}
if ( true !== $deprecated_echo ) {
- _deprecated_argument( __FUNCTION__, '1.5',
+ _deprecated_argument( __FUNCTION__, '1.5.0',
/* translators: %s: get_the_author() */
sprintf( __( 'Use %s instead if you do not want the value echoed.' ),
'get_the_author()'
@@ -88,7 +88,7 @@ function get_the_modified_author() {
$last_user = get_userdata($last_id);
/**
- * Filter the display name of the author who last edited the current post.
+ * Filters the display name of the author who last edited the current post.
*
* @since 2.8.0
*
@@ -137,7 +137,7 @@ function get_the_author_meta( $field = '', $user_id = false ) {
$value = isset( $authordata->$field ) ? $authordata->$field : '';
/**
- * Filter the value of the requested user metadata.
+ * Filters the value of the requested user metadata.
*
* The filter name is dynamic and depends on the $field parameter of the function.
*
@@ -258,7 +258,7 @@ function get_the_author_posts_link() {
);
/**
- * Filter the link to the author page of the author of the current post.
+ * Filters the link to the author page of the author of the current post.
*
* @since 2.9.0
*
@@ -277,7 +277,7 @@ function get_the_author_posts_link() {
*/
function the_author_posts_link( $deprecated = '' ) {
if ( ! empty( $deprecated ) ) {
- _deprecated_argument( __FUNCTION__, '2.1' );
+ _deprecated_argument( __FUNCTION__, '2.1.0' );
}
echo get_the_author_posts_link();
}
@@ -312,7 +312,7 @@ function get_author_posts_url( $author_id, $author_nicename = '' ) {
}
/**
- * Filter the URL to the author's page.
+ * Filters the URL to the author's page.
*
* @since 2.1.0
*
@@ -337,26 +337,26 @@ function get_author_posts_url( $author_id, $author_nicename = '' ) {
* @param string|array $args {
* Optional. Array or string of default arguments.
*
- * @type string $orderby How to sort the authors. Accepts 'nicename', 'email', 'url', 'registered',
- * 'user_nicename', 'user_email', 'user_url', 'user_registered', 'name',
- * 'display_name', 'post_count', 'ID', 'meta_value', 'user_login'. Default 'name'.
- * @type string $order Sorting direction for $orderby. Accepts 'ASC', 'DESC'. Default 'ASC'.
- * @type int $number Maximum authors to return or display. Default empty (all authors).
- * @type bool $optioncount Show the count in parenthesis next to the author's name. Default false.
- * @type bool $exclude_admin Whether to exclude the 'admin' account, if it exists. Default false.
- * @type bool $show_fullname Whether to show the author's full name. Default false.
- * @type bool $hide_empty Whether to hide any authors with no posts. Default true.
- * @type string $feed If not empty, show a link to the author's feed and use this text as the alt
- * parameter of the link. Default empty.
- * @type string $feed_image If not empty, show a link to the author's feed and use this image URL as
- * clickable anchor. Default empty.
- * @type string $feed_type The feed type to link to, such as 'rss2'. Defaults to default feed type.
- * @type bool $echo Whether to output the result or instead return it. Default true.
- * @type string $style If 'list', each author is wrapped in an `
` element, otherwise the authors
- * will be separated by commas.
- * @type bool $html Whether to list the items in HTML form or plaintext. Default true.
- * @type string $exclude An array, comma-, or space-separated list of author IDs to exclude. Default empty.
- * @type string $exclude An array, comma-, or space-separated list of author IDs to include. Default empty.
+ * @type string $orderby How to sort the authors. Accepts 'nicename', 'email', 'url', 'registered',
+ * 'user_nicename', 'user_email', 'user_url', 'user_registered', 'name',
+ * 'display_name', 'post_count', 'ID', 'meta_value', 'user_login'. Default 'name'.
+ * @type string $order Sorting direction for $orderby. Accepts 'ASC', 'DESC'. Default 'ASC'.
+ * @type int $number Maximum authors to return or display. Default empty (all authors).
+ * @type bool $optioncount Show the count in parenthesis next to the author's name. Default false.
+ * @type bool $exclude_admin Whether to exclude the 'admin' account, if it exists. Default false.
+ * @type bool $show_fullname Whether to show the author's full name. Default false.
+ * @type bool $hide_empty Whether to hide any authors with no posts. Default true.
+ * @type string $feed If not empty, show a link to the author's feed and use this text as the alt
+ * parameter of the link. Default empty.
+ * @type string $feed_image If not empty, show a link to the author's feed and use this image URL as
+ * clickable anchor. Default empty.
+ * @type string $feed_type The feed type to link to, such as 'rss2'. Defaults to default feed type.
+ * @type bool $echo Whether to output the result or instead return it. Default true.
+ * @type string $style If 'list', each author is wrapped in an `
` element, otherwise the authors
+ * will be separated by commas.
+ * @type bool $html Whether to list the items in HTML form or plaintext. Default true.
+ * @type array|string $exclude Array or comma/space-separated list of author IDs to exclude. Default empty.
+ * @type array|string $include Array or comma/space-separated list of author IDs to include. Default empty.
* }
* @return string|void The output, if echo is set to false.
*/
@@ -480,7 +480,7 @@ function is_multi_author() {
}
/**
- * Filter whether the site has more than one author with published posts.
+ * Filters whether the site has more than one author with published posts.
*
* @since 3.2.0
*
diff --git a/wp-includes/bookmark-template.php b/wp-includes/bookmark-template.php
index 47bfb4a..c6b7fd2 100644
--- a/wp-includes/bookmark-template.php
+++ b/wp-includes/bookmark-template.php
@@ -248,7 +248,7 @@ function wp_list_bookmarks( $args = '' ) {
$r['category_before']
);
/**
- * Filter the bookmarks category name.
+ * Filters the bookmarks category name.
*
* @since 2.2.0
*
@@ -289,7 +289,7 @@ function wp_list_bookmarks( $args = '' ) {
}
/**
- * Filter the bookmarks list before it is echoed or returned.
+ * Filters the bookmarks list before it is echoed or returned.
*
* @since 2.5.0
*
diff --git a/wp-includes/bookmark.php b/wp-includes/bookmark.php
index 140f5fd..fc719d5 100644
--- a/wp-includes/bookmark.php
+++ b/wp-includes/bookmark.php
@@ -128,11 +128,12 @@ function get_bookmarks( $args = '' ) {
$r = wp_parse_args( $args, $defaults );
$key = md5( serialize( $r ) );
- if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {
+ $cache = false;
+ if ( 'rand' !== $r['orderby'] && $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {
if ( is_array( $cache ) && isset( $cache[ $key ] ) ) {
$bookmarks = $cache[ $key ];
/**
- * Filter the returned list of bookmarks.
+ * Filters the returned list of bookmarks.
*
* The first time the hook is evaluated in this file, it returns the cached
* bookmarks list. The second evaluation returns a cached bookmarks list if the
@@ -285,8 +286,10 @@ function get_bookmarks( $args = '' ) {
$results = $wpdb->get_results( $query );
- $cache[ $key ] = $results;
- wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
+ if ( 'rand()' !== $orderby ) {
+ $cache[ $key ] = $results;
+ wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
+ }
/** This filter is documented in wp-includes/bookmark.php */
return apply_filters( 'get_bookmarks', $results, $r );
@@ -329,30 +332,30 @@ function sanitize_bookmark($bookmark, $context = 'display') {
}
/**
- * Sanitizes a bookmark field
+ * Sanitizes a bookmark field.
*
* Sanitizes the bookmark fields based on what the field name is. If the field
* has a strict value set, then it will be tested for that, else a more generic
- * filtering is applied. After the more strict filter is applied, if the
- * $context is 'raw' then the value is immediately return.
+ * filtering is applied. After the more strict filter is applied, if the `$context`
+ * is 'raw' then the value is immediately return.
*
- * Hooks exist for the more generic cases. With the 'edit' context, the
- * 'edit_$field' filter will be called and passed the $value and $bookmark_id
- * respectively. With the 'db' context, the 'pre_$field' filter is called and
- * passed the value. The 'display' context is the final context and has the
- * $field has the filter name and is passed the $value, $bookmark_id, and
- * $context respectively.
+ * Hooks exist for the more generic cases. With the 'edit' context, the {@see 'edit_$field'}
+ * filter will be called and passed the `$value` and `$bookmark_id` respectively.
+ *
+ * With the 'db' context, the {@see 'pre_$field'} filter is called and passed the value.
+ * The 'display' context is the final context and has the `$field` has the filter name
+ * and is passed the `$value`, `$bookmark_id`, and `$context`, respectively.
*
* @since 2.3.0
*
- * @param string $field The bookmark field
- * @param mixed $value The bookmark field value
- * @param int $bookmark_id Bookmark ID
- * @param string $context How to filter the field value. Either 'raw', 'edit',
- * 'attribute', 'js', 'db', or 'display'
- * @return mixed The filtered value
+ * @param string $field The bookmark field.
+ * @param mixed $value The bookmark field value.
+ * @param int $bookmark_id Bookmark ID.
+ * @param string $context How to filter the field value. Accepts 'raw', 'edit', 'attribute',
+ * 'js', 'db', or 'display'
+ * @return mixed The filtered value.
*/
-function sanitize_bookmark_field($field, $value, $bookmark_id, $context) {
+function sanitize_bookmark_field( $field, $value, $bookmark_id, $context ) {
switch ( $field ) {
case 'link_id' : // ints
case 'link_rating' :
diff --git a/wp-includes/cache.php b/wp-includes/cache.php
index a1a6e6c..6c53eab 100644
--- a/wp-includes/cache.php
+++ b/wp-includes/cache.php
@@ -2,7 +2,7 @@
/**
* Object Cache API
*
- * @link https://codex.wordpress.org/Function_Reference/WP_Cache
+ * @link https://codex.wordpress.org/Class_Reference/WP_Object_Cache
*
* @package WordPress
* @subpackage Cache
@@ -200,7 +200,7 @@ function wp_cache_set( $key, $data, $group = '', $expire = 0 ) {
}
/**
- * Switches the interal blog ID.
+ * Switches the internal blog ID.
*
* This changes the blog id used to create keys in blog specific groups.
*
@@ -264,7 +264,7 @@ function wp_cache_add_non_persistent_groups( $groups ) {
* @global WP_Object_Cache $wp_object_cache Object cache global instance.
*/
function wp_cache_reset() {
- _deprecated_function( __FUNCTION__, '3.5' );
+ _deprecated_function( __FUNCTION__, '3.5.0' );
global $wp_object_cache;
@@ -344,7 +344,7 @@ class WP_Object_Cache {
private $multisite;
/**
- * Makes private properties readable for backwards compatibility.
+ * Makes private properties readable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -357,7 +357,7 @@ class WP_Object_Cache {
}
/**
- * Makes private properties settable for backwards compatibility.
+ * Makes private properties settable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -371,7 +371,7 @@ class WP_Object_Cache {
}
/**
- * Makes private properties checkable for backwards compatibility.
+ * Makes private properties checkable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -384,7 +384,7 @@ class WP_Object_Cache {
}
/**
- * Makes private properties un-settable for backwards compatibility.
+ * Makes private properties un-settable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -631,7 +631,7 @@ class WP_Object_Cache {
* @see switch_to_blog()
*/
public function reset() {
- _deprecated_function( __FUNCTION__, '3.5', 'switch_to_blog()' );
+ _deprecated_function( __FUNCTION__, '3.5.0', 'switch_to_blog()' );
// Clear out non-global caches since the blog ID has changed.
foreach ( array_keys( $this->cache ) as $group ) {
@@ -697,7 +697,7 @@ class WP_Object_Cache {
}
/**
- * Switches the interal blog ID.
+ * Switches the internal blog ID.
*
* This changes the blog ID used to create keys in blog specific groups.
*
diff --git a/wp-includes/canonical.php b/wp-includes/canonical.php
index 87afcce..11c513d 100644
--- a/wp-includes/canonical.php
+++ b/wp-includes/canonical.php
@@ -256,9 +256,9 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
}
} elseif ( is_single() && strpos($wp_rewrite->permalink_structure, '%category%') !== false && $cat = get_query_var( 'category_name' ) ) {
$category = get_category_by_path( $cat );
- $post_terms = wp_get_object_terms($wp_query->get_queried_object_id(), 'category', array('fields' => 'tt_ids'));
- if ( (!$category || is_wp_error($category)) || ( !is_wp_error($post_terms) && !empty($post_terms) && !in_array($category->term_taxonomy_id, $post_terms) ) )
+ if ( ( ! $category || is_wp_error( $category ) ) || ! has_term( $category->term_id, 'category', $wp_query->get_queried_object_id() ) ) {
$redirect_url = get_permalink($wp_query->get_queried_object_id());
+ }
}
// Post Paging
@@ -477,6 +477,15 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
// Hex encoded octets are case-insensitive.
if ( false !== strpos($requested_url, '%') ) {
if ( !function_exists('lowercase_octets') ) {
+ /**
+ * Converts the first hex-encoded octet match to lowercase.
+ *
+ * @since 3.1.0
+ * @ignore
+ *
+ * @param array $matches Hex-encoded octet matches for the requested URL.
+ * @return string Lowercased version of the first match.
+ */
function lowercase_octets($matches) {
return strtolower( $matches[0] );
}
@@ -485,7 +494,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
}
/**
- * Filter the canonical redirect URL.
+ * Filters the canonical redirect URL.
*
* Returning false to this filter will cancel the redirect.
*
diff --git a/wp-includes/capabilities.php b/wp-includes/capabilities.php
index 9ed3447..eac3596 100644
--- a/wp-includes/capabilities.php
+++ b/wp-includes/capabilities.php
@@ -243,16 +243,18 @@ function map_meta_cap( $cap, $user_id ) {
break;
}
+ $post_type = get_post_type( $post );
+
$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
$meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false;
- if ( $meta_key && has_filter( "auth_post_meta_{$meta_key}" ) ) {
+ if ( $meta_key && ( has_filter( "auth_post_meta_{$meta_key}" ) || has_filter( "auth_post_{$post_type}_meta_{$meta_key}" ) ) ) {
/**
- * Filter whether the user is allowed to add post meta to a post.
+ * Filters whether the user is allowed to add post meta to a post.
*
* The dynamic portion of the hook name, `$meta_key`, refers to the
- * meta key passed to {@see map_meta_cap()}.
+ * meta key passed to map_meta_cap().
*
* @since 3.3.0
*
@@ -264,6 +266,24 @@ function map_meta_cap( $cap, $user_id ) {
* @param array $caps User capabilities.
*/
$allowed = apply_filters( "auth_post_meta_{$meta_key}", false, $meta_key, $post->ID, $user_id, $cap, $caps );
+
+ /**
+ * Filters whether the user is allowed to add post meta to a post of a given type.
+ *
+ * The dynamic portions of the hook name, `$meta_key` and `$post_type`,
+ * refer to the meta key passed to map_meta_cap() and the post type, respectively.
+ *
+ * @since 4.6.0
+ *
+ * @param bool $allowed Whether the user can add the post meta. Default false.
+ * @param string $meta_key The meta key.
+ * @param int $post_id Post ID.
+ * @param int $user_id User ID.
+ * @param string $cap Capability name.
+ * @param array $caps User capabilities.
+ */
+ $allowed = apply_filters( "auth_post_{$post_type}_meta_{$meta_key}", $allowed, $meta_key, $post->ID, $user_id, $cap, $caps );
+
if ( ! $allowed )
$caps[] = $cap;
} elseif ( $meta_key && is_protected_meta( $meta_key, 'post' ) ) {
@@ -390,7 +410,7 @@ function map_meta_cap( $cap, $user_id ) {
}
/**
- * Filter a user's capabilities depending on specific context and/or privilege.
+ * Filters a user's capabilities depending on specific context and/or privilege.
*
* @since 2.8.0
*
@@ -619,3 +639,99 @@ function is_super_admin( $user_id = false ) {
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 ) ) {
+ $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' ) ) ) {
+ if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) {
+ 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;
+}
diff --git a/wp-includes/category-template.php b/wp-includes/category-template.php
index 35d6c82..7063c2d 100644
--- a/wp-includes/category-template.php
+++ b/wp-includes/category-template.php
@@ -74,7 +74,7 @@ function get_category_parents( $id, $link = false, $separator = '/', $nicename =
* @since 0.71
*
* @param int $id Optional, default to current post ID. The post ID.
- * @return array Array of objects, one for each category assigned to the post.
+ * @return array Array of WP_Term objects, one for each category assigned to the post.
*/
function get_the_category( $id = false ) {
$categories = get_the_terms( $id, 'category' );
@@ -88,7 +88,7 @@ function get_the_category( $id = false ) {
}
/**
- * Filter the array of categories to return for a post.
+ * Filters the array of categories to return for a post.
*
* @since 3.1.0
* @since 4.4.0 Added `$id` parameter.
@@ -176,7 +176,7 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false )
}
/**
- * Filter the categories before building the category list.
+ * Filters the categories before building the category list.
*
* @since 4.4.0
*
@@ -242,7 +242,7 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false )
}
/**
- * Filter the category or list of categories.
+ * Filters the category or list of categories.
*
* @since 1.2.0
*
@@ -314,6 +314,7 @@ function category_description( $category = 0 ) {
*
* @since 2.1.0
* @since 4.2.0 Introduced the `value_field` argument.
+ * @since 4.6.0 Introduced the `required` argument.
*
* @param string|array $args {
* Optional. Array or string of arguments to generate a categories drop-down element.
@@ -351,22 +352,34 @@ function category_description( $category = 0 ) {
* @type string|array $taxonomy Name of the category or categories to retrieve. Default 'category'.
* @type bool $hide_if_empty True to skip generating markup if no categories are found.
* Default false (create select element even if no categories are found).
+ * @type bool $required Whether the `` element should have the HTML5 'required' attribute.
+ * Default false.
* }
* @return string HTML content only if 'echo' argument is 0.
*/
function wp_dropdown_categories( $args = '' ) {
$defaults = array(
- 'show_option_all' => '', 'show_option_none' => '',
- 'orderby' => 'id', 'order' => 'ASC',
- 'show_count' => 0,
- 'hide_empty' => 1, 'child_of' => 0,
- 'exclude' => '', 'echo' => 1,
- 'selected' => 0, 'hierarchical' => 0,
- 'name' => 'cat', 'id' => '',
- 'class' => 'postform', 'depth' => 0,
- 'tab_index' => 0, 'taxonomy' => 'category',
- 'hide_if_empty' => false, 'option_none_value' => -1,
- 'value_field' => 'term_id',
+ 'show_option_all' => '',
+ 'show_option_none' => '',
+ 'orderby' => 'id',
+ 'order' => 'ASC',
+ 'show_count' => 0,
+ 'hide_empty' => 1,
+ 'child_of' => 0,
+ 'exclude' => '',
+ 'echo' => 1,
+ 'selected' => 0,
+ 'hierarchical' => 0,
+ 'name' => 'cat',
+ 'id' => '',
+ 'class' => 'postform',
+ 'depth' => 0,
+ 'tab_index' => 0,
+ 'taxonomy' => 'category',
+ 'hide_if_empty' => false,
+ 'option_none_value' => -1,
+ 'value_field' => 'term_id',
+ 'required' => false,
);
$defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;
@@ -374,7 +387,7 @@ function wp_dropdown_categories( $args = '' ) {
// Back compat.
if ( isset( $args['type'] ) && 'link' == $args['type'] ) {
/* translators: 1: "type => link", 2: "taxonomy => link_category" alternative */
- _deprecated_argument( __FUNCTION__, '3.0',
+ _deprecated_argument( __FUNCTION__, '3.0.0',
sprintf( __( '%1$s is deprecated. Use %2$s instead.' ),
'type => link',
'taxonomy => link_category'
@@ -405,16 +418,17 @@ function wp_dropdown_categories( $args = '' ) {
$name = esc_attr( $r['name'] );
$class = esc_attr( $r['class'] );
$id = $r['id'] ? esc_attr( $r['id'] ) : $name;
+ $required = $r['required'] ? 'required' : '';
if ( ! $r['hide_if_empty'] || ! empty( $categories ) ) {
- $output = "\n";
+ $output = "\n";
} else {
$output = '';
}
if ( empty( $categories ) && ! $r['hide_if_empty'] && ! empty( $r['show_option_none'] ) ) {
/**
- * Filter a taxonomy drop-down display element.
+ * Filters a taxonomy drop-down display element.
*
* A variety of taxonomy drop-down display elements can be modified
* just prior to display via this filter. Filterable arguments include
@@ -461,7 +475,7 @@ function wp_dropdown_categories( $args = '' ) {
$output .= "\n";
}
/**
- * Filter the taxonomy drop-down output.
+ * Filters the taxonomy drop-down output.
*
* @since 2.1.0
*
@@ -486,41 +500,44 @@ function wp_dropdown_categories( $args = '' ) {
* @param string|array $args {
* Array of optional arguments.
*
+ * @type int $child_of Term ID to retrieve child terms of. See get_terms(). Default 0.
+ * @type int|array $current_category ID of category, or array of IDs of categories, that should get the
+ * 'current-cat' class. Default 0.
+ * @type int $depth Category depth. Used for tab indentation. Default 0.
+ * @type bool|int $echo True to echo markup, false to return it. Default 1.
+ * @type array|string $exclude Array or comma/space-separated string of term IDs to exclude.
+ * If `$hierarchical` is true, descendants of `$exclude` terms will also
+ * be excluded; see `$exclude_tree`. See get_terms().
+ * Default empty string.
+ * @type array|string $exclude_tree Array or comma/space-separated string of term IDs to exclude, along
+ * with their descendants. See get_terms(). Default empty string.
+ * @type string $feed Text to use for the feed link. Default 'Feed for all posts filed
+ * under [cat name]'.
+ * @type string $feed_image URL of an image to use for the feed link. Default empty string.
+ * @type string $feed_type Feed type. Used to build feed link. See get_term_feed_link().
+ * Default empty string (default feed).
+ * @type bool|int $hide_empty Whether to hide categories that don't have any posts attached to them.
+ * Default 1.
+ * @type bool $hide_title_if_empty Whether to hide the `$title_li` element if there are no terms in
+ * the list. Default false (title will always be shown).
+ * @type bool $hierarchical Whether to include terms that have non-empty descendants.
+ * See get_terms(). Default true.
+ * @type string $order Which direction to order categories. Accepts 'ASC' or 'DESC'.
+ * Default 'ASC'.
+ * @type string $orderby The column to use for ordering categories. Default 'ID'.
+ * @type string $separator Separator between links. Default ' '.
+ * @type bool|int $show_count Whether to show how many posts are in the category. Default 0.
* @type string $show_option_all Text to display for showing all categories. Default empty string.
* @type string $show_option_none Text to display for the 'no categories' option.
* Default 'No categories'.
- * @type string $orderby The column to use for ordering categories. Default 'ID'.
- * @type string $order Which direction to order categories. Accepts 'ASC' or 'DESC'.
- * Default 'ASC'.
- * @type bool|int $show_count Whether to show how many posts are in the category. Default 0.
- * @type bool|int $hide_empty Whether to hide categories that don't have any posts attached to them.
- * Default 1.
- * @type bool|int $use_desc_for_title Whether to use the category description as the title attribute.
- * Default 1.
- * @type string $feed Text to use for the feed link. Default 'Feed for all posts filed
- * under [cat name]'.
- * @type string $feed_type Feed type. Used to build feed link. See {@link get_term_feed_link()}.
- * Default empty string (default feed).
- * @type string $feed_image URL of an image to use for the feed link. Default empty string.
- * @type int $child_of Term ID to retrieve child terms of. See {@link get_terms()}. Default 0.
- * @type array|string $exclude Array or comma/space-separated string of term IDs to exclude.
- * If `$hierarchical` is true, descendants of `$exclude` terms will also
- * be excluded; see `$exclude_tree`. See {@link get_terms()}.
- * Default empty string.
- * @type array|string $exclude_tree Array or comma/space-separated string of term IDs to exclude, along
- * with their descendants. See {@link get_terms()}. Default empty string.
- * @type bool|int $echo True to echo markup, false to return it. Default 1.
- * @type int|array $current_category ID of category, or array of IDs of categories, that should get the
- * 'current-cat' class. Default 0.
- * @type bool $hierarchical Whether to include terms that have non-empty descendants.
- * See {@link get_terms()}. Default true.
+ * @type string $style The style used to display the categories list. If 'list', categories
+ * will be output as an unordered list. If left empty or another value,
+ * categories will be output separated by ` ` tags. Default 'list'.
+ * @type string $taxonomy Taxonomy name. Default 'category'.
* @type string $title_li Text to use for the list title `
';
/**
- * Filter the HTML output of a taxonomy list.
+ * Filters the HTML output of a taxonomy list.
*
* @since 2.1.0
*
@@ -691,9 +708,8 @@ function wp_list_categories( $args = '' ) {
* The 'post_type' argument is used only when 'link' is set to 'edit'. It determines the post_type
* passed to edit.php for the popular tags edit links.
*
- * The 'exclude' and 'include' arguments are used for the {@link get_tags()}
- * function. Only one should be used, because only one will be used and the
- * other ignored, if they are both set.
+ * The 'exclude' and 'include' arguments are used for the get_tags() function. Only one
+ * should be used, because only one will be used and the other ignored, if they are both set.
*
* @since 2.3.0
*
@@ -729,7 +745,7 @@ function wp_tag_cloud( $args = '' ) {
$return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
/**
- * Filter the tag cloud output.
+ * Filters the tag cloud output.
*
* @since 2.3.0
*
@@ -757,35 +773,44 @@ function default_topic_count_scale( $count ) {
/**
* Generates a tag cloud (heatmap) from provided data.
*
- * The text size is set by the 'smallest' and 'largest' arguments, which will
- * use the 'unit' argument value for the CSS text size unit. The 'format'
- * argument can be 'flat' (default), 'list', or 'array'. The flat value for the
- * 'format' argument will separate tags with spaces. The list value for the
- * 'format' argument will format the tags in a UL HTML list. The array value for
- * the 'format' argument will return in PHP array type format.
- *
- * The 'tag_cloud_sort' filter allows you to override the sorting.
- * Passed to the filter: $tags array and $args array, has to return the $tags array
- * after sorting it.
- *
- * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.
- * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or
- * 'RAND'.
- *
- * The 'number' argument is how many tags to return. By default, the limit will
- * be to return the entire tag cloud list.
- *
- * The 'topic_count_text' argument is a nooped plural from _n_noop() to generate the
- * text for the tooltip of the tag link.
- *
- * The 'topic_count_text_callback' argument is a function, which given the count
- * of the posts with that tag returns a text for the tooltip of the tag link.
- *
* @todo Complete functionality.
* @since 2.3.0
*
* @param array $tags List of tags.
- * @param string|array $args Optional, override default arguments.
+ * @param string|array $args {
+ * Optional. Array of string of arguments for generating a tag cloud.
+ *
+ * @type int $smallest Smallest font size used to display tags. Paired
+ * with the value of `$unit`, to determine CSS text
+ * size unit. Default 8 (pt).
+ * @type int $largest Largest font size used to display tags. Paired
+ * with the value of `$unit`, to determine CSS text
+ * size unit. Default 22 (pt).
+ * @type string $unit CSS text size unit to use with the `$smallest`
+ * and `$largest` values. Accepts any valid CSS text
+ * size unit. Default 'pt'.
+ * @type int $number The number of tags to return. Accepts any
+ * positive integer or zero to return all.
+ * Default 0.
+ * @type string $format Format to display the tag cloud in. Accepts 'flat'
+ * (tags separated with spaces), 'list' (tags displayed
+ * in an unordered list), or 'array' (returns an array).
+ * Default 'flat'.
+ * @type string $separator HTML or text to separate the tags. Default "\n" (newline).
+ * @type string $orderby Value to order tags by. Accepts 'name' or 'count'.
+ * Default 'name'. The {@see 'tag_cloud_sort'} filter
+ * can also affect how tags are sorted.
+ * @type string $order How to order the tags. Accepts 'ASC' (ascending),
+ * 'DESC' (descending), or 'RAND' (random). Default 'ASC'.
+ * @type int|bool $filter Whether to enable filtering of the final output
+ * via {@see 'wp_generate_tag_cloud'}. Default 1|true.
+ * @type string $topic_count_text Nooped plural text from _n_noop() to supply to
+ * tag tooltips. Default null.
+ * @type callable $topic_count_text_callback Callback used to generate nooped plural text for
+ * tag tooltips based on the count. Default null.
+ * @type callable $topic_count_scale_callback Callback used to determine the tag count scaling
+ * value. Default default_topic_count_scale().
+ * }
* @return string|array Tag cloud as a string or an array, depending on 'format' argument.
*/
function wp_generate_tag_cloud( $tags, $args = '' ) {
@@ -824,7 +849,7 @@ function wp_generate_tag_cloud( $tags, $args = '' ) {
}
/**
- * Filter how the items in a tag cloud are sorted.
+ * Filters how the items in a tag cloud are sorted.
*
* @since 2.8.0
*
@@ -902,7 +927,7 @@ function wp_generate_tag_cloud( $tags, $args = '' ) {
}
/**
- * Filter the data used to generate the tag cloud.
+ * Filters the data used to generate the tag cloud.
*
* @since 4.3.0
*
@@ -934,7 +959,7 @@ function wp_generate_tag_cloud( $tags, $args = '' ) {
if ( $args['filter'] ) {
/**
- * Filter the generated output of a tag cloud.
+ * Filters the generated output of a tag cloud.
*
* The filter is only evaluated if a true value is passed
* to the $filter argument in wp_generate_tag_cloud().
@@ -1067,7 +1092,7 @@ function get_tag_link( $tag ) {
function get_the_tags( $id = 0 ) {
/**
- * Filter the array of tags for the given post.
+ * Filters the array of tags for the given post.
*
* @since 2.3.0
*
@@ -1092,7 +1117,7 @@ function get_the_tags( $id = 0 ) {
function get_the_tag_list( $before = '', $sep = '', $after = '', $id = 0 ) {
/**
- * Filter the tags list for a given post.
+ * Filters the tags list for a given post.
*
* @since 2.3.0
*
@@ -1160,7 +1185,7 @@ function term_description( $term = 0, $taxonomy = 'post_tag' ) {
*
* @param int|object $post Post ID or object.
* @param string $taxonomy Taxonomy name.
- * @return array|false|WP_Error Array of term objects on success, false if there are no terms
+ * @return array|false|WP_Error Array of WP_Term objects on success, false if there are no terms
* or the post does not exist, WP_Error on failure.
*/
function get_the_terms( $post, $taxonomy ) {
@@ -1171,20 +1196,13 @@ function get_the_terms( $post, $taxonomy ) {
if ( false === $terms ) {
$terms = wp_get_object_terms( $post->ID, $taxonomy );
if ( ! is_wp_error( $terms ) ) {
- $to_cache = array();
- foreach ( $terms as $key => $term ) {
- $to_cache[ $key ] = $term->data;
- }
- wp_cache_add( $post->ID, $to_cache, $taxonomy . '_relationships' );
+ $term_ids = wp_list_pluck( $terms, 'term_id' );
+ wp_cache_add( $post->ID, $term_ids, $taxonomy . '_relationships' );
}
}
- if ( ! is_wp_error( $terms ) ) {
- $terms = array_map( 'get_term', $terms );
- }
-
/**
- * Filter the list of terms attached to the given post.
+ * Filters the list of terms attached to the given post.
*
* @since 3.1.0
*
@@ -1232,7 +1250,7 @@ function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = ''
}
/**
- * Filter the term links for a given taxonomy.
+ * Filters the term links for a given taxonomy.
*
* The dynamic portion of the filter name, `$taxonomy`, refers
* to the taxonomy slug.
@@ -1265,7 +1283,7 @@ function the_terms( $id, $taxonomy, $before = '', $sep = ', ', $after = '' ) {
return false;
/**
- * Filter the list of terms to display.
+ * Filters the list of terms to display.
*
* @since 2.9.0
*
diff --git a/wp-includes/category.php b/wp-includes/category.php
index a89b410..08d18c0 100644
--- a/wp-includes/category.php
+++ b/wp-includes/category.php
@@ -10,14 +10,14 @@
* Retrieve list of category objects.
*
* If you change the type to 'link' in the arguments, then the link categories
- * will be returned instead. Also all categories will be updated to be backwards
+ * will be returned instead. Also all categories will be updated to be backward
* compatible with pre-2.3 plugins and themes.
*
* @since 2.1.0
* @see get_terms() Type of arguments that can be changed.
*
* @param string|array $args {
- * Optional. Arguments to retrieve categories. See {@see get_terms()} for additional options.
+ * Optional. Arguments to retrieve categories. See get_terms() for additional options.
*
* @type string $taxonomy Taxonomy to retrieve terms for. In this case, default 'category'.
* }
@@ -30,19 +30,19 @@ function get_categories( $args = '' ) {
$taxonomy = $args['taxonomy'];
/**
- * Filter the taxonomy used to retrieve terms when calling {@see get_categories()}.
+ * Filters the taxonomy used to retrieve terms when calling get_categories().
*
* @since 2.7.0
*
* @param string $taxonomy Taxonomy to retrieve terms from.
- * @param array $args An array of arguments. See {@see get_terms()}.
+ * @param array $args An array of arguments. See get_terms().
*/
$taxonomy = apply_filters( 'get_categories_taxonomy', $taxonomy, $args );
// Back compat
if ( isset($args['type']) && 'link' == $args['type'] ) {
/* translators: 1: "type => link", 2: "taxonomy => link_category" alternative */
- _deprecated_argument( __FUNCTION__, '3.0',
+ _deprecated_argument( __FUNCTION__, '3.0.0',
sprintf( __( '%1$s is deprecated. Use %2$s instead.' ),
'type => link',
'taxonomy => link_category'
@@ -77,7 +77,7 @@ function get_categories( $args = '' ) {
* If you look at get_term(), then both types will be passed through several
* filters and finally sanitized based on the $filter parameter value.
*
- * The category will converted to maintain backwards compatibility.
+ * The category will converted to maintain backward compatibility.
*
* @since 1.5.1
*
@@ -271,7 +271,7 @@ function get_tags( $args = '' ) {
}
/**
- * Filter the array of term objects returned for the 'post_tag' taxonomy.
+ * Filters the array of term objects returned for the 'post_tag' taxonomy.
*
* @since 2.3.0
*
diff --git a/wp-includes/certificates/ca-bundle.crt b/wp-includes/certificates/ca-bundle.crt
index 6031cc6..2ae3a97 100644
--- a/wp-includes/certificates/ca-bundle.crt
+++ b/wp-includes/certificates/ca-bundle.crt
@@ -3,7 +3,7 @@
##
## Certificate data from Mozilla as of: Wed Sep 16 08:58:11 2015
## Includes a WordPress Modification - We include the 'legacy' 1024bit certificates
-## for backwards compatibility. See https://core.trac.wordpress.org/ticket/34935#comment:10
+## for backward compatibility. See https://core.trac.wordpress.org/ticket/34935#comment:10
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
diff --git a/wp-includes/class-IXR.php b/wp-includes/class-IXR.php
index 2fee046..a8e3198 100644
--- a/wp-includes/class-IXR.php
+++ b/wp-includes/class-IXR.php
@@ -168,7 +168,7 @@ class IXR_Value {
{
$expected = 0;
foreach ($array as $key => $value) {
- if ((string)$key != (string)$expected) {
+ if ((string)$key !== (string)$expected) {
return true;
}
$expected++;
@@ -249,7 +249,7 @@ class IXR_Message
$element_limit = 30000;
if ( function_exists( 'apply_filters' ) ) {
/**
- * Filter the number of elements to parse in an XML-RPC response.
+ * Filters the number of elements to parse in an XML-RPC response.
*
* @since 4.0.0
*
@@ -273,7 +273,7 @@ class IXR_Message
$chunk_size = 262144;
/**
- * Filter the chunk size that can be used to parse an XML-RPC reponse message.
+ * Filters the chunk size that can be used to parse an XML-RPC reponse message.
*
* @since 4.4.0
*
diff --git a/wp-includes/class-feed.php b/wp-includes/class-feed.php
index f0ae196..d525fe3 100644
--- a/wp-includes/class-feed.php
+++ b/wp-includes/class-feed.php
@@ -3,11 +3,19 @@
if ( ! class_exists( 'SimplePie', false ) )
require_once( ABSPATH . WPINC . '/class-simplepie.php' );
+/**
+ * Core class used to implement a feed cache.
+ *
+ * @since 2.8.0
+ *
+ * @see SimplePie_Cache
+ */
class WP_Feed_Cache extends SimplePie_Cache {
+
/**
- * Create a new SimplePie_Cache object
+ * Creates a new SimplePie_Cache object.
*
- * @static
+ * @since 2.8.0
* @access public
*
* @param string $location URL location (scheme is used to determine handler).
@@ -20,14 +28,49 @@ class WP_Feed_Cache extends SimplePie_Cache {
}
}
+/**
+ * Core class used to implement feed cache transients.
+ *
+ * @since 2.8.0
+ */
class WP_Feed_Cache_Transient {
- public $name;
- public $mod_name;
- public $lifetime = 43200; //Default lifetime in cache of 12 hours
/**
- * Class instantiator.
- *
+ * Holds the transient name.
+ *
+ * @since 2.8.0
+ * @access public
+ * @var string
+ */
+ public $name;
+
+ /**
+ * Holds the transient mod name.
+ *
+ * @since 2.8.0
+ * @access public
+ * @var string
+ */
+ public $mod_name;
+
+ /**
+ * Holds the cache duration in seconds.
+ *
+ * Defaults to 43200 seconds (12 hours).
+ *
+ * @since 2.8.0
+ * @access public
+ * @var int
+ */
+ public $lifetime = 43200;
+
+ /**
+ * Constructor.
+ *
+ * @since 2.8.0
+ * @since 3.2.0 Updated to use a PHP5 constructor.
+ * @access public
+ *
* @param string $location URL location (scheme is used to determine handler).
* @param string $filename Unique identifier for cache object.
* @param string $extension 'spi' or 'spc'.
@@ -38,7 +81,7 @@ class WP_Feed_Cache_Transient {
$lifetime = $this->lifetime;
/**
- * Filter the transient lifetime of the feed cache.
+ * Filters the transient lifetime of the feed cache.
*
* @since 2.8.0
*
@@ -49,6 +92,9 @@ class WP_Feed_Cache_Transient {
}
/**
+ * Sets the transient.
+ *
+ * @since 2.8.0
* @access public
*
* @param SimplePie $data Data to save.
@@ -65,28 +111,48 @@ class WP_Feed_Cache_Transient {
}
/**
+ * Gets the transient.
+ *
+ * @since 2.8.0
* @access public
+ *
+ * @return mixed Transient value.
*/
public function load() {
return get_transient($this->name);
}
/**
+ * Gets mod transient.
+ *
+ * @since 2.8.0
* @access public
+ *
+ * @return mixed Transient value.
*/
public function mtime() {
return get_transient($this->mod_name);
}
/**
+ * Sets mod transient.
+ *
+ * @since 2.8.0
* @access public
+ *
+ * @return bool False if value was not set and true if value was set.
*/
public function touch() {
return set_transient($this->mod_name, time(), $this->lifetime);
}
/**
+ * Deletes transients.
+ *
+ * @since 2.8.0
* @access public
+ *
+ * @return true Always true.
*/
public function unlink() {
delete_transient($this->name);
@@ -95,8 +161,32 @@ class WP_Feed_Cache_Transient {
}
}
+/**
+ * Core class for fetching remote files and reading local files with SimplePie.
+ *
+ * @since 2.8.0
+ *
+ * @see SimplePie_File
+ */
class WP_SimplePie_File extends SimplePie_File {
+ /**
+ * Constructor.
+ *
+ * @since 2.8.0
+ * @since 3.2.0 Updated to use a PHP5 constructor.
+ * @access public
+ *
+ * @param string $url Remote file URL.
+ * @param integer $timeout Optional. How long the connection should stay open in seconds.
+ * Default 10.
+ * @param integer $redirects Optional. The number of allowed redirects. Default 5.
+ * @param string|array $headers Optional. Array or string of headers to send with the request.
+ * Default null.
+ * @param string $useragent Optional. User-agent value sent. Default null.
+ * @param boolean $force_fsockopen Optional. Whether to force opening internet or unix domain socket
+ * connection or not. Default false.
+ */
public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) {
$this->url = $url;
$this->timeout = $timeout;
@@ -136,15 +226,31 @@ class WP_SimplePie_File extends SimplePie_File {
}
/**
- * WordPress SimplePie Sanitization Class
+ * Core class used to implement SimpliePie feed sanitization.
*
- * Extension of the SimplePie_Sanitize class to use KSES, because
- * we cannot universally count on DOMDocument being available
+ * Extends the SimplePie_Sanitize class to use KSES, because
+ * we cannot universally count on DOMDocument being available.
*
- * @package WordPress
* @since 3.5.0
+ *
+ * @see SimplePie_Sanitize
*/
class WP_SimplePie_Sanitize_KSES extends SimplePie_Sanitize {
+
+ /**
+ * WordPress SimplePie sanitization using KSES.
+ *
+ * Sanitizes the incoming data, to ensure that it matches the type of data expected, using KSES.
+ *
+ * @since 3.5.0
+ * @access public
+ *
+ * @param mixed $data The data that needs to be sanitized.
+ * @param integer $type The type of data that it's supposed to be.
+ * @param string $base Optional. The `xml:base` value to use when converting relative
+ * URLs to absolute ones. Default empty.
+ * @return mixed Sanitized data.
+ */
public function sanitize( $data, $type, $base = '' ) {
$data = trim( $data );
if ( $type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML ) {
diff --git a/wp-includes/class-http.php b/wp-includes/class-http.php
index 838fbe8..d3a8937 100644
--- a/wp-includes/class-http.php
+++ b/wp-includes/class-http.php
@@ -7,6 +7,13 @@
* @since 2.7.0
*/
+if ( ! class_exists( 'Requests' ) ) {
+ require( ABSPATH . WPINC . '/class-requests.php' );
+
+ Requests::register_autoloader();
+ Requests::set_certificate_path( ABSPATH . WPINC . '/certificates/ca-bundle.crt' );
+}
+
/**
* Core class used for managing HTTP transports and making HTTP requests.
*
@@ -110,7 +117,7 @@ class WP_Http {
* Default '1.0'.
* @type string $user-agent User-agent value sent.
* Default WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ).
- * @type bool $reject_unsafe_urls Whether to pass URLs through {@see wp_http_validate_url()}.
+ * @type bool $reject_unsafe_urls Whether to pass URLs through wp_http_validate_url().
* Default false.
* @type bool $blocking Whether the calling code requires the result of the request.
* If set to false, the request will be sent to the remote server,
@@ -146,7 +153,7 @@ class WP_Http {
$defaults = array(
'method' => 'GET',
/**
- * Filter the timeout value for an HTTP request.
+ * Filters the timeout value for an HTTP request.
*
* @since 2.7.0
*
@@ -155,7 +162,7 @@ class WP_Http {
*/
'timeout' => apply_filters( 'http_request_timeout', 5 ),
/**
- * Filter the number of redirects allowed during an HTTP request.
+ * Filters the number of redirects allowed during an HTTP request.
*
* @since 2.7.0
*
@@ -163,7 +170,7 @@ class WP_Http {
*/
'redirection' => apply_filters( 'http_request_redirection_count', 5 ),
/**
- * Filter the version of the HTTP protocol used in a request.
+ * Filters the version of the HTTP protocol used in a request.
*
* @since 2.7.0
*
@@ -172,7 +179,7 @@ class WP_Http {
*/
'httpversion' => apply_filters( 'http_request_version', '1.0' ),
/**
- * Filter the user agent value sent with an HTTP request.
+ * Filters the user agent value sent with an HTTP request.
*
* @since 2.7.0
*
@@ -180,7 +187,7 @@ class WP_Http {
*/
'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ),
/**
- * Filter whether to pass URLs through wp_http_validate_url() in an HTTP request.
+ * Filters whether to pass URLs through wp_http_validate_url() in an HTTP request.
*
* @since 3.6.0
*
@@ -210,7 +217,7 @@ class WP_Http {
$r = wp_parse_args( $args, $defaults );
/**
- * Filter the arguments used in an HTTP request.
+ * Filters the arguments used in an HTTP request.
*
* @since 2.7.0
*
@@ -224,7 +231,7 @@ class WP_Http {
$r['_redirection'] = $r['redirection'];
/**
- * Filter whether to preempt an HTTP request's return value.
+ * Filters whether to preempt an HTTP request's return value.
*
* Returning a non-false value from the filter will short-circuit the HTTP request and return
* early with that value. A filter should return either:
@@ -247,8 +254,9 @@ class WP_Http {
return $pre;
if ( function_exists( 'wp_kses_bad_protocol' ) ) {
- if ( $r['reject_unsafe_urls'] )
+ if ( $r['reject_unsafe_urls'] ) {
$url = wp_http_validate_url( $url );
+ }
if ( $url ) {
$url = wp_kses_bad_protocol( $url, array( 'http', 'https', 'ssl' ) );
}
@@ -256,107 +264,204 @@ class WP_Http {
$arrURL = @parse_url( $url );
- if ( empty( $url ) || empty( $arrURL['scheme'] ) )
+ if ( empty( $url ) || empty( $arrURL['scheme'] ) ) {
return new WP_Error('http_request_failed', __('A valid URL was not provided.'));
+ }
- if ( $this->block_request( $url ) )
+ if ( $this->block_request( $url ) ) {
return new WP_Error( 'http_request_failed', __( 'User has blocked requests through HTTP.' ) );
-
- /*
- * Determine if this is a https call and pass that on to the transport functions
- * so that we can blacklist the transports that do not support ssl verification
- */
- $r['ssl'] = $arrURL['scheme'] == 'https' || $arrURL['scheme'] == 'ssl';
-
- // Determine if this request is to OUR install of WordPress.
- $homeURL = parse_url( get_bloginfo( 'url' ) );
- $r['local'] = 'localhost' == $arrURL['host'] || ( isset( $homeURL['host'] ) && $homeURL['host'] == $arrURL['host'] );
- unset( $homeURL );
-
- /*
- * If we are streaming to a file but no filename was given drop it in the WP temp dir
- * and pick its name using the basename of the $url.
- */
- if ( $r['stream'] && empty( $r['filename'] ) ) {
- $r['filename'] = get_temp_dir() . wp_unique_filename( get_temp_dir(), basename( $url ) );
}
- /*
- * Force some settings if we are streaming to a file and check for existence and perms
- * of destination directory.
- */
+ // If we are streaming to a file but no filename was given drop it in the WP temp dir
+ // and pick its name using the basename of the $url
if ( $r['stream'] ) {
+ if ( empty( $r['filename'] ) ) {
+ $r['filename'] = get_temp_dir() . basename( $url );
+ }
+
+ // Force some settings if we are streaming to a file and check for existence and perms of destination directory
$r['blocking'] = true;
- if ( ! wp_is_writable( dirname( $r['filename'] ) ) )
+ if ( ! wp_is_writable( dirname( $r['filename'] ) ) ) {
return new WP_Error( 'http_request_failed', __( 'Destination directory for file streaming does not exist or is not writable.' ) );
+ }
}
- if ( is_null( $r['headers'] ) )
+ if ( is_null( $r['headers'] ) ) {
$r['headers'] = array();
+ }
+ // WP allows passing in headers as a string, weirdly.
if ( ! is_array( $r['headers'] ) ) {
- $processedHeaders = self::processHeaders( $r['headers'], $url );
+ $processedHeaders = WP_Http::processHeaders( $r['headers'] );
$r['headers'] = $processedHeaders['headers'];
}
- if ( isset( $r['headers']['User-Agent'] ) ) {
- $r['user-agent'] = $r['headers']['User-Agent'];
- unset( $r['headers']['User-Agent'] );
+ // Setup arguments
+ $headers = $r['headers'];
+ $data = $r['body'];
+ $type = $r['method'];
+ $options = array(
+ 'timeout' => $r['timeout'],
+ 'useragent' => $r['user-agent'],
+ 'blocking' => $r['blocking'],
+ 'hooks' => new Requests_Hooks(),
+ );
+
+ // Ensure redirects follow browser behaviour.
+ $options['hooks']->register( 'requests.before_redirect', array( get_class(), 'browser_redirect_compatibility' ) );
+
+ if ( $r['stream'] ) {
+ $options['filename'] = $r['filename'];
+ }
+ if ( empty( $r['redirection'] ) ) {
+ $options['follow_redirects'] = false;
+ } else {
+ $options['redirects'] = $r['redirection'];
}
- if ( isset( $r['headers']['user-agent'] ) ) {
- $r['user-agent'] = $r['headers']['user-agent'];
- unset( $r['headers']['user-agent'] );
+ // Use byte limit, if we can
+ if ( isset( $r['limit_response_size'] ) ) {
+ $options['max_bytes'] = $r['limit_response_size'];
}
- if ( '1.1' == $r['httpversion'] && !isset( $r['headers']['connection'] ) ) {
- $r['headers']['connection'] = 'close';
- }
-
- // Construct Cookie: header if any cookies are set.
- self::buildCookieHeader( $r );
-
- // Avoid issues where mbstring.func_overload is enabled.
- mbstring_binary_safe_encoding();
-
- if ( ! isset( $r['headers']['Accept-Encoding'] ) ) {
- if ( $encoding = WP_Http_Encoding::accept_encoding( $url, $r ) )
- $r['headers']['Accept-Encoding'] = $encoding;
- }
-
- if ( ( ! is_null( $r['body'] ) && '' != $r['body'] ) || 'POST' == $r['method'] || 'PUT' == $r['method'] ) {
- if ( is_array( $r['body'] ) || is_object( $r['body'] ) ) {
- $r['body'] = http_build_query( $r['body'], null, '&' );
-
- if ( ! isset( $r['headers']['Content-Type'] ) )
- $r['headers']['Content-Type'] = 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' );
- }
-
- if ( '' === $r['body'] )
- $r['body'] = null;
-
- if ( ! isset( $r['headers']['Content-Length'] ) && ! isset( $r['headers']['content-length'] ) )
- $r['headers']['Content-Length'] = strlen( $r['body'] );
- }
-
- $response = $this->_dispatch_request( $url, $r );
-
- reset_mbstring_encoding();
-
- if ( is_wp_error( $response ) )
- return $response;
-
- // Append cookies that were used in this request to the response
+ // If we've got cookies, use and convert them to Requests_Cookie.
if ( ! empty( $r['cookies'] ) ) {
- $cookies_set = wp_list_pluck( $response['cookies'], 'name' );
- foreach ( $r['cookies'] as $cookie ) {
- if ( ! in_array( $cookie->name, $cookies_set ) && $cookie->test( $url ) ) {
- $response['cookies'][] = $cookie;
- }
+ $options['cookies'] = WP_Http::normalize_cookies( $r['cookies'] );
+ }
+
+ // SSL certificate handling
+ if ( ! $r['sslverify'] ) {
+ $options['verify'] = false;
+ } else {
+ $options['verify'] = $r['sslcertificates'];
+ }
+
+ // All non-GET/HEAD requests should put the arguments in the form body.
+ if ( 'HEAD' !== $type && 'GET' !== $type ) {
+ $options['data_format'] = 'body';
+ }
+
+ /**
+ * Filters whether SSL should be verified for non-local requests.
+ *
+ * @since 2.8.0
+ *
+ * @param bool $ssl_verify Whether to verify the SSL connection. Default true.
+ */
+ $options['verify'] = apply_filters( 'https_ssl_verify', $options['verify'] );
+
+ // Check for proxies.
+ $proxy = new WP_HTTP_Proxy();
+ if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) {
+ $options['proxy'] = new Requests_Proxy_HTTP( $proxy->host() . ':' . $proxy->port() );
+
+ if ( $proxy->use_authentication() ) {
+ $options['proxy']->use_authentication = true;
+ $options['proxy']->user = $proxy->username();
+ $options['proxy']->pass = $proxy->password();
}
}
- return $response;
+ try {
+ $requests_response = Requests::request( $url, $headers, $data, $type, $options );
+
+ // Convert the response into an array
+ $http_response = new WP_HTTP_Requests_Response( $requests_response, $r['filename'] );
+ $response = $http_response->to_array();
+
+ // Add the original object to the array.
+ $response['http_response'] = $http_response;
+ }
+ catch ( Requests_Exception $e ) {
+ $response = new WP_Error( 'http_request_failed', $e->getMessage() );
+ }
+
+ /**
+ * Fires after an HTTP API response is received and before the response is returned.
+ *
+ * @since 2.8.0
+ *
+ * @param array|WP_Error $response HTTP response or WP_Error object.
+ * @param string $context Context under which the hook is fired.
+ * @param string $class HTTP transport used.
+ * @param array $args HTTP request arguments.
+ * @param string $url The request URL.
+ */
+ do_action( 'http_api_debug', $response, 'response', 'Requests', $r, $url );
+ if ( is_wp_error( $response ) ) {
+ return $response;
+ }
+
+ if ( ! $r['blocking'] ) {
+ return array(
+ 'headers' => array(),
+ 'body' => '',
+ 'response' => array(
+ 'code' => false,
+ 'message' => false,
+ ),
+ 'cookies' => array(),
+ 'http_response' => null,
+ );
+ }
+
+ /**
+ * Filters the HTTP API response immediately before the response is returned.
+ *
+ * @since 2.9.0
+ *
+ * @param array $response HTTP response.
+ * @param array $r HTTP request arguments.
+ * @param string $url The request URL.
+ */
+ return apply_filters( 'http_response', $response, $r, $url );
+ }
+
+ /**
+ * Normalizes cookies for using in Requests.
+ *
+ * @since 4.6.0
+ * @access public
+ * @static
+ *
+ * @param array $cookies List of cookies to send with the request.
+ * @return Requests_Cookie_Jar Cookie holder object.
+ */
+ public static function normalize_cookies( $cookies ) {
+ $cookie_jar = new Requests_Cookie_Jar();
+
+ foreach ( $cookies as $name => $value ) {
+ if ( $value instanceof WP_Http_Cookie ) {
+ $cookie_jar[ $value->name ] = new Requests_Cookie( $value->name, $value->value, $value->get_attributes() );
+ } elseif ( is_string( $value ) ) {
+ $cookie_jar[ $name ] = new Requests_Cookie( $name, $value );
+ }
+ }
+
+ return $cookie_jar;
+ }
+
+ /**
+ * Match redirect behaviour to browser handling.
+ *
+ * Changes 302 redirects from POST to GET to match browser handling. Per
+ * RFC 7231, user agents can deviate from the strict reading of the
+ * specification for compatibility purposes.
+ *
+ * @since 4.6.0
+ * @access public
+ * @static
+ *
+ * @param string $location URL to redirect to.
+ * @param array $headers Headers for the redirect.
+ * @param array $options Redirect request options.
+ * @param Requests_Response $original Response object.
+ */
+ public static function browser_redirect_compatibility( $location, $headers, $data, &$options, $original ) {
+ // Browser compat
+ if ( $original->status_code === 302 ) {
+ $options['type'] = Requests::GET;
+ }
}
/**
@@ -374,7 +479,7 @@ class WP_Http {
$transports = array( 'curl', 'streams' );
/**
- * Filter which HTTP transports are available and in what order.
+ * Filters which HTTP transports are available and in what order.
*
* @since 3.7.0
*
@@ -432,24 +537,14 @@ class WP_Http {
$response = $transports[$class]->request( $url, $args );
- /**
- * Fires after an HTTP API response is received and before the response is returned.
- *
- * @since 2.8.0
- *
- * @param array|WP_Error $response HTTP response or WP_Error object.
- * @param string $context Context under which the hook is fired.
- * @param string $class HTTP transport used.
- * @param array $args HTTP request arguments.
- * @param string $url The request URL.
- */
+ /** This action is documented in wp-includes/class-http.php */
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
if ( is_wp_error( $response ) )
return $response;
/**
- * Filter the HTTP API response immediately before the response is returned.
+ * Filters the HTTP API response immediately before the response is returned.
*
* @since 2.9.0
*
@@ -643,7 +738,7 @@ class WP_Http {
*
* Based off the HTTP http_encoding_dechunk function.
*
- * @link http://tools.ietf.org/html/rfc2616#section-19.4.6 Process for chunked decoding.
+ * @link https://tools.ietf.org/html/rfc2616#section-19.4.6 Process for chunked decoding.
*
* @access public
* @since 2.7.0
@@ -718,7 +813,7 @@ class WP_Http {
// Don't block requests back to ourselves by default.
if ( 'localhost' == $check['host'] || ( isset( $home['host'] ) && $home['host'] == $check['host'] ) ) {
/**
- * Filter whether to block local requests through the proxy.
+ * Filters whether to block local requests through the proxy.
*
* @since 2.8.0
*
diff --git a/wp-includes/class-oembed.php b/wp-includes/class-oembed.php
index 909524b..9790d26 100644
--- a/wp-includes/class-oembed.php
+++ b/wp-includes/class-oembed.php
@@ -38,7 +38,7 @@ class WP_oEmbed {
public static $early_providers = array();
/**
- * A list of private/protected methods, used for backwards compatibility.
+ * A list of private/protected methods, used for backward compatibility.
*
* @since 4.2.0
* @access private
@@ -115,7 +115,7 @@ class WP_oEmbed {
self::$early_providers = array();
/**
- * Filter the list of whitelisted oEmbed providers.
+ * Filters the list of whitelisted oEmbed providers.
*
* Since WordPress 4.4, oEmbed discovery is enabled for all users and allows embedding of sanitized
* iframes. The providers in this list are whitelisted, meaning they are trusted and allowed to
@@ -192,7 +192,7 @@ class WP_oEmbed {
}
/**
- * Exposes private/protected methods for backwards compatibility.
+ * Exposes private/protected methods for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -221,6 +221,7 @@ class WP_oEmbed {
* @return false|string False on failure, otherwise the oEmbed provider URL.
*/
public function get_provider( $url, $args = '' ) {
+ $args = wp_parse_args( $args );
$provider = false;
@@ -315,13 +316,37 @@ class WP_oEmbed {
* @return false|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed.
*/
public function get_html( $url, $args = '' ) {
- $provider = $this->get_provider( $url, $args );
-
- if ( !$provider || false === $data = $this->fetch( $provider, $url, $args ) )
- return false;
+ $args = wp_parse_args( $args );
/**
- * Filter the HTML returned by the oEmbed provider.
+ * Filters the oEmbed result before any HTTP requests are made.
+ *
+ * This allows one to short-circuit the default logic, perhaps by
+ * replacing it with a routine that is more optimal for your setup.
+ *
+ * Passing a non-null value to the filter will effectively short-circuit retrieval,
+ * returning the passed value instead.
+ *
+ * @since 4.5.3
+ *
+ * @param null|string $result The UNSANITIZED (and potentially unsafe) HTML that should be used to embed. Default null.
+ * @param string $url The URL to the content that should be attempted to be embedded.
+ * @param array $args Optional. Arguments, usually passed from a shortcode. Default empty.
+ */
+ $pre = apply_filters( 'pre_oembed_result', null, $url, $args );
+
+ if ( null !== $pre ) {
+ return $pre;
+ }
+
+ $provider = $this->get_provider( $url, $args );
+
+ if ( ! $provider || false === $data = $this->fetch( $provider, $url, $args ) ) {
+ return false;
+ }
+
+ /**
+ * Filters the HTML returned by the oEmbed provider.
*
* @since 2.9.0
*
@@ -348,7 +373,7 @@ class WP_oEmbed {
);
/**
- * Filter oEmbed remote get arguments.
+ * Filters oEmbed remote get arguments.
*
* @since 4.0.0
*
@@ -364,7 +389,7 @@ class WP_oEmbed {
if ( $html = wp_remote_retrieve_body( $request ) ) {
/**
- * Filter the link types that contain oEmbed provider URLs.
+ * Filters the link types that contain oEmbed provider URLs.
*
* @since 2.9.0
*
@@ -435,7 +460,7 @@ class WP_oEmbed {
$provider = add_query_arg( 'url', urlencode($url), $provider );
/**
- * Filter the oEmbed URL to be fetched.
+ * Filters the oEmbed URL to be fetched.
*
* @since 2.9.0
*
@@ -598,7 +623,7 @@ class WP_oEmbed {
}
/**
- * Filter the returned oEmbed HTML.
+ * Filters the returned oEmbed HTML.
*
* Use this filter to add support for custom data types, or to filter the result.
*
diff --git a/wp-includes/class-requests.php b/wp-includes/class-requests.php
new file mode 100644
index 0000000..5a6257a
--- /dev/null
+++ b/wp-includes/class-requests.php
@@ -0,0 +1,978 @@
+dispatch('requests.before_request', array(&$url, &$headers, &$data, &$type, &$options));
+
+ if (!empty($options['transport'])) {
+ $transport = $options['transport'];
+
+ if (is_string($options['transport'])) {
+ $transport = new $transport();
+ }
+ }
+ else {
+ $need_ssl = (0 === stripos($url, 'https://'));
+ $capabilities = array('ssl' => $need_ssl);
+ $transport = self::get_transport($capabilities);
+ }
+ $response = $transport->request($url, $headers, $data, $options);
+
+ $options['hooks']->dispatch('requests.before_parse', array(&$response, $url, $headers, $data, $type, $options));
+
+ return self::parse_response($response, $url, $headers, $data, $options);
+ }
+
+ /**
+ * Send multiple HTTP requests simultaneously
+ *
+ * The `$requests` parameter takes an associative or indexed array of
+ * request fields. The key of each request can be used to match up the
+ * request with the returned data, or with the request passed into your
+ * `multiple.request.complete` callback.
+ *
+ * The request fields value is an associative array with the following keys:
+ *
+ * - `url`: Request URL Same as the `$url` parameter to
+ * {@see Requests::request}
+ * (string, required)
+ * - `headers`: Associative array of header fields. Same as the `$headers`
+ * parameter to {@see Requests::request}
+ * (array, default: `array()`)
+ * - `data`: Associative array of data fields or a string. Same as the
+ * `$data` parameter to {@see Requests::request}
+ * (array|string, default: `array()`)
+ * - `type`: HTTP request type (use Requests constants). Same as the `$type`
+ * parameter to {@see Requests::request}
+ * (string, default: `Requests::GET`)
+ * - `cookies`: Associative array of cookie name to value, or cookie jar.
+ * (array|Requests_Cookie_Jar)
+ *
+ * If the `$options` parameter is specified, individual requests will
+ * inherit options from it. This can be used to use a single hooking system,
+ * or set all the types to `Requests::POST`, for example.
+ *
+ * In addition, the `$options` parameter takes the following global options:
+ *
+ * - `complete`: A callback for when a request is complete. Takes two
+ * parameters, a Requests_Response/Requests_Exception reference, and the
+ * ID from the request array (Note: this can also be overridden on a
+ * per-request basis, although that's a little silly)
+ * (callback)
+ *
+ * @param array $requests Requests data (see description for more information)
+ * @param array $options Global and default options (see {@see Requests::request})
+ * @return array Responses (either Requests_Response or a Requests_Exception object)
+ */
+ public static function request_multiple($requests, $options = array()) {
+ $options = array_merge(self::get_default_options(true), $options);
+
+ if (!empty($options['hooks'])) {
+ $options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
+ if (!empty($options['complete'])) {
+ $options['hooks']->register('multiple.request.complete', $options['complete']);
+ }
+ }
+
+ foreach ($requests as $id => &$request) {
+ if (!isset($request['headers'])) {
+ $request['headers'] = array();
+ }
+ if (!isset($request['data'])) {
+ $request['data'] = array();
+ }
+ if (!isset($request['type'])) {
+ $request['type'] = self::GET;
+ }
+ if (!isset($request['options'])) {
+ $request['options'] = $options;
+ $request['options']['type'] = $request['type'];
+ }
+ else {
+ if (empty($request['options']['type'])) {
+ $request['options']['type'] = $request['type'];
+ }
+ $request['options'] = array_merge($options, $request['options']);
+ }
+
+ self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
+
+ // Ensure we only hook in once
+ if ($request['options']['hooks'] !== $options['hooks']) {
+ $request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
+ if (!empty($request['options']['complete'])) {
+ $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
+ }
+ }
+ }
+ unset($request);
+
+ if (!empty($options['transport'])) {
+ $transport = $options['transport'];
+
+ if (is_string($options['transport'])) {
+ $transport = new $transport();
+ }
+ }
+ else {
+ $transport = self::get_transport();
+ }
+ $responses = $transport->request_multiple($requests, $options);
+
+ foreach ($responses as $id => &$response) {
+ // If our hook got messed with somehow, ensure we end up with the
+ // correct response
+ if (is_string($response)) {
+ $request = $requests[$id];
+ self::parse_multiple($response, $request);
+ $request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id));
+ }
+ }
+
+ return $responses;
+ }
+
+ /**
+ * Get the default options
+ *
+ * @see Requests::request() for values returned by this method
+ * @param boolean $multirequest Is this a multirequest?
+ * @return array Default option values
+ */
+ protected static function get_default_options($multirequest = false) {
+ $defaults = array(
+ 'timeout' => 10,
+ 'connect_timeout' => 10,
+ 'useragent' => 'php-requests/' . self::VERSION,
+ 'protocol_version' => 1.1,
+ 'redirected' => 0,
+ 'redirects' => 10,
+ 'follow_redirects' => true,
+ 'blocking' => true,
+ 'type' => self::GET,
+ 'filename' => false,
+ 'auth' => false,
+ 'proxy' => false,
+ 'cookies' => false,
+ 'max_bytes' => false,
+ 'idn' => true,
+ 'hooks' => null,
+ 'transport' => null,
+ 'verify' => Requests::get_certificate_path(),
+ 'verifyname' => true,
+ );
+ if ($multirequest !== false) {
+ $defaults['complete'] = null;
+ }
+ return $defaults;
+ }
+
+ /**
+ * Get default certificate path.
+ *
+ * @return string Default certificate path.
+ */
+ public static function get_certificate_path() {
+ if ( ! empty( Requests::$certificate_path ) ) {
+ return Requests::$certificate_path;
+ }
+
+ return dirname(__FILE__) . '/Requests/Transport/cacert.pem';
+ }
+
+ /**
+ * Set default certificate path.
+ *
+ * @param string $path Certificate path, pointing to a PEM file.
+ */
+ public static function set_certificate_path( $path ) {
+ Requests::$certificate_path = $path;
+ }
+
+ /**
+ * Set the default values
+ *
+ * @param string $url URL to request
+ * @param array $headers Extra headers to send with the request
+ * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
+ * @param string $type HTTP request type
+ * @param array $options Options for the request
+ * @return array $options
+ */
+ protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
+ if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
+ throw new Requests_Exception('Only HTTP(S) requests are handled.', 'nonhttp', $url);
+ }
+
+ if (empty($options['hooks'])) {
+ $options['hooks'] = new Requests_Hooks();
+ }
+
+ if (is_array($options['auth'])) {
+ $options['auth'] = new Requests_Auth_Basic($options['auth']);
+ }
+ if ($options['auth'] !== false) {
+ $options['auth']->register($options['hooks']);
+ }
+
+ if (is_string($options['proxy']) || is_array($options['proxy'])) {
+ $options['proxy'] = new Requests_Proxy_HTTP($options['proxy']);
+ }
+ if ($options['proxy'] !== false) {
+ $options['proxy']->register($options['hooks']);
+ }
+
+ if (is_array($options['cookies'])) {
+ $options['cookies'] = new Requests_Cookie_Jar($options['cookies']);
+ }
+ elseif (empty($options['cookies'])) {
+ $options['cookies'] = new Requests_Cookie_Jar();
+ }
+ if ($options['cookies'] !== false) {
+ $options['cookies']->register($options['hooks']);
+ }
+
+ if ($options['idn'] !== false) {
+ $iri = new Requests_IRI($url);
+ $iri->host = Requests_IDNAEncoder::encode($iri->ihost);
+ $url = $iri->uri;
+ }
+
+ // Massage the type to ensure we support it.
+ $type = strtoupper($type);
+
+ if (!isset($options['data_format'])) {
+ if (in_array($type, array(self::HEAD, self::GET, self::DELETE))) {
+ $options['data_format'] = 'query';
+ }
+ else {
+ $options['data_format'] = 'body';
+ }
+ }
+ }
+
+ /**
+ * HTTP response parser
+ *
+ * @throws Requests_Exception On missing head/body separator (`requests.no_crlf_separator`)
+ * @throws Requests_Exception On missing head/body separator (`noversion`)
+ * @throws Requests_Exception On missing head/body separator (`toomanyredirects`)
+ *
+ * @param string $headers Full response text including headers and body
+ * @param string $url Original request URL
+ * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
+ * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
+ * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
+ * @return Requests_Response
+ */
+ protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
+ $return = new Requests_Response();
+ if (!$options['blocking']) {
+ return $return;
+ }
+
+ $return->raw = $headers;
+ $return->url = $url;
+
+ if (!$options['filename']) {
+ if (($pos = strpos($headers, "\r\n\r\n")) === false) {
+ // Crap!
+ throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
+ }
+
+ $headers = substr($return->raw, 0, $pos);
+ $return->body = substr($return->raw, $pos + strlen("\n\r\n\r"));
+ }
+ else {
+ $return->body = '';
+ }
+ // Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
+ $headers = str_replace("\r\n", "\n", $headers);
+ // Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
+ $headers = preg_replace('/\n[ \t]/', ' ', $headers);
+ $headers = explode("\n", $headers);
+ preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches);
+ if (empty($matches)) {
+ throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
+ }
+ $return->protocol_version = (float) $matches[1];
+ $return->status_code = (int) $matches[2];
+ if ($return->status_code >= 200 && $return->status_code < 300) {
+ $return->success = true;
+ }
+
+ foreach ($headers as $header) {
+ list($key, $value) = explode(':', $header, 2);
+ $value = trim($value);
+ preg_replace('#(\s+)#i', ' ', $value);
+ $return->headers[$key] = $value;
+ }
+ if (isset($return->headers['transfer-encoding'])) {
+ $return->body = self::decode_chunked($return->body);
+ unset($return->headers['transfer-encoding']);
+ }
+ if (isset($return->headers['content-encoding'])) {
+ $return->body = self::decompress($return->body);
+ }
+
+ //fsockopen and cURL compatibility
+ if (isset($return->headers['connection'])) {
+ unset($return->headers['connection']);
+ }
+
+ $options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options));
+
+ if ($return->is_redirect() && $options['follow_redirects'] === true) {
+ if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
+ if ($return->status_code === 303) {
+ $options['type'] = self::GET;
+ }
+ $options['redirected']++;
+ $location = $return->headers['location'];
+ if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) {
+ // relative redirect, for compatibility make it absolute
+ $location = Requests_IRI::absolutize($url, $location);
+ $location = $location->uri;
+ }
+
+ $hook_args = array(
+ &$location,
+ &$req_headers,
+ &$req_data,
+ &$options,
+ $return
+ );
+ $options['hooks']->dispatch('requests.before_redirect', $hook_args);
+ $redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
+ $redirected->history[] = $return;
+ return $redirected;
+ }
+ elseif ($options['redirected'] >= $options['redirects']) {
+ throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return);
+ }
+ }
+
+ $return->redirects = $options['redirected'];
+
+ $options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options));
+ return $return;
+ }
+
+ /**
+ * Callback for `transport.internal.parse_response`
+ *
+ * Internal use only. Converts a raw HTTP response to a Requests_Response
+ * while still executing a multiple request.
+ *
+ * @param string $response Full response text including headers and body (will be overwritten with Response instance)
+ * @param array $request Request data as passed into {@see Requests::request_multiple()}
+ * @return null `$response` is either set to a Requests_Response instance, or a Requests_Exception object
+ */
+ public static function parse_multiple(&$response, $request) {
+ try {
+ $url = $request['url'];
+ $headers = $request['headers'];
+ $data = $request['data'];
+ $options = $request['options'];
+ $response = self::parse_response($response, $url, $headers, $data, $options);
+ }
+ catch (Requests_Exception $e) {
+ $response = $e;
+ }
+ }
+
+ /**
+ * Decoded a chunked body as per RFC 2616
+ *
+ * @see https://tools.ietf.org/html/rfc2616#section-3.6.1
+ * @param string $data Chunked body
+ * @return string Decoded body
+ */
+ protected static function decode_chunked($data) {
+ if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($data))) {
+ return $data;
+ }
+
+ $decoded = '';
+ $encoded = $data;
+
+ while (true) {
+ $is_chunked = (bool) preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches);
+ if (!$is_chunked) {
+ // Looks like it's not chunked after all
+ return $data;
+ }
+
+ $length = hexdec(trim($matches[1]));
+ if ($length === 0) {
+ // Ignore trailer headers
+ return $decoded;
+ }
+
+ $chunk_length = strlen($matches[0]);
+ $decoded .= substr($encoded, $chunk_length, $length);
+ $encoded = substr($encoded, $chunk_length + $length + 2);
+
+ if (trim($encoded) === '0' || empty($encoded)) {
+ return $decoded;
+ }
+ }
+
+ // We'll never actually get down here
+ // @codeCoverageIgnoreStart
+ }
+ // @codeCoverageIgnoreEnd
+
+ /**
+ * Convert a key => value array to a 'key: value' array for headers
+ *
+ * @param array $array Dictionary of header values
+ * @return array List of headers
+ */
+ public static function flatten($array) {
+ $return = array();
+ foreach ($array as $key => $value) {
+ $return[] = sprintf('%s: %s', $key, $value);
+ }
+ return $return;
+ }
+
+ /**
+ * Convert a key => value array to a 'key: value' array for headers
+ *
+ * @codeCoverageIgnore
+ * @deprecated Misspelling of {@see Requests::flatten}
+ * @param array $array Dictionary of header values
+ * @return array List of headers
+ */
+ public static function flattern($array) {
+ return self::flatten($array);
+ }
+
+ /**
+ * Decompress an encoded body
+ *
+ * Implements gzip, compress and deflate. Guesses which it is by attempting
+ * to decode.
+ *
+ * @param string $data Compressed data in one of the above formats
+ * @return string Decompressed string
+ */
+ public static function decompress($data) {
+ if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") {
+ // Not actually compressed. Probably cURL ruining this for us.
+ return $data;
+ }
+
+ if (function_exists('gzdecode') && ($decoded = @gzdecode($data)) !== false) {
+ return $decoded;
+ }
+ elseif (function_exists('gzinflate') && ($decoded = @gzinflate($data)) !== false) {
+ return $decoded;
+ }
+ elseif (($decoded = self::compatible_gzinflate($data)) !== false) {
+ return $decoded;
+ }
+ elseif (function_exists('gzuncompress') && ($decoded = @gzuncompress($data)) !== false) {
+ return $decoded;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Decompression of deflated string while staying compatible with the majority of servers.
+ *
+ * Certain Servers will return deflated data with headers which PHP's gzinflate()
+ * function cannot handle out of the box. The following function has been created from
+ * various snippets on the gzinflate() PHP documentation.
+ *
+ * Warning: Magic numbers within. Due to the potential different formats that the compressed
+ * data may be returned in, some "magic offsets" are needed to ensure proper decompression
+ * takes place. For a simple progmatic way to determine the magic offset in use, see:
+ * https://core.trac.wordpress.org/ticket/18273
+ *
+ * @since 2.8.1
+ * @link https://core.trac.wordpress.org/ticket/18273
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#70875
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#77336
+ *
+ * @param string $gzData String to decompress.
+ * @return string|bool False on failure.
+ */
+ public static function compatible_gzinflate($gzData) {
+ // Compressed data might contain a full zlib header, if so strip it for
+ // gzinflate()
+ if (substr($gzData, 0, 3) == "\x1f\x8b\x08") {
+ $i = 10;
+ $flg = ord(substr($gzData, 3, 1));
+ if ($flg > 0) {
+ if ($flg & 4) {
+ list($xlen) = unpack('v', substr($gzData, $i, 2));
+ $i = $i + 2 + $xlen;
+ }
+ if ($flg & 8) {
+ $i = strpos($gzData, "\0", $i) + 1;
+ }
+ if ($flg & 16) {
+ $i = strpos($gzData, "\0", $i) + 1;
+ }
+ if ($flg & 2) {
+ $i = $i + 2;
+ }
+ }
+ $decompressed = self::compatible_gzinflate(substr($gzData, $i));
+ if (false !== $decompressed) {
+ return $decompressed;
+ }
+ }
+
+ // If the data is Huffman Encoded, we must first strip the leading 2
+ // byte Huffman marker for gzinflate()
+ // The response is Huffman coded by many compressors such as
+ // java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's
+ // System.IO.Compression.DeflateStream.
+ //
+ // See https://decompres.blogspot.com/ for a quick explanation of this
+ // data type
+ $huffman_encoded = false;
+
+ // low nibble of first byte should be 0x08
+ list(, $first_nibble) = unpack('h', $gzData);
+
+ // First 2 bytes should be divisible by 0x1F
+ list(, $first_two_bytes) = unpack('n', $gzData);
+
+ if (0x08 == $first_nibble && 0 == ($first_two_bytes % 0x1F)) {
+ $huffman_encoded = true;
+ }
+
+ if ($huffman_encoded) {
+ if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) {
+ return $decompressed;
+ }
+ }
+
+ if ("\x50\x4b\x03\x04" == substr($gzData, 0, 4)) {
+ // ZIP file format header
+ // Offset 6: 2 bytes, General-purpose field
+ // Offset 26: 2 bytes, filename length
+ // Offset 28: 2 bytes, optional field length
+ // Offset 30: Filename field, followed by optional field, followed
+ // immediately by data
+ list(, $general_purpose_flag) = unpack('v', substr($gzData, 6, 2));
+
+ // If the file has been compressed on the fly, 0x08 bit is set of
+ // the general purpose field. We can use this to differentiate
+ // between a compressed document, and a ZIP file
+ $zip_compressed_on_the_fly = (0x08 == (0x08 & $general_purpose_flag));
+
+ if (!$zip_compressed_on_the_fly) {
+ // Don't attempt to decode a compressed zip file
+ return $gzData;
+ }
+
+ // Determine the first byte of data, based on the above ZIP header
+ // offsets:
+ $first_file_start = array_sum(unpack('v2', substr($gzData, 26, 4)));
+ if (false !== ($decompressed = @gzinflate(substr($gzData, 30 + $first_file_start)))) {
+ return $decompressed;
+ }
+ return false;
+ }
+
+ // Finally fall back to straight gzinflate
+ if (false !== ($decompressed = @gzinflate($gzData))) {
+ return $decompressed;
+ }
+
+ // Fallback for all above failing, not expected, but included for
+ // debugging and preventing regressions and to track stats
+ if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) {
+ return $decompressed;
+ }
+
+ return false;
+ }
+
+ public static function match_domain($host, $reference) {
+ // Check for a direct match
+ if ($host === $reference) {
+ return true;
+ }
+
+ // Calculate the valid wildcard match if the host is not an IP address
+ // Also validates that the host has 3 parts or more, as per Firefox's
+ // ruleset.
+ $parts = explode('.', $host);
+ if (ip2long($host) === false && count($parts) >= 3) {
+ $parts[0] = '*';
+ $wildcard = implode('.', $parts);
+ if ($wildcard === $reference) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/wp-includes/class-simplepie.php b/wp-includes/class-simplepie.php
index 958ba46..6110413 100644
--- a/wp-includes/class-simplepie.php
+++ b/wp-includes/class-simplepie.php
@@ -29,35 +29,10 @@ function wp_simplepie_autoload( $class ) {
include( $file );
}
-if ( function_exists( 'spl_autoload_register' ) ) {
- /**
- * We autoload classes we may not need.
- *
- * If SPL is disabled, we load all of SimplePie manually.
- *
- * Core.php is not loaded manually, because SimplePie_Core (a deprecated class)
- * was never included in WordPress core.
- */
- spl_autoload_register( 'wp_simplepie_autoload' );
-} else {
- require ABSPATH . WPINC . '/SimplePie/Cache/Base.php';
- require ABSPATH . WPINC . '/SimplePie/Cache/DB.php';
- require ABSPATH . WPINC . '/SimplePie/Cache/File.php';
- require ABSPATH . WPINC . '/SimplePie/Cache/Memcache.php';
- require ABSPATH . WPINC . '/SimplePie/Cache/MySQL.php';
- require ABSPATH . WPINC . '/SimplePie/Caption.php';
- require ABSPATH . WPINC . '/SimplePie/Category.php';
- require ABSPATH . WPINC . '/SimplePie/Copyright.php';
- require ABSPATH . WPINC . '/SimplePie/Credit.php';
- require ABSPATH . WPINC . '/SimplePie/Decode/HTML/Entities.php';
- require ABSPATH . WPINC . '/SimplePie/Enclosure.php';
- require ABSPATH . WPINC . '/SimplePie/gzdecode.php';
- require ABSPATH . WPINC . '/SimplePie/HTTP/Parser.php';
- require ABSPATH . WPINC . '/SimplePie/Net/IPv6.php';
- require ABSPATH . WPINC . '/SimplePie/Rating.php';
- require ABSPATH . WPINC . '/SimplePie/Restriction.php';
- require ABSPATH . WPINC . '/SimplePie/Source.php';
-}
+/**
+ * We autoload classes we may not need.
+ */
+spl_autoload_register( 'wp_simplepie_autoload' );
/**
* SimplePie
diff --git a/wp-includes/class-snoopy.php b/wp-includes/class-snoopy.php
index 7b39406..f26eb0e 100644
--- a/wp-includes/class-snoopy.php
+++ b/wp-includes/class-snoopy.php
@@ -3,7 +3,7 @@
/**
* Deprecated. Use WP_HTTP (http.php) instead.
*/
-_deprecated_file( basename( __FILE__ ), '3.0', WPINC . '/http.php' );
+_deprecated_file( basename( __FILE__ ), '3.0.0', WPINC . '/http.php' );
if ( ! class_exists( 'Snoopy', false ) ) :
/*************************************************
diff --git a/wp-includes/class-walker-category.php b/wp-includes/class-walker-category.php
index bd17a14..01b7264 100644
--- a/wp-includes/class-walker-category.php
+++ b/wp-includes/class-walker-category.php
@@ -111,7 +111,7 @@ class Walker_Category extends Walker {
$link = 'description ) ) {
/**
- * Filter the category description for display.
+ * Filters the category description for display.
*
* @since 1.2.0
*
@@ -189,7 +189,7 @@ class Walker_Category extends Walker {
}
/**
- * Filter the list of CSS classes to include with each category in the list.
+ * Filters the list of CSS classes to include with each category in the list.
*
* @since 4.2.0
*
diff --git a/wp-includes/class-walker-comment.php b/wp-includes/class-walker-comment.php
index 3065744..72220aa 100644
--- a/wp-includes/class-walker-comment.php
+++ b/wp-includes/class-walker-comment.php
@@ -287,7 +287,7 @@ class Walker_Comment extends Walker {
?>
- $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
+ $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
'menu_item_parent', 'id' => 'db_id' );
+
+ /**
+ * Starts the list before the elements are added.
+ *
+ * @since 3.0.0
+ *
+ * @see Walker::start_lvl()
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param int $depth Depth of menu item. Used for padding.
+ * @param array $args An array of wp_nav_menu() arguments.
+ */
+ public function start_lvl( &$output, $depth = 0, $args = array() ) {
+ $indent = str_repeat("\t", $depth);
+ $output .= "\n$indent
\n";
+ }
+
+ /**
+ * Ends the list of after the elements are added.
+ *
+ * @since 3.0.0
+ *
+ * @see Walker::end_lvl()
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param int $depth Depth of menu item. Used for padding.
+ * @param array $args An array of wp_nav_menu() arguments.
+ */
+ public function end_lvl( &$output, $depth = 0, $args = array() ) {
+ $indent = str_repeat("\t", $depth);
+ $output .= "$indent
\n";
+ }
+
+ /**
+ * Starts the element output.
+ *
+ * @since 3.0.0
+ * @since 4.4.0 The {@see 'nav_menu_item_args'} filter was added.
+ *
+ * @see Walker::start_el()
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $item Menu item data object.
+ * @param int $depth Depth of menu item. Used for padding.
+ * @param array $args An array of wp_nav_menu() arguments.
+ * @param int $id Current item ID.
+ */
+ public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
+ $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
+
+ $classes = empty( $item->classes ) ? array() : (array) $item->classes;
+ $classes[] = 'menu-item-' . $item->ID;
+
+ /**
+ * Filters the arguments for a single nav menu item.
+ *
+ * @since 4.4.0
+ *
+ * @param array $args An array of arguments.
+ * @param object $item Menu item data object.
+ * @param int $depth Depth of menu item. Used for padding.
+ */
+ $args = apply_filters( 'nav_menu_item_args', $args, $item, $depth );
+
+ /**
+ * Filters the CSS class(es) applied to a menu item's list item element.
+ *
+ * @since 3.0.0
+ * @since 4.1.0 The `$depth` parameter was added.
+ *
+ * @param array $classes The CSS classes that are applied to the menu item's `
` element.
+ * @param object $item The current menu item.
+ * @param array $args An array of wp_nav_menu() arguments.
+ * @param int $depth Depth of menu item. Used for padding.
+ */
+ $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) );
+ $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
+
+ /**
+ * Filters the ID applied to a menu item's list item element.
+ *
+ * @since 3.0.1
+ * @since 4.1.0 The `$depth` parameter was added.
+ *
+ * @param string $menu_id The ID that is applied to the menu item's `
` element.
+ * @param object $item The current menu item.
+ * @param array $args An array of wp_nav_menu() arguments.
+ * @param int $depth Depth of menu item. Used for padding.
+ */
+ $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args, $depth );
+ $id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
+
+ $output .= $indent . '
` for a menu item.
+ *
+ * @since 3.0.0
+ *
+ * @param string $item_output The menu item's starting HTML output.
+ * @param object $item Menu item data object.
+ * @param int $depth Depth of menu item. Used for padding.
+ * @param array $args An array of wp_nav_menu() arguments.
+ */
+ $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
+ }
+
+ /**
+ * Ends the element output, if needed.
+ *
+ * @since 3.0.0
+ *
+ * @see Walker::end_el()
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $item Page data object. Not used.
+ * @param int $depth Depth of page. Not Used.
+ * @param array $args An array of wp_nav_menu() arguments.
+ */
+ public function end_el( &$output, $item, $depth = 0, $args = array() ) {
+ $output .= "
\n";
+ }
+
+} // Walker_Nav_Menu
diff --git a/wp-includes/class-walker-page-dropdown.php b/wp-includes/class-walker-page-dropdown.php
index 4c350cf..047098b 100644
--- a/wp-includes/class-walker-page-dropdown.php
+++ b/wp-includes/class-walker-page-dropdown.php
@@ -75,7 +75,7 @@ class Walker_PageDropdown extends Walker {
}
/**
- * Filter the page title when creating an HTML drop-down list of pages.
+ * Filters the page title when creating an HTML drop-down list of pages.
*
* @since 3.1.0
*
diff --git a/wp-includes/class-walker-page.php b/wp-includes/class-walker-page.php
index f4667c5..fd55cce 100644
--- a/wp-includes/class-walker-page.php
+++ b/wp-includes/class-walker-page.php
@@ -116,7 +116,7 @@ class Walker_Page extends Walker {
}
/**
- * Filter the list of CSS classes to include with each page item in the list.
+ * Filters the list of CSS classes to include with each page item in the list.
*
* @since 2.8.0
*
diff --git a/wp-includes/class-wp-admin-bar.php b/wp-includes/class-wp-admin-bar.php
index b89c654..49986ac 100644
--- a/wp-includes/class-wp-admin-bar.php
+++ b/wp-includes/class-wp-admin-bar.php
@@ -27,7 +27,7 @@ class WP_Admin_Bar {
return is_ssl() ? 'https://' : 'http://';
case 'menu' :
- _deprecated_argument( 'WP_Admin_Bar', '3.3', 'Modify admin bar nodes with WP_Admin_Bar::get_node(), WP_Admin_Bar::add_node(), and WP_Admin_Bar::remove_node(), not the menu property.' );
+ _deprecated_argument( 'WP_Admin_Bar', '3.3.0', 'Modify admin bar nodes with WP_Admin_Bar::get_node(), WP_Admin_Bar::add_node(), and WP_Admin_Bar::remove_node(), not the menu property.' );
return array(); // Sorry, folks.
}
}
@@ -127,7 +127,7 @@ class WP_Admin_Bar {
if ( empty( $args['title'] ) )
return;
- _doing_it_wrong( __METHOD__, __( 'The menu ID should not be empty.' ), '3.3' );
+ _doing_it_wrong( __METHOD__, __( 'The menu ID should not be empty.' ), '3.3.0' );
// Deprecated: Generate an ID from the title.
$args['id'] = esc_attr( sanitize_title( trim( $args['title'] ) ) );
}
@@ -477,8 +477,9 @@ class WP_Admin_Bar {
$is_parent = ! empty( $node->children );
$has_link = ! empty( $node->href );
- $tabindex = isset( $node->meta['tabindex'] ) ? (int) $node->meta['tabindex'] : '';
- $aria_attributes = $tabindex ? 'tabindex="' . $tabindex . '"' : '';
+ // Allow only numeric values, then casted to integers, and allow a tabindex value of `0` for a11y.
+ $tabindex = ( isset( $node->meta['tabindex'] ) && is_numeric( $node->meta['tabindex'] ) ) ? (int) $node->meta['tabindex'] : '';
+ $aria_attributes = ( '' !== $tabindex ) ? ' tabindex="' . $tabindex . '"' : '';
$menuclass = '';
@@ -497,7 +498,7 @@ class WP_Admin_Bar {
' . __( 'This panel is used for managing navigation menus for content you have already published on your site. You can create menus and add items for existing content such as pages, posts, categories, tags, formats, or custom links.' ) . '
';
if ( current_theme_supports( 'widgets' ) ) {
+ /* translators: URL to the widgets panel of the customizer */
$description .= '
' . sprintf( __( 'Menus can be displayed in locations defined by your theme or in widget areas by adding a “Custom Menu” widget.' ), "javascript:wp.customize.panel( 'widgets' ).focus();" ) . '
';
} else {
$description .= '
' . __( 'Menus can be displayed in locations defined by your theme.' ) . '
';
@@ -512,11 +513,15 @@ final class WP_Customize_Nav_Menus {
$locations = get_registered_nav_menus();
$num_locations = count( array_keys( $locations ) );
if ( 1 == $num_locations ) {
- $description = '
' . __( 'Your theme supports one menu. Select which menu you would like to use.' );
+ $description = '
' . __( 'Your theme supports one menu. Select which menu you would like to use.' ) . '
';
} else {
- $description = '
' . sprintf( _n( 'Your theme supports %s menu. Select which menu appears in each location.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) );
+ /* translators: %s: number of menu locations */
+ $description = '
' . sprintf( _n( 'Your theme supports %s menu. Select which menu appears in each location.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) ) . '
';
+ }
+ if ( current_theme_supports( 'widgets' ) ) {
+ /* translators: URL to the widgets panel of the customizer */
+ $description .= '
' . sprintf( __( 'You can also place menus in widget areas with the “Custom Menu” widget.' ), "javascript:wp.customize.panel( 'widgets' ).focus();" ) . '
';
}
- $description .= '
' . __( 'You can also place menus in widget areas with the Custom Menu widget.' ) . '
';
$this->manager->add_section( 'menu_locations', array(
'title' => __( 'Menu Locations' ),
@@ -676,7 +681,7 @@ final class WP_Customize_Nav_Menus {
}
/**
- * Filter the available menu item types.
+ * Filters the available menu item types.
*
* @since 4.3.0
*
@@ -761,8 +766,8 @@ final class WP_Customize_Nav_Menus {
-
+
@@ -831,7 +836,7 @@ final class WP_Customize_Nav_Menus {
public $preview_nav_menu_instance_args = array();
/**
- * Filter arguments for dynamic nav_menu selective refresh partials.
+ * Filters arguments for dynamic nav_menu selective refresh partials.
*
* @since 4.5.0
* @access public
diff --git a/wp-includes/class-wp-customize-panel.php b/wp-includes/class-wp-customize-panel.php
index d5441f6..46e604a 100644
--- a/wp-includes/class-wp-customize-panel.php
+++ b/wp-includes/class-wp-customize-panel.php
@@ -130,9 +130,9 @@ class WP_Customize_Panel {
* @see WP_Customize_Section::active()
*
* @var callable Callback is called with one argument, the instance of
- * {@see WP_Customize_Section}, and returns bool to indicate
- * whether the section is active (such as it relates to the URL
- * currently being previewed).
+ * WP_Customize_Section, and returns bool to indicate whether
+ * the section is active (such as it relates to the URL currently
+ * being previewed).
*/
public $active_callback = '';
@@ -179,12 +179,12 @@ class WP_Customize_Panel {
$active = call_user_func( $this->active_callback, $this );
/**
- * Filter response of WP_Customize_Panel::active().
+ * Filters response of WP_Customize_Panel::active().
*
* @since 4.1.0
*
- * @param bool $active Whether the Customizer panel is active.
- * @param WP_Customize_Panel $panel {@see WP_Customize_Panel} instance.
+ * @param bool $active Whether the Customizer panel is active.
+ * @param WP_Customize_Panel $panel WP_Customize_Panel instance.
*/
$active = apply_filters( 'customize_panel_active', $active, $panel );
@@ -192,7 +192,7 @@ class WP_Customize_Panel {
}
/**
- * Default callback used when invoking {@see WP_Customize_Panel::active()}.
+ * Default callback used when invoking WP_Customize_Panel::active().
*
* Subclasses can override this with their specific logic, or they may
* provide an 'active_callback' argument to the constructor.
@@ -290,7 +290,7 @@ class WP_Customize_Panel {
/**
* Render the panel container, and then its contents (via `this->render_content()`) in a subclass.
*
- * Panel containers are now rendered in JS by default, see {@see WP_Customize_Panel::print_template()}.
+ * Panel containers are now rendered in JS by default, see WP_Customize_Panel::print_template().
*
* @since 4.0.0
* @access protected
@@ -300,7 +300,7 @@ class WP_Customize_Panel {
/**
* Render the panel UI in a subclass.
*
- * Panel contents are now rendered in JS by default, see {@see WP_Customize_Panel::print_template()}.
+ * Panel contents are now rendered in JS by default, see WP_Customize_Panel::print_template().
*
* @since 4.1.0
* @access protected
diff --git a/wp-includes/class-wp-customize-section.php b/wp-includes/class-wp-customize-section.php
index 81f3ced..0a916f2 100644
--- a/wp-includes/class-wp-customize-section.php
+++ b/wp-includes/class-wp-customize-section.php
@@ -139,9 +139,9 @@ class WP_Customize_Section {
* @see WP_Customize_Section::active()
*
* @var callable Callback is called with one argument, the instance of
- * {@see WP_Customize_Section}, and returns bool to indicate
- * whether the section is active (such as it relates to the URL
- * currently being previewed).
+ * WP_Customize_Section, and returns bool to indicate whether
+ * the section is active (such as it relates to the URL currently
+ * being previewed).
*/
public $active_callback = '';
@@ -188,12 +188,12 @@ class WP_Customize_Section {
$active = call_user_func( $this->active_callback, $this );
/**
- * Filter response of {@see WP_Customize_Section::active()}.
+ * Filters response of WP_Customize_Section::active().
*
* @since 4.1.0
*
* @param bool $active Whether the Customizer section is active.
- * @param WP_Customize_Section $section {@see WP_Customize_Section} instance.
+ * @param WP_Customize_Section $section WP_Customize_Section instance.
*/
$active = apply_filters( 'customize_section_active', $active, $section );
@@ -201,7 +201,7 @@ class WP_Customize_Section {
}
/**
- * Default callback used when invoking {@see WP_Customize_Section::active()}.
+ * Default callback used when invoking WP_Customize_Section::active().
*
* Subclasses can override this with their specific logic, or they may provide
* an 'active_callback' argument to the constructor.
@@ -306,7 +306,7 @@ class WP_Customize_Section {
/**
* Render the section UI in a subclass.
*
- * Sections are now rendered in JS by default, see {@see WP_Customize_Section::print_template()}.
+ * Sections are now rendered in JS by default, see WP_Customize_Section::print_template().
*
* @since 3.4.0
*/
diff --git a/wp-includes/class-wp-customize-setting.php b/wp-includes/class-wp-customize-setting.php
index d176d6a..a0d04d3 100644
--- a/wp-includes/class-wp-customize-setting.php
+++ b/wp-includes/class-wp-customize-setting.php
@@ -59,6 +59,7 @@ class WP_Customize_Setting {
*
* @var callback
*/
+ public $validate_callback = '';
public $sanitize_callback = '';
public $sanitize_js_callback = '';
@@ -142,6 +143,9 @@ class WP_Customize_Setting {
$this->id .= '[' . implode( '][', $this->id_data['keys'] ) . ']';
}
+ if ( $this->validate_callback ) {
+ add_filter( "customize_validate_{$this->id}", $this->validate_callback, 10, 3 );
+ }
if ( $this->sanitize_callback ) {
add_filter( "customize_sanitize_{$this->id}", $this->sanitize_callback, 10, 2 );
}
@@ -338,26 +342,26 @@ class WP_Customize_Setting {
default :
/**
- * Fires when the {@see WP_Customize_Setting::preview()} method is called for settings
+ * Fires when the WP_Customize_Setting::preview() method is called for settings
* not handled as theme_mods or options.
*
* The dynamic portion of the hook name, `$this->id`, refers to the setting ID.
*
* @since 3.4.0
*
- * @param WP_Customize_Setting $this {@see WP_Customize_Setting} instance.
+ * @param WP_Customize_Setting $this WP_Customize_Setting instance.
*/
do_action( "customize_preview_{$this->id}", $this );
/**
- * Fires when the {@see WP_Customize_Setting::preview()} method is called for settings
+ * Fires when the WP_Customize_Setting::preview() method is called for settings
* not handled as theme_mods or options.
*
* The dynamic portion of the hook name, `$this->type`, refers to the setting type.
*
* @since 4.1.0
*
- * @param WP_Customize_Setting $this {@see WP_Customize_Setting} instance.
+ * @param WP_Customize_Setting $this WP_Customize_Setting instance.
*/
do_action( "customize_preview_{$this->type}", $this );
}
@@ -460,18 +464,21 @@ class WP_Customize_Setting {
}
/**
- * Check user capabilities and theme supports, and then save
+ * Checks user capabilities and theme supports, and then saves
* the value of the setting.
*
* @since 3.4.0
*
- * @return false|void False if cap check fails or value isn't set.
+ * @access public
+ *
+ * @return false|void False if cap check fails or value isn't set or is invalid.
*/
final public function save() {
$value = $this->post_value();
- if ( ! $this->check_capabilities() || ! isset( $value ) )
+ if ( ! $this->check_capabilities() || ! isset( $value ) ) {
return false;
+ }
/**
* Fires when the WP_Customize_Setting::save() method is called.
@@ -481,9 +488,9 @@ class WP_Customize_Setting {
*
* @since 3.4.0
*
- * @param WP_Customize_Setting $this {@see WP_Customize_Setting} instance.
+ * @param WP_Customize_Setting $this WP_Customize_Setting instance.
*/
- do_action( 'customize_save_' . $this->id_data[ 'base' ], $this );
+ do_action( 'customize_save_' . $this->id_data['base'], $this );
$this->update( $value );
}
@@ -494,7 +501,7 @@ class WP_Customize_Setting {
* @since 3.4.0
*
* @param mixed $default A default value which is used as a fallback. Default is null.
- * @return mixed The default value on failure, otherwise the sanitized value.
+ * @return mixed The default value on failure, otherwise the sanitized and validated value.
*/
final public function post_value( $default = null ) {
return $this->manager->post_value( $this, $default );
@@ -505,13 +512,13 @@ class WP_Customize_Setting {
*
* @since 3.4.0
*
- * @param string|array $value The value to sanitize.
- * @return string|array|null Null if an input isn't valid, otherwise the sanitized value.
+ * @param string|array $value The value to sanitize.
+ * @return string|array|null|WP_Error Sanitized value, or `null`/`WP_Error` if invalid.
*/
public function sanitize( $value ) {
/**
- * Filter a Customize setting value in un-slashed form.
+ * Filters a Customize setting value in un-slashed form.
*
* @since 3.4.0
*
@@ -521,6 +528,48 @@ class WP_Customize_Setting {
return apply_filters( "customize_sanitize_{$this->id}", $value, $this );
}
+ /**
+ * Validates an input.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @see WP_REST_Request::has_valid_params()
+ *
+ * @param mixed $value Value to validate.
+ * @return true|WP_Error True if the input was validated, otherwise WP_Error.
+ */
+ public function validate( $value ) {
+ if ( is_wp_error( $value ) ) {
+ return $value;
+ }
+ if ( is_null( $value ) ) {
+ return new WP_Error( 'invalid_value', __( 'Invalid value.' ) );
+ }
+
+ $validity = new WP_Error();
+
+ /**
+ * Validates a Customize setting value.
+ *
+ * Plugins should amend the `$validity` object via its `WP_Error::add()` method.
+ *
+ * The dynamic portion of the hook name, `$this->ID`, refers to the setting ID.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Error $validity Filtered from `true` to `WP_Error` when invalid.
+ * @param mixed $value Value of the setting.
+ * @param WP_Customize_Setting $this WP_Customize_Setting instance.
+ */
+ $validity = apply_filters( "customize_validate_{$this->id}", $validity, $value, $this );
+
+ if ( is_wp_error( $validity ) && empty( $validity->errors ) ) {
+ $validity = true;
+ }
+ return $validity;
+ }
+
/**
* Get the root value for a setting, especially for multidimensional ones.
*
@@ -597,7 +646,7 @@ class WP_Customize_Setting {
}
} else {
/**
- * Fires when the {@see WP_Customize_Setting::update()} method is called for settings
+ * Fires when the WP_Customize_Setting::update() method is called for settings
* not handled as theme_mods or options.
*
* The dynamic portion of the hook name, `$this->type`, refers to the type of setting.
@@ -648,22 +697,29 @@ class WP_Customize_Setting {
$value = $this->get_root_value( $this->default );
/**
- * Filter a Customize setting value not handled as a theme_mod or option.
+ * Filters a Customize setting value not handled as a theme_mod or option.
*
- * The dynamic portion of the hook name, `$this->id_date['base']`, refers to
- * the base slug of the setting name.
+ * The dynamic portion of the hook name, `$id_base`, refers to
+ * the base slug of the setting name, initialized from `$this->id_data['base']`.
*
* For settings handled as theme_mods or options, see those corresponding
* functions for available hooks.
*
* @since 3.4.0
+ * @since 4.6.0 Added the `$this` setting instance as the second parameter.
*
- * @param mixed $default The setting default value. Default empty.
+ * @param mixed $default The setting default value. Default empty.
+ * @param WP_Customize_Setting $this The setting instance.
*/
- $value = apply_filters( "customize_value_{$id_base}", $value );
- } else if ( $this->is_multidimensional_aggregated ) {
+ $value = apply_filters( "customize_value_{$id_base}", $value, $this );
+ } elseif ( $this->is_multidimensional_aggregated ) {
$root_value = self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['root_value'];
$value = $this->multidimensional_get( $root_value, $this->id_data['keys'], $this->default );
+
+ // Ensure that the post value is used if the setting is previewed, since preview filters aren't applying on cached $root_value.
+ if ( $this->is_previewed ) {
+ $value = $this->post_value( $value );
+ }
} else {
$value = $this->get_root_value( $this->default );
}
@@ -680,14 +736,14 @@ class WP_Customize_Setting {
public function js_value() {
/**
- * Filter a Customize setting value for use in JavaScript.
+ * Filters a Customize setting value for use in JavaScript.
*
* The dynamic portion of the hook name, `$this->id`, refers to the setting ID.
*
* @since 3.4.0
*
* @param mixed $value The setting value.
- * @param WP_Customize_Setting $this {@see WP_Customize_Setting} instance.
+ * @param WP_Customize_Setting $this WP_Customize_Setting instance.
*/
$value = apply_filters( "customize_sanitize_js_{$this->id}", $this->value(), $this );
@@ -697,6 +753,23 @@ class WP_Customize_Setting {
return $value;
}
+ /**
+ * Retrieves the data to export to the client via JSON.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array Array of parameters passed to JavaScript.
+ */
+ public function json() {
+ return array(
+ 'value' => $this->js_value(),
+ 'transport' => $this->transport,
+ 'dirty' => $this->dirty,
+ 'type' => $this->type,
+ );
+ }
+
/**
* Validate user capabilities whether the theme supports the setting.
*
diff --git a/wp-includes/class-wp-customize-widgets.php b/wp-includes/class-wp-customize-widgets.php
index 0a73953..16549ff 100644
--- a/wp-includes/class-wp-customize-widgets.php
+++ b/wp-includes/class-wp-customize-widgets.php
@@ -349,7 +349,7 @@ final class WP_Customize_Widgets {
/**
* Ensures widgets are available for all types of previews.
*
- * When in preview, hook to 'customize_register' for settings after WordPress is loaded
+ * When in preview, hook to {@see 'customize_register'} for settings after WordPress is loaded
* so that all filters have been initialized (e.g. Widget Visibility).
*
* @since 3.9.0
@@ -455,7 +455,7 @@ final class WP_Customize_Widgets {
);
/**
- * Filter Customizer widget section arguments for a given sidebar.
+ * Filters Customizer widget section arguments for a given sidebar.
*
* @since 3.9.0
*
@@ -556,7 +556,7 @@ final class WP_Customize_Widgets {
* have widths of 400 and yet they still render fine in the Customizer panel.
*
* This method will return all Core widgets as being not wide, but this can be
- * overridden with the is_wide_widget_in_customizer filter.
+ * overridden with the {@see 'is_wide_widget_in_customizer'} filter.
*
* @since 3.9.0
* @access public
@@ -575,7 +575,7 @@ final class WP_Customize_Widgets {
$is_wide = ( $width > 250 && ! $is_core );
/**
- * Filter whether the given widget is considered "wide".
+ * Filters whether the given widget is considered "wide".
*
* @since 3.9.0
*
@@ -799,6 +799,9 @@ final class WP_Customize_Widgets {
* @access public
*/
public function print_footer_scripts() {
+ /** This action is documented in wp-admin/admin-footer.php */
+ do_action( 'admin_print_footer_scripts-widgets.php' );
+
/** This action is documented in wp-admin/admin-footer.php */
do_action( 'admin_print_footer_scripts' );
@@ -836,7 +839,7 @@ final class WP_Customize_Widgets {
$args = array_merge( $args, $overrides );
/**
- * Filter the common arguments supplied when constructing a Customizer setting.
+ * Filters the common arguments supplied when constructing a Customizer setting.
*
* @since 3.9.0
*
@@ -1061,7 +1064,7 @@ final class WP_Customize_Widgets {
* @return array
*/
public function preview_sidebars_widgets( $sidebars_widgets ) {
- $sidebars_widgets = get_option( 'sidebars_widgets' );
+ $sidebars_widgets = get_option( 'sidebars_widgets', array() );
unset( $sidebars_widgets['array_version'] );
return $sidebars_widgets;
@@ -1986,32 +1989,48 @@ final class WP_Customize_Widgets {
}
/**
+ * {@internal Missing Summary}
+ *
+ * See the {@see 'customize_dynamic_setting_args'} filter.
+ *
* @since 3.9.0
- * @deprecated 4.2.0 Deprecated in favor of customize_dynamic_setting_args filter.
+ * @deprecated 4.2.0 Deprecated in favor of the {@see 'customize_dynamic_setting_args'} filter.
*/
public function setup_widget_addition_previews() {
_deprecated_function( __METHOD__, '4.2.0' );
}
/**
+ * {@internal Missing Summary}
+ *
+ * See the {@see 'customize_dynamic_setting_args'} filter.
+ *
* @since 3.9.0
- * @deprecated 4.2.0 Deprecated in favor of customize_dynamic_setting_args filter.
+ * @deprecated 4.2.0 Deprecated in favor of the {@see 'customize_dynamic_setting_args'} filter.
*/
public function prepreview_added_sidebars_widgets() {
_deprecated_function( __METHOD__, '4.2.0' );
}
/**
+ * {@internal Missing Summary}
+ *
+ * See the {@see 'customize_dynamic_setting_args'} filter.
+ *
* @since 3.9.0
- * @deprecated 4.2.0 Deprecated in favor of customize_dynamic_setting_args filter.
+ * @deprecated 4.2.0 Deprecated in favor of the {@see 'customize_dynamic_setting_args'} filter.
*/
public function prepreview_added_widget_instance() {
_deprecated_function( __METHOD__, '4.2.0' );
}
/**
+ * {@internal Missing Summary}
+ *
+ * See the {@see 'customize_dynamic_setting_args'} filter.
+ *
* @since 3.9.0
- * @deprecated 4.2.0 Deprecated in favor of customize_dynamic_setting_args filter.
+ * @deprecated 4.2.0 Deprecated in favor of the {@see 'customize_dynamic_setting_args'} filter.
*/
public function remove_prepreview_filters() {
_deprecated_function( __METHOD__, '4.2.0' );
diff --git a/wp-includes/class-wp-editor.php b/wp-includes/class-wp-editor.php
index bfbc547..f0290b0 100644
--- a/wp-includes/class-wp-editor.php
+++ b/wp-includes/class-wp-editor.php
@@ -54,7 +54,8 @@ final class _WP_Editors {
* @type string $editor_class Extra classes to add to the editor textarea element. Default empty.
* @type bool $teeny Whether to output the minimal editor config. Examples include
* Press This and the Comment editor. Default false.
- * @type bool $dfw Deprecated in 4.1. Since 4.3 used only to enqueue wp-fullscreen-stub.js for backwards compatibility.
+ * @type bool $dfw Deprecated in 4.1. Since 4.3 used only to enqueue wp-fullscreen-stub.js
+ * for backward compatibility.
* @type bool|array $tinymce Whether to load TinyMCE. Can be used to pass settings directly to
* TinyMCE using an array. Default true.
* @type bool|array $quicktags Whether to load Quicktags. Can be used to pass settings directly to
@@ -65,7 +66,7 @@ final class _WP_Editors {
public static function parse_settings( $editor_id, $settings ) {
/**
- * Filter the wp_editor() settings.
+ * Filters the wp_editor() settings.
*
* @since 4.0.0
*
@@ -99,7 +100,7 @@ final class _WP_Editors {
if ( self::$this_tinymce ) {
if ( false !== strpos( $editor_id, '[' ) ) {
self::$this_tinymce = false;
- _deprecated_argument( 'wp_editor()', '3.9', 'TinyMCE editor IDs cannot have brackets.' );
+ _deprecated_argument( 'wp_editor()', '3.9.0', 'TinyMCE editor IDs cannot have brackets.' );
}
}
@@ -240,7 +241,7 @@ final class _WP_Editors {
}
/**
- * Filter the HTML markup output that displays the editor.
+ * Filters the HTML markup output that displays the editor.
*
* @since 2.1.0
*
@@ -257,7 +258,7 @@ final class _WP_Editors {
}
/**
- * Filter the default editor content.
+ * Filters the default editor content.
*
* @since 2.1.0
*
@@ -332,7 +333,7 @@ final class _WP_Editors {
}
/**
- * Filter the Quicktags settings.
+ * Filters the Quicktags settings.
*
* @since 3.3.0
*
@@ -361,7 +362,7 @@ final class _WP_Editors {
if ( $set['teeny'] ) {
/**
- * Filter the list of teenyMCE plugins.
+ * Filters the list of teenyMCE plugins.
*
* @since 2.7.0
*
@@ -372,7 +373,7 @@ final class _WP_Editors {
} else {
/**
- * Filter the list of TinyMCE external plugins.
+ * Filters the list of TinyMCE external plugins.
*
* The filter takes an associative array of external plugins for
* TinyMCE in the form 'plugin_name' => 'url'.
@@ -417,7 +418,7 @@ final class _WP_Editors {
}
/**
- * Filter the list of default TinyMCE plugins.
+ * Filters the list of default TinyMCE plugins.
*
* The filter specifies which of the default plugins included
* in WordPress should be added to the TinyMCE instance.
@@ -437,7 +438,7 @@ final class _WP_Editors {
if ( ! empty( $mce_external_plugins ) ) {
/**
- * Filter the translations loaded for external TinyMCE 3.x plugins.
+ * Filters the translations loaded for external TinyMCE 3.x plugins.
*
* The filter takes an associative array ('plugin_name' => 'path')
* where 'path' is the include path to the file.
@@ -575,7 +576,7 @@ final class _WP_Editors {
}
/**
- * Filter the comma-delimited list of stylesheets to load in TinyMCE.
+ * Filters the comma-delimited list of stylesheets to load in TinyMCE.
*
* @since 2.1.0
*
@@ -590,7 +591,7 @@ final class _WP_Editors {
if ( $set['teeny'] ) {
/**
- * Filter the list of teenyMCE buttons (Text tab).
+ * Filters the list of teenyMCE buttons (Text tab).
*
* @since 2.7.0
*
@@ -613,7 +614,7 @@ final class _WP_Editors {
$mce_buttons[] = 'wp_adv';
/**
- * Filter the first-row list of TinyMCE buttons (Visual tab).
+ * Filters the first-row list of TinyMCE buttons (Visual tab).
*
* @since 2.0.0
*
@@ -629,7 +630,7 @@ final class _WP_Editors {
}
/**
- * Filter the second-row list of TinyMCE buttons (Visual tab).
+ * Filters the second-row list of TinyMCE buttons (Visual tab).
*
* @since 2.0.0
*
@@ -639,7 +640,7 @@ final class _WP_Editors {
$mce_buttons_2 = apply_filters( 'mce_buttons_2', $mce_buttons_2, $editor_id );
/**
- * Filter the third-row list of TinyMCE buttons (Visual tab).
+ * Filters the third-row list of TinyMCE buttons (Visual tab).
*
* @since 2.0.0
*
@@ -649,7 +650,7 @@ final class _WP_Editors {
$mce_buttons_3 = apply_filters( 'mce_buttons_3', array(), $editor_id );
/**
- * Filter the fourth-row list of TinyMCE buttons (Visual tab).
+ * Filters the fourth-row list of TinyMCE buttons (Visual tab).
*
* @since 2.5.0
*
@@ -710,7 +711,7 @@ final class _WP_Editors {
if ( $set['teeny'] ) {
/**
- * Filter the teenyMCE config before init.
+ * Filters the teenyMCE config before init.
*
* @since 2.7.0
*
@@ -721,7 +722,7 @@ final class _WP_Editors {
} else {
/**
- * Filter the TinyMCE config before init.
+ * Filters the TinyMCE config before init.
*
* @since 2.5.0
*
@@ -788,7 +789,8 @@ final class _WP_Editors {
if ( self::$has_medialib ) {
add_thickbox();
- wp_enqueue_script('media-upload');
+ wp_enqueue_script( 'media-upload' );
+ wp_enqueue_script( 'wp-embed' );
}
/**
@@ -846,7 +848,7 @@ final class _WP_Editors {
'Clear formatting' => __( 'Clear formatting' ),
'Bold' => __( 'Bold' ),
'Italic' => __( 'Italic' ),
- 'Code' => _x( 'Code', 'editor button' ),
+ 'Code' => __( 'Code' ),
'Source code' => __( 'Source code' ),
'Font Family' => __( 'Font Family' ),
'Font Sizes' => __( 'Font Sizes' ),
@@ -1021,7 +1023,8 @@ final class _WP_Editors {
/* translators: word count */
'Words: {0}' => sprintf( __( 'Words: %s' ), '{0}' ),
'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.' => __( 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.' ) . "\n\n" . __( 'If you’re looking to paste rich content from Microsoft Word, try turning this option off. The editor will clean up text pasted from Word automatically.' ),
- 'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help' => __( 'Rich Text Area. Press Alt-Shift-H for help' ),
+ 'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help' => __( 'Rich Text Area. Press Alt-Shift-H for help.' ),
+ 'Rich Text Area. Press Control-Option-H for help.' => __( 'Rich Text Area. Press Control-Option-H for help.' ),
'You have unsaved changes are you sure you want to navigate away?' => __( 'The changes you made will be lost if you navigate away from this page.' ),
'Your browser doesn\'t support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.' => __( 'Your browser does not support direct access to the clipboard. Please use keyboard shortcuts or your browser’s edit menu instead.' ),
@@ -1062,6 +1065,7 @@ final class _WP_Editors {
'Ctrl + letter:' => __( 'Ctrl + letter:' ),
'Letter' => __( 'Letter' ),
'Action' => __( 'Action' ),
+ 'Warning: the link has been inserted but may have errors. Please test it.' => __( 'Warning: the link has been inserted but may have errors. Please test it.' ),
'To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.' =>
__( 'To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.' ),
'When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.' =>
@@ -1088,7 +1092,7 @@ final class _WP_Editors {
}
/**
- * Filter translated strings prepared for TinyMCE.
+ * Filters translated strings prepared for TinyMCE.
*
* @since 3.9.0
*
@@ -1136,7 +1140,7 @@ final class _WP_Editors {
global $wp_version, $tinymce_version, $concatenate_scripts, $compress_scripts;
/**
- * Filter "tiny_mce_version" is deprecated
+ * Filters "tiny_mce_version" is deprecated
*
* The tiny_mce_version filter is not needed since external plugins are loaded directly by TinyMCE.
* These plugins can be refreshed by appending query string to the URL passed to "mce_external_plugins" filter.
@@ -1282,8 +1286,9 @@ final class _WP_Editors {
1 ? $query['posts_per_page'] * ( $args['pagenum'] - 1 ) : 0;
/**
- * Filter the link query arguments.
+ * Filters the link query arguments.
*
* Allows modification of the link query arguments before querying.
*
@@ -1370,7 +1375,7 @@ final class _WP_Editors {
}
/**
- * Filter the link query results.
+ * Filters the link query results.
*
* Allows modification of the returned link query results.
*
diff --git a/wp-includes/class-wp-embed.php b/wp-includes/class-wp-embed.php
index 40eecfb..17a976f 100644
--- a/wp-includes/class-wp-embed.php
+++ b/wp-includes/class-wp-embed.php
@@ -16,7 +16,12 @@ class WP_Embed {
/**
* When a URL cannot be embedded, return false instead of returning a link
- * or the URL. Bypasses the 'embed_maybe_make_link' filter.
+ * or the URL.
+ *
+ * Bypasses the {@see 'embed_maybe_make_link'} filter.
+ *
+ * @access public
+ * @var bool
*/
public $return_false_on_fail = false;
@@ -33,7 +38,7 @@ class WP_Embed {
// Attempts to embed all URLs in a post
add_filter( 'the_content', array( $this, 'autoembed' ), 8 );
- // After a post is saved, cache oEmbed items via AJAX
+ // After a post is saved, cache oEmbed items via Ajax
add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) );
add_action( 'edit_page_form', array( $this, 'maybe_run_ajax_cache' ) );
}
@@ -43,7 +48,7 @@ class WP_Embed {
*
* Since the [embed] shortcode needs to be run earlier than other shortcodes,
* this function removes all existing shortcodes, registers the [embed] shortcode,
- * calls {@link do_shortcode()}, and then re-registers the old shortcodes.
+ * calls do_shortcode(), and then re-registers the old shortcodes.
*
* @global array $shortcode_tags
*
@@ -70,7 +75,7 @@ class WP_Embed {
/**
* If a post/page was saved, then output JavaScript to make
- * an AJAX request that will call WP_Embed::cache_oembed().
+ * an Ajax request that will call WP_Embed::cache_oembed().
*/
public function maybe_run_ajax_cache() {
$post = get_post();
@@ -88,7 +93,10 @@ class WP_Embed {
}
/**
- * Register an embed handler. Do not use this function directly, use {@link wp_embed_register_handler()} instead.
+ * Registers an embed handler.
+ *
+ * Do not use this function directly, use wp_embed_register_handler() instead.
+ *
* This function should probably also only be used for sites that do not support oEmbed.
*
* @param string $id An internal ID/name for the handler. Needs to be unique.
@@ -104,7 +112,9 @@ class WP_Embed {
}
/**
- * Unregister a previously registered embed handler. Do not use this function directly, use {@link wp_embed_unregister_handler()} instead.
+ * Unregisters a previously-registered embed handler.
+ *
+ * Do not use this function directly, use wp_embed_unregister_handler() instead.
*
* @param string $id The handler ID that should be removed.
* @param int $priority Optional. The priority of the handler to be removed (default: 10).
@@ -114,10 +124,11 @@ class WP_Embed {
}
/**
- * The {@link do_shortcode()} callback function.
+ * The do_shortcode() callback function.
*
- * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of the registered embed handlers.
- * If none of the regex matches and it's enabled, then the URL will be given to the {@link WP_oEmbed} class.
+ * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of
+ * the registered embed handlers. If none of the regex matches and it's enabled, then the URL
+ * will be given to the WP_oEmbed class.
*
* @param array $attr {
* Shortcode attributes. Optional.
@@ -159,7 +170,7 @@ class WP_Embed {
if ( preg_match( $handler['regex'], $url, $matches ) && is_callable( $handler['callback'] ) ) {
if ( false !== $return = call_user_func( $handler['callback'], $matches, $attr, $url, $rawattr ) )
/**
- * Filter the returned embed handler.
+ * Filters the returned embed handler.
*
* @since 2.9.0
*
@@ -187,7 +198,7 @@ class WP_Embed {
$cachekey_time = '_oembed_time_' . $key_suffix;
/**
- * Filter the oEmbed TTL value (time to live).
+ * Filters the oEmbed TTL value (time to live).
*
* @since 4.0.0
*
@@ -214,7 +225,7 @@ class WP_Embed {
if ( ! empty( $cache ) ) {
/**
- * Filter the cached oEmbed HTML.
+ * Filters the cached oEmbed HTML.
*
* @since 2.9.0
*
@@ -230,7 +241,7 @@ class WP_Embed {
}
/**
- * Filter whether to inspect the given URL for discoverable link tags.
+ * Filters whether to inspect the given URL for discoverable link tags.
*
* @since 2.9.0
* @since 4.4.0 The default value changed to true.
@@ -289,7 +300,7 @@ class WP_Embed {
$post_types = get_post_types( array( 'show_ui' => true ) );
/**
- * Filter the array of post types to cache oEmbed results for.
+ * Filters the array of post types to cache oEmbed results for.
*
* @since 2.9.0
*
@@ -312,9 +323,9 @@ class WP_Embed {
}
/**
- * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.
+ * Passes any unlinked URLs that are on their own line to WP_Embed::shortcode() for potential embedding.
*
- * @uses WP_Embed::autoembed_callback()
+ * @see WP_Embed::autoembed_callback()
*
* @param string $content The content to be searched.
* @return string Potentially modified $content.
@@ -323,15 +334,19 @@ class WP_Embed {
// Replace line breaks from all HTML elements with placeholders.
$content = wp_replace_in_html_tags( $content, array( "\n" => '' ) );
- // Find URLs that are on their own line.
- $content = preg_replace_callback( '|^(\s*)(https?://[^\s"]+)(\s*)$|im', array( $this, 'autoembed_callback' ), $content );
+ if ( preg_match( '#(^|\s|>)https?://#i', $content ) ) {
+ // Find URLs on their own line.
+ $content = preg_replace_callback( '|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', array( $this, 'autoembed_callback' ), $content );
+ // Find URLs in their own paragraph.
+ $content = preg_replace_callback( '|(
]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i', array( $this, 'autoembed_callback' ), $content );
+ }
// Put the line breaks back.
return str_replace( '', "\n", $content );
}
/**
- * Callback function for {@link WP_Embed::autoembed()}.
+ * Callback function for WP_Embed::autoembed().
*
* @param array $match A regex match array.
* @return string The embed HTML on success, otherwise the original URL.
@@ -359,7 +374,7 @@ class WP_Embed {
$output = ( $this->linkifunknown ) ? '' . esc_html($url) . '' : $url;
/**
- * Filter the returned, maybe-linked embed URL.
+ * Filters the returned, maybe-linked embed URL.
*
* @since 2.9.0
*
diff --git a/wp-includes/class-wp-error.php b/wp-includes/class-wp-error.php
index 0969b12..1010adb 100644
--- a/wp-includes/class-wp-error.php
+++ b/wp-includes/class-wp-error.php
@@ -11,8 +11,8 @@
* WordPress Error class.
*
* Container for checking for WordPress errors and error messages. Return
- * WP_Error and use {@link is_wp_error()} to check if this class is returned.
- * Many core WordPress functions pass this class in the event of an error and
+ * WP_Error and use is_wp_error() to check if this class is returned. Many
+ * core WordPress functions pass this class in the event of an error and
* if not handled properly will result in code errors.
*
* @package WordPress
diff --git a/wp-includes/class-wp-http-cookie.php b/wp-includes/class-wp-http-cookie.php
index 95148ef..d2affc2 100644
--- a/wp-includes/class-wp-http-cookie.php
+++ b/wp-includes/class-wp-http-cookie.php
@@ -195,7 +195,7 @@ class WP_Http_Cookie {
return '';
/**
- * Filter the header-encoded cookie value.
+ * Filters the header-encoded cookie value.
*
* @since 3.4.0
*
@@ -216,4 +216,26 @@ class WP_Http_Cookie {
public function getFullHeader() {
return 'Cookie: ' . $this->getHeaderValue();
}
+
+ /**
+ * Retrieves cookie attributes.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array {
+ * List of attributes.
+ *
+ * @type string $expires When the cookie expires.
+ * @type string $path Cookie URL path.
+ * @type string $domain Cookie domain.
+ * }
+ */
+ public function get_attributes() {
+ return array(
+ 'expires' => $this->expires,
+ 'path' => $this->path,
+ 'domain' => $this->domain,
+ );
+ }
}
diff --git a/wp-includes/class-wp-http-curl.php b/wp-includes/class-wp-http-curl.php
index a161677..790e93c 100644
--- a/wp-includes/class-wp-http-curl.php
+++ b/wp-includes/class-wp-http-curl.php
@@ -373,7 +373,7 @@ class WP_Http_Curl {
}
/**
- * Filter whether cURL can be used as a transport for retrieving a URL.
+ * Filters whether cURL can be used as a transport for retrieving a URL.
*
* @since 2.7.0
*
diff --git a/wp-includes/class-wp-http-encoding.php b/wp-includes/class-wp-http-encoding.php
index eee8469..81cfba8 100644
--- a/wp-includes/class-wp-http-encoding.php
+++ b/wp-includes/class-wp-http-encoding.php
@@ -88,8 +88,8 @@ class WP_Http_Encoding {
*
* @since 2.8.1
* @link https://core.trac.wordpress.org/ticket/18273
- * @link http://au2.php.net/manual/en/function.gzinflate.php#70875
- * @link http://au2.php.net/manual/en/function.gzinflate.php#77336
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#70875
+ * @link https://secure.php.net/manual/en/function.gzinflate.php#77336
*
* @static
*
@@ -161,7 +161,7 @@ class WP_Http_Encoding {
}
/**
- * Filter the allowed encoding types.
+ * Filters the allowed encoding types.
*
* @since 3.6.0
*
diff --git a/wp-includes/class-wp-http-ixr-client.php b/wp-includes/class-wp-http-ixr-client.php
index 601ca14..e4ed550 100644
--- a/wp-includes/class-wp-http-ixr-client.php
+++ b/wp-includes/class-wp-http-ixr-client.php
@@ -69,7 +69,7 @@ class WP_HTTP_IXR_Client extends IXR_Client {
}
/**
- * Filter the headers collection to be sent to the XML-RPC server.
+ * Filters the headers collection to be sent to the XML-RPC server.
*
* @since 4.4.0
*
diff --git a/wp-includes/class-wp-http-proxy.php b/wp-includes/class-wp-http-proxy.php
index af9d338..7ae3d4e 100644
--- a/wp-includes/class-wp-http-proxy.php
+++ b/wp-includes/class-wp-http-proxy.php
@@ -176,7 +176,7 @@ class WP_HTTP_Proxy {
$home = parse_url( get_option('siteurl') );
/**
- * Filter whether to preempt sending the request through the proxy server.
+ * Filters whether to preempt sending the request through the proxy server.
*
* Returning false will bypass the proxy; returning true will send
* the request through the proxy. Returning null bypasses the filter.
diff --git a/wp-includes/class-wp-http-requests-response.php b/wp-includes/class-wp-http-requests-response.php
new file mode 100644
index 0000000..ab0a5cc
--- /dev/null
+++ b/wp-includes/class-wp-http-requests-response.php
@@ -0,0 +1,208 @@
+response = $response;
+ $this->filename = $filename;
+ }
+
+ /**
+ * Retrieves the response object for the request.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return Requests_Response HTTP response.
+ */
+ public function get_response_object() {
+ return $this->response;
+ }
+
+ /**
+ * Retrieves headers associated with the response.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array Map of header name to header value.
+ */
+ public function get_headers() {
+ // Ensure headers remain case-insensitive
+ $converted = new Requests_Utility_CaseInsensitiveDictionary();
+
+ foreach ( $this->response->headers->getAll() as $key => $value ) {
+ if ( count( $value ) === 1 ) {
+ $converted[ $key ] = $value[0];
+ }
+ else {
+ $converted[ $key ] = $value;
+ }
+ }
+
+ return $converted;
+ }
+
+ /**
+ * Sets all header values.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param array $headers Map of header name to header value.
+ */
+ public function set_headers( $headers ) {
+ $this->response->headers = new Requests_Response_Headers( $headers );
+ }
+
+ /**
+ * Sets a single HTTP header.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Header name.
+ * @param string $value Header value.
+ * @param bool $replace Optional. Whether to replace an existing header of the same name.
+ * Default true.
+ */
+ public function header( $key, $value, $replace = true ) {
+ if ( $replace ) {
+ unset( $this->response->headers[ $key ] );
+ }
+
+ $this->response->headers[ $key ] = $value;
+ }
+
+ /**
+ * Retrieves the HTTP return code for the response.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return int The 3-digit HTTP status code.
+ */
+ public function get_status() {
+ return $this->response->status_code;
+ }
+
+ /**
+ * Sets the 3-digit HTTP status code.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param int $code HTTP status.
+ */
+ public function set_status( $code ) {
+ $this->response->status_code = absint( $code );
+ }
+
+ /**
+ * Retrieves the response data.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return mixed Response data.
+ */
+ public function get_data() {
+ return $this->response->body;
+ }
+
+ /**
+ * Sets the response data.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param mixed $data Response data.
+ */
+ public function set_data( $data ) {
+ $this->response->body = $data;
+ }
+
+ /**
+ * Retrieves cookies from the response.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return WP_HTTP_Cookie[] List of cookie objects.
+ */
+ public function get_cookies() {
+ $cookies = array();
+ foreach ( $this->response->cookies as $cookie ) {
+ $cookies[] = new WP_Http_Cookie( array(
+ 'name' => $cookie->name,
+ 'value' => urldecode( $cookie->value ),
+ 'expires' => isset( $cookie->attributes['expires'] ) ? $cookie->attributes['expires'] : null,
+ 'path' => isset( $cookie->attributes['path'] ) ? $cookie->attributes['path'] : null,
+ 'domain' => isset( $cookie->attributes['domain'] ) ? $cookie->attributes['domain'] : null,
+ ));
+ }
+
+ return $cookies;
+ }
+
+ /**
+ * Converts the object to a WP_Http response array.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array WP_Http response array, per WP_Http::request().
+ */
+ public function to_array() {
+ return array(
+ 'headers' => $this->get_headers(),
+ 'body' => $this->get_data(),
+ 'response' => array(
+ 'code' => $this->get_status(),
+ 'message' => get_status_header_desc( $this->get_status() ),
+ ),
+ 'cookies' => $this->get_cookies(),
+ 'filename' => $this->filename,
+ );
+ }
+}
diff --git a/wp-includes/class-wp-http-streams.php b/wp-includes/class-wp-http-streams.php
index 80f30a4..2f10c67 100644
--- a/wp-includes/class-wp-http-streams.php
+++ b/wp-includes/class-wp-http-streams.php
@@ -89,7 +89,7 @@ class WP_Http_Streams {
$ssl_verify = isset( $r['sslverify'] ) && $r['sslverify'];
if ( $is_local ) {
/**
- * Filter whether SSL should be verified for local requests.
+ * Filters whether SSL should be verified for local requests.
*
* @since 2.8.0
*
@@ -98,7 +98,7 @@ class WP_Http_Streams {
$ssl_verify = apply_filters( 'https_local_ssl_verify', $ssl_verify );
} elseif ( ! $is_local ) {
/**
- * Filter whether SSL should be verified for non-local requests.
+ * Filters whether SSL should be verified for non-local requests.
*
* @since 2.8.0
*
@@ -401,7 +401,7 @@ class WP_Http_Streams {
}
/**
- * Filter whether streams can be used as a transport for retrieving a URL.
+ * Filters whether streams can be used as a transport for retrieving a URL.
*
* @since 2.7.0
*
@@ -415,7 +415,7 @@ class WP_Http_Streams {
/**
* Deprecated HTTP Transport method which used fsockopen.
*
- * This class is not used, and is included for backwards compatibility only.
+ * This class is not used, and is included for backward compatibility only.
* All code should make use of WP_Http directly through its API.
*
* @see WP_HTTP::request
@@ -424,5 +424,5 @@ class WP_Http_Streams {
* @deprecated 3.7.0 Please use WP_HTTP::request() directly
*/
class WP_HTTP_Fsockopen extends WP_HTTP_Streams {
- // For backwards compatibility for users who are using the class directly.
+ // For backward compatibility for users who are using the class directly.
}
diff --git a/wp-includes/class-wp-image-editor-gd.php b/wp-includes/class-wp-image-editor-gd.php
index 2093c6b..d7823eb 100644
--- a/wp-includes/class-wp-image-editor-gd.php
+++ b/wp-includes/class-wp-image-editor-gd.php
@@ -96,16 +96,8 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
if ( ! is_file( $this->file ) && ! preg_match( '|^https?://|', $this->file ) )
return new WP_Error( 'error_loading_image', __('File doesn’t exist?'), $this->file );
- /**
- * Filter the memory limit allocated for image manipulation.
- *
- * @since 3.5.0
- *
- * @param int|string $limit Maximum memory limit to allocate for images. Default WP_MAX_MEMORY_LIMIT.
- * Accepts an integer (bytes), or a shorthand string notation, such as '256M'.
- */
- // Set artificially high because GD uses uncompressed images in memory
- @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) );
+ // Set artificially high because GD uses uncompressed images in memory.
+ wp_raise_memory_limit( 'image' );
$this->image = @imagecreatefromstring( file_get_contents( $this->file ) );
@@ -429,7 +421,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
@ chmod( $filename, $perms );
/**
- * Filter the name of the saved image file.
+ * Filters the name of the saved image file.
*
* @since 2.6.0
*
diff --git a/wp-includes/class-wp-image-editor-imagick.php b/wp-includes/class-wp-image-editor-imagick.php
index 74ba793..82b872d 100644
--- a/wp-includes/class-wp-image-editor-imagick.php
+++ b/wp-includes/class-wp-image-editor-imagick.php
@@ -137,9 +137,11 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
if ( ! is_file( $this->file ) && ! preg_match( '|^https?://|', $this->file ) )
return new WP_Error( 'error_loading_image', __('File doesn’t exist?'), $this->file );
- /** This filter is documented in wp-includes/class-wp-image-editor-imagick.php */
- // Even though Imagick uses less PHP memory than GD, set higher limit for users that have low PHP.ini limits
- @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) );
+ /*
+ * Even though Imagick uses less PHP memory than GD, set higher limit
+ * for users that have low PHP.ini limits.
+ */
+ wp_raise_memory_limit( 'image' );
try {
$this->image = new Imagick( $this->file );
@@ -311,7 +313,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
}
/**
- * Filter whether to strip metadata from images when they're resized.
+ * Filters whether to strip metadata from images when they're resized.
*
* This filter only applies when resizing using the Imagick editor since GD
* always strips profiles by default.
@@ -343,7 +345,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
* Use resizeImage() when it's available and a valid filter value is set.
* Otherwise, fall back to the scaleImage() method for resizing, which
* results in better image quality over resizeImage() with default filter
- * settings and retains backwards compatibility with pre 4.5 functionality.
+ * settings and retains backward compatibility with pre 4.5 functionality.
*/
if ( is_callable( array( $this->image, 'resizeImage' ) ) && $filter ) {
$this->image->setOption( 'filter:support', '2.0' );
diff --git a/wp-includes/class-wp-image-editor.php b/wp-includes/class-wp-image-editor.php
index 5b6f4ac..c046823 100644
--- a/wp-includes/class-wp-image-editor.php
+++ b/wp-includes/class-wp-image-editor.php
@@ -237,7 +237,7 @@ abstract class WP_Image_Editor {
public function set_quality( $quality = null ) {
if ( null === $quality ) {
/**
- * Filter the default image compression quality setting.
+ * Filters the default image compression quality setting.
*
* Applies only during initial editor instantiation, or when set_quality() is run
* manually without the `$quality` argument.
@@ -253,7 +253,7 @@ abstract class WP_Image_Editor {
if ( 'image/jpeg' == $this->mime_type ) {
/**
- * Filter the JPEG compression quality for backward-compatibility.
+ * Filters the JPEG compression quality for backward-compatibility.
*
* Applies only during initial editor instantiation, or when set_quality() is run
* manually without the `$quality` argument.
@@ -276,7 +276,7 @@ abstract class WP_Image_Editor {
}
}
- // Allow 0, but squash to 1 due to identical images in GD, and for backwards compatibility.
+ // Allow 0, but squash to 1 due to identical images in GD, and for backward compatibility.
if ( 0 === $quality ) {
$quality = 1;
}
@@ -333,7 +333,7 @@ abstract class WP_Image_Editor {
// If not, choose a default instead.
if ( ! $this->supports_mime_type( $mime_type ) ) {
/**
- * Filter default mime type prior to getting the file extension.
+ * Filters default mime type prior to getting the file extension.
*
* @see wp_get_mime_types()
*
diff --git a/wp-includes/class-wp-locale.php b/wp-includes/class-wp-locale.php
new file mode 100644
index 0000000..e8dcfc6
--- /dev/null
+++ b/wp-includes/class-wp-locale.php
@@ -0,0 +1,397 @@
+init();
+ $this->register_globals();
+ }
+
+ /**
+ * Sets up the translated strings and object properties.
+ *
+ * The method creates the translatable strings for various
+ * calendar elements. Which allows for specifying locale
+ * specific calendar names and text direction.
+ *
+ * @since 2.1.0
+ * @access private
+ *
+ * @global string $text_direction
+ * @global string $wp_version
+ */
+ public function init() {
+ // The Weekdays
+ $this->weekday[0] = /* translators: weekday */ __('Sunday');
+ $this->weekday[1] = /* translators: weekday */ __('Monday');
+ $this->weekday[2] = /* translators: weekday */ __('Tuesday');
+ $this->weekday[3] = /* translators: weekday */ __('Wednesday');
+ $this->weekday[4] = /* translators: weekday */ __('Thursday');
+ $this->weekday[5] = /* translators: weekday */ __('Friday');
+ $this->weekday[6] = /* translators: weekday */ __('Saturday');
+
+ // The first letter of each day.
+ $this->weekday_initial[ __( 'Sunday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Sunday initial' );
+ $this->weekday_initial[ __( 'Monday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'M', 'Monday initial' );
+ $this->weekday_initial[ __( 'Tuesday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Tuesday initial' );
+ $this->weekday_initial[ __( 'Wednesday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'W', 'Wednesday initial' );
+ $this->weekday_initial[ __( 'Thursday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Thursday initial' );
+ $this->weekday_initial[ __( 'Friday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'F', 'Friday initial' );
+ $this->weekday_initial[ __( 'Saturday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Saturday initial' );
+
+ // Abbreviations for each day.
+ $this->weekday_abbrev[__('Sunday')] = /* translators: three-letter abbreviation of the weekday */ __('Sun');
+ $this->weekday_abbrev[__('Monday')] = /* translators: three-letter abbreviation of the weekday */ __('Mon');
+ $this->weekday_abbrev[__('Tuesday')] = /* translators: three-letter abbreviation of the weekday */ __('Tue');
+ $this->weekday_abbrev[__('Wednesday')] = /* translators: three-letter abbreviation of the weekday */ __('Wed');
+ $this->weekday_abbrev[__('Thursday')] = /* translators: three-letter abbreviation of the weekday */ __('Thu');
+ $this->weekday_abbrev[__('Friday')] = /* translators: three-letter abbreviation of the weekday */ __('Fri');
+ $this->weekday_abbrev[__('Saturday')] = /* translators: three-letter abbreviation of the weekday */ __('Sat');
+
+ // The Months
+ $this->month['01'] = /* translators: month name */ __( 'January' );
+ $this->month['02'] = /* translators: month name */ __( 'February' );
+ $this->month['03'] = /* translators: month name */ __( 'March' );
+ $this->month['04'] = /* translators: month name */ __( 'April' );
+ $this->month['05'] = /* translators: month name */ __( 'May' );
+ $this->month['06'] = /* translators: month name */ __( 'June' );
+ $this->month['07'] = /* translators: month name */ __( 'July' );
+ $this->month['08'] = /* translators: month name */ __( 'August' );
+ $this->month['09'] = /* translators: month name */ __( 'September' );
+ $this->month['10'] = /* translators: month name */ __( 'October' );
+ $this->month['11'] = /* translators: month name */ __( 'November' );
+ $this->month['12'] = /* translators: month name */ __( 'December' );
+
+ // The Months, genitive
+ $this->month_genitive['01'] = /* translators: month name, genitive */ _x( 'January', 'genitive' );
+ $this->month_genitive['02'] = /* translators: month name, genitive */ _x( 'February', 'genitive' );
+ $this->month_genitive['03'] = /* translators: month name, genitive */ _x( 'March', 'genitive' );
+ $this->month_genitive['04'] = /* translators: month name, genitive */ _x( 'April', 'genitive' );
+ $this->month_genitive['05'] = /* translators: month name, genitive */ _x( 'May', 'genitive' );
+ $this->month_genitive['06'] = /* translators: month name, genitive */ _x( 'June', 'genitive' );
+ $this->month_genitive['07'] = /* translators: month name, genitive */ _x( 'July', 'genitive' );
+ $this->month_genitive['08'] = /* translators: month name, genitive */ _x( 'August', 'genitive' );
+ $this->month_genitive['09'] = /* translators: month name, genitive */ _x( 'September', 'genitive' );
+ $this->month_genitive['10'] = /* translators: month name, genitive */ _x( 'October', 'genitive' );
+ $this->month_genitive['11'] = /* translators: month name, genitive */ _x( 'November', 'genitive' );
+ $this->month_genitive['12'] = /* translators: month name, genitive */ _x( 'December', 'genitive' );
+
+ // Abbreviations for each month.
+ $this->month_abbrev[ __( 'January' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jan', 'January abbreviation' );
+ $this->month_abbrev[ __( 'February' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Feb', 'February abbreviation' );
+ $this->month_abbrev[ __( 'March' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Mar', 'March abbreviation' );
+ $this->month_abbrev[ __( 'April' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Apr', 'April abbreviation' );
+ $this->month_abbrev[ __( 'May' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'May', 'May abbreviation' );
+ $this->month_abbrev[ __( 'June' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jun', 'June abbreviation' );
+ $this->month_abbrev[ __( 'July' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Jul', 'July abbreviation' );
+ $this->month_abbrev[ __( 'August' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Aug', 'August abbreviation' );
+ $this->month_abbrev[ __( 'September' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Sep', 'September abbreviation' );
+ $this->month_abbrev[ __( 'October' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Oct', 'October abbreviation' );
+ $this->month_abbrev[ __( 'November' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Nov', 'November abbreviation' );
+ $this->month_abbrev[ __( 'December' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Dec', 'December abbreviation' );
+
+ // The Meridiems
+ $this->meridiem['am'] = __('am');
+ $this->meridiem['pm'] = __('pm');
+ $this->meridiem['AM'] = __('AM');
+ $this->meridiem['PM'] = __('PM');
+
+ // Numbers formatting
+ // See https://secure.php.net/number_format
+
+ /* translators: $thousands_sep argument for https://secure.php.net/number_format, default is , */
+ $thousands_sep = __( 'number_format_thousands_sep' );
+
+ if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) {
+ // Replace space with a non-breaking space to avoid wrapping.
+ $thousands_sep = str_replace( ' ', ' ', $thousands_sep );
+ } else {
+ // PHP < 5.4.0 does not support multiple bytes in thousands separator.
+ $thousands_sep = str_replace( array( ' ', ' ' ), ' ', $thousands_sep );
+ }
+
+ $this->number_format['thousands_sep'] = ( 'number_format_thousands_sep' === $thousands_sep ) ? ',' : $thousands_sep;
+
+ /* translators: $dec_point argument for https://secure.php.net/number_format, default is . */
+ $decimal_point = __( 'number_format_decimal_point' );
+
+ $this->number_format['decimal_point'] = ( 'number_format_decimal_point' === $decimal_point ) ? '.' : $decimal_point;
+
+ // Set text direction.
+ if ( isset( $GLOBALS['text_direction'] ) )
+ $this->text_direction = $GLOBALS['text_direction'];
+ /* translators: 'rtl' or 'ltr'. This sets the text direction for WordPress. */
+ elseif ( 'rtl' == _x( 'ltr', 'text direction' ) )
+ $this->text_direction = 'rtl';
+
+ if ( 'rtl' === $this->text_direction && strpos( $GLOBALS['wp_version'], '-src' ) ) {
+ $this->text_direction = 'ltr';
+ add_action( 'all_admin_notices', array( $this, 'rtl_src_admin_notice' ) );
+ }
+ }
+
+ /**
+ * Outputs an admin notice if the /build directory must be used for RTL.
+ *
+ * @since 3.8.0
+ * @access public
+ */
+ public function rtl_src_admin_notice() {
+ /* translators: %s: Name of the directory (build) */
+ echo '
' . sprintf( __( 'The %s directory of the develop repository must be used for RTL.' ), 'build' ) . '
';
+ }
+
+ /**
+ * Retrieve the full translated weekday word.
+ *
+ * Week starts on translated Sunday and can be fetched
+ * by using 0 (zero). So the week starts with 0 (zero)
+ * and ends on Saturday with is fetched by using 6 (six).
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param int $weekday_number 0 for Sunday through 6 Saturday
+ * @return string Full translated weekday
+ */
+ public function get_weekday($weekday_number) {
+ return $this->weekday[$weekday_number];
+ }
+
+ /**
+ * Retrieve the translated weekday initial.
+ *
+ * The weekday initial is retrieved by the translated
+ * full weekday word. When translating the weekday initial
+ * pay attention to make sure that the starting letter does
+ * not conflict.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $weekday_name
+ * @return string
+ */
+ public function get_weekday_initial($weekday_name) {
+ return $this->weekday_initial[$weekday_name];
+ }
+
+ /**
+ * Retrieve the translated weekday abbreviation.
+ *
+ * The weekday abbreviation is retrieved by the translated
+ * full weekday word.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $weekday_name Full translated weekday word
+ * @return string Translated weekday abbreviation
+ */
+ public function get_weekday_abbrev($weekday_name) {
+ return $this->weekday_abbrev[$weekday_name];
+ }
+
+ /**
+ * Retrieve the full translated month by month number.
+ *
+ * The $month_number parameter has to be a string
+ * because it must have the '0' in front of any number
+ * that is less than 10. Starts from '01' and ends at
+ * '12'.
+ *
+ * You can use an integer instead and it will add the
+ * '0' before the numbers less than 10 for you.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string|int $month_number '01' through '12'
+ * @return string Translated full month name
+ */
+ public function get_month($month_number) {
+ return $this->month[zeroise($month_number, 2)];
+ }
+
+ /**
+ * Retrieve translated version of month abbreviation string.
+ *
+ * The $month_name parameter is expected to be the translated or
+ * translatable version of the month.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $month_name Translated month to get abbreviated version
+ * @return string Translated abbreviated month
+ */
+ public function get_month_abbrev($month_name) {
+ return $this->month_abbrev[$month_name];
+ }
+
+ /**
+ * Retrieve translated version of meridiem string.
+ *
+ * The $meridiem parameter is expected to not be translated.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $meridiem Either 'am', 'pm', 'AM', or 'PM'. Not translated version.
+ * @return string Translated version
+ */
+ public function get_meridiem($meridiem) {
+ return $this->meridiem[$meridiem];
+ }
+
+ /**
+ * Global variables are deprecated.
+ *
+ * For backward compatibility only.
+ *
+ * @deprecated For backward compatibility only.
+ * @access private
+ *
+ * @global array $weekday
+ * @global array $weekday_initial
+ * @global array $weekday_abbrev
+ * @global array $month
+ * @global array $month_abbrev
+ *
+ * @since 2.1.0
+ */
+ public function register_globals() {
+ $GLOBALS['weekday'] = $this->weekday;
+ $GLOBALS['weekday_initial'] = $this->weekday_initial;
+ $GLOBALS['weekday_abbrev'] = $this->weekday_abbrev;
+ $GLOBALS['month'] = $this->month;
+ $GLOBALS['month_abbrev'] = $this->month_abbrev;
+ }
+
+ /**
+ * Checks if current locale is RTL.
+ *
+ * @since 3.0.0
+ * @return bool Whether locale is RTL.
+ */
+ public function is_rtl() {
+ return 'rtl' == $this->text_direction;
+ }
+
+ /**
+ * Register date/time format strings for general POT.
+ *
+ * Private, unused method to add some date/time formats translated
+ * on wp-admin/options-general.php to the general POT that would
+ * otherwise be added to the admin POT.
+ *
+ * @since 3.6.0
+ */
+ public function _strings_for_pot() {
+ /* translators: localized date format, see https://secure.php.net/date */
+ __( 'F j, Y' );
+ /* translators: localized time format, see https://secure.php.net/date */
+ __( 'g:i a' );
+ /* translators: localized date and time format, see https://secure.php.net/date */
+ __( 'F j, Y g:i a' );
+ }
+}
diff --git a/wp-includes/class-wp-meta-query.php b/wp-includes/class-wp-meta-query.php
index 5716b5f..4019912 100644
--- a/wp-includes/class-wp-meta-query.php
+++ b/wp-includes/class-wp-meta-query.php
@@ -12,7 +12,8 @@
*
* Used for generating SQL clauses that filter a primary query according to metadata keys and values.
*
- * `WP_Meta_Query` is a helper that allows primary query classes, such as {@see WP_Query} and {@see WP_User_Query},
+ * WP_Meta_Query is a helper that allows primary query classes, such as WP_Query and WP_User_Query,
+ *
* to filter their results by object metadata, by generating `JOIN` and `WHERE` subclauses to be attached
* to the primary SQL query string.
*
@@ -24,7 +25,7 @@ class WP_Meta_Query {
/**
* Array of metadata queries.
*
- * See {@see WP_Meta_Query::__construct()} for information on meta query arguments.
+ * See WP_Meta_Query::__construct() for information on meta query arguments.
*
* @since 3.2.0
* @access public
@@ -113,8 +114,8 @@ class WP_Meta_Query {
* @access public
*
* @param array $meta_query {
- * Array of meta query clauses. When first-order clauses use strings as their array keys, they may be
- * referenced in the 'orderby' parameter of the parent query.
+ * Array of meta query clauses. When first-order clauses or sub-clauses use strings as
+ * their array keys, they may be referenced in the 'orderby' parameter of the parent query.
*
* @type string $relation Optional. The MySQL keyword used to join
* the clauses of the query. Accepts 'AND', or 'OR'. Default 'AND'.
@@ -326,6 +327,8 @@ class WP_Meta_Query {
return false;
}
+ $this->table_aliases = array();
+
$this->meta_table = $meta_table;
$this->meta_id_column = sanitize_key( $type . '_id' );
@@ -343,7 +346,7 @@ class WP_Meta_Query {
}
/**
- * Filter the meta query's generated SQL.
+ * Filters the meta query's generated SQL.
*
* @since 3.1.0
*
@@ -360,8 +363,8 @@ class WP_Meta_Query {
/**
* Generate SQL clauses to be appended to a main query.
*
- * Called by the public {@see WP_Meta_Query::get_sql()}, this method
- * is abstracted out to maintain parity with the other Query classes.
+ * Called by the public WP_Meta_Query::get_sql(), this method is abstracted
+ * out to maintain parity with the other Query classes.
*
* @since 4.1.0
* @access protected
@@ -631,7 +634,11 @@ class WP_Meta_Query {
}
if ( $where ) {
- $sql_chunks['where'][] = "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$where}";
+ if ( 'CHAR' === $meta_type ) {
+ $sql_chunks['where'][] = "$alias.meta_value {$meta_compare} {$where}";
+ } else {
+ $sql_chunks['where'][] = "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$where}";
+ }
}
}
@@ -672,8 +679,8 @@ class WP_Meta_Query {
* An existing alias is compatible if (a) it is a sibling of `$clause`
* (ie, it's under the scope of the same relation), and (b) the combination
* of operator and relation between the clauses allows for a shared table join.
- * In the case of {@see WP_Meta_Query}, this only applies to 'IN' clauses that
- * are connected by the relation 'OR'.
+ * In the case of WP_Meta_Query, this only applies to 'IN' clauses that are
+ * connected by the relation 'OR'.
*
* @since 4.1.0
* @access protected
@@ -716,7 +723,7 @@ class WP_Meta_Query {
}
/**
- * Filter the table alias identified as compatible with the current clause.
+ * Filters the table alias identified as compatible with the current clause.
*
* @since 4.1.0
*
diff --git a/wp-includes/class-wp-metadata-lazyloader.php b/wp-includes/class-wp-metadata-lazyloader.php
index 2af4fea..beaf249 100644
--- a/wp-includes/class-wp-metadata-lazyloader.php
+++ b/wp-includes/class-wp-metadata-lazyloader.php
@@ -160,7 +160,7 @@ class WP_Metadata_Lazyloader {
*
* @since 4.5.0
*
- * @param mixed $check The `$check` param passed from the 'get_comment_metadata' hook.
+ * @param mixed $check The `$check` param passed from the {@see 'get_comment_metadata'} hook.
* @return mixed The original value of `$check`, so as not to short-circuit `get_comment_metadata()`.
*/
public function lazyload_comment_meta( $check ) {
diff --git a/wp-includes/class-wp-network-query.php b/wp-includes/class-wp-network-query.php
new file mode 100644
index 0000000..7f8954c
--- /dev/null
+++ b/wp-includes/class-wp-network-query.php
@@ -0,0 +1,565 @@
+ '',
+ 'from' => '',
+ 'where' => array(),
+ 'groupby' => '',
+ 'orderby' => '',
+ 'limits' => '',
+ );
+
+ /**
+ * Query vars set by the user.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_vars;
+
+ /**
+ * Default values for query vars.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_var_defaults;
+
+ /**
+ * List of networks located by the query.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $networks;
+
+ /**
+ * The amount of found networks for the current query.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var int
+ */
+ public $found_networks = 0;
+
+ /**
+ * The number of pages.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var int
+ */
+ public $max_num_pages = 0;
+
+ /**
+ * Constructor.
+ *
+ * Sets up the network query, based on the query vars passed.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query {
+ * Optional. Array or query string of network query parameters. Default empty.
+ *
+ * @type array $network__in Array of network IDs to include. Default empty.
+ * @type array $network__not_in Array of network IDs to exclude. Default empty.
+ * @type bool $count Whether to return a network count (true) or array of network objects.
+ * Default false.
+ * @type string $fields Network fields to return. Accepts 'ids' (returns an array of network IDs)
+ * or empty (returns an array of complete network objects). Default empty.
+ * @type int $number Maximum number of networks to retrieve. Default null (no limit).
+ * @type int $offset Number of networks to offset the query. Used to build LIMIT clause.
+ * Default 0.
+ * @type bool $no_found_rows Whether to disable the `SQL_CALC_FOUND_ROWS` query. Default true.
+ * @type string|array $orderby Network status or array of statuses. Accepts 'id', 'domain', 'path',
+ * 'domain_length', 'path_length' and 'network__in'. Also accepts false,
+ * an empty array, or 'none' to disable `ORDER BY` clause. Default 'id'.
+ * @type string $order How to order retrieved networks. Accepts 'ASC', 'DESC'. Default 'ASC'.
+ * @type string $domain Limit results to those affiliated with a given network ID.
+ * Default current network ID.
+ * @type array $domain__in Array of domains to include affiliated networks for. Default empty.
+ * @type array $domain__not_in Array of domains to exclude affiliated networks for. Default empty.
+ * @type string $path Limit results to those affiliated with a given network ID.
+ * Default current network ID.
+ * @type array $path__in Array of paths to include affiliated networks for. Default empty.
+ * @type array $path__not_in Array of paths to exclude affiliated networks for. Default empty.
+ * @type string $search Search term(s) to retrieve matching networks for. Default empty.
+ * @type bool $update_network_cache Whether to prime the cache for found networks. Default true.
+ * }
+ */
+ public function __construct( $query = '' ) {
+ $this->query_var_defaults = array(
+ 'network__in' => '',
+ 'network__not_in' => '',
+ 'count' => false,
+ 'fields' => '',
+ 'number' => '',
+ 'offset' => '',
+ 'no_found_rows' => true,
+ 'orderby' => 'id',
+ 'order' => 'ASC',
+ 'domain' => '',
+ 'domain__in' => '',
+ 'domain__not_in' => '',
+ 'path' => '',
+ 'path__in' => '',
+ 'path__not_in' => '',
+ 'search' => '',
+ 'update_network_cache' => true,
+ );
+
+ if ( ! empty( $query ) ) {
+ $this->query( $query );
+ }
+ }
+
+ /**
+ * Parses arguments passed to the network query with default query parameters.
+ *
+ * @since 4.6.0
+ *
+ * @access public
+ *
+ * @param string|array $query WP_Network_Query arguments. See WP_Network_Query::__construct()
+ */
+ public function parse_query( $query = '' ) {
+ if ( empty( $query ) ) {
+ $query = $this->query_vars;
+ }
+
+ $this->query_vars = wp_parse_args( $query, $this->query_var_defaults );
+
+ /**
+ * Fires after the network query vars have been parsed.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Network_Query &$this The WP_Network_Query instance (passed by reference).
+ */
+ do_action_ref_array( 'parse_network_query', array( &$this ) );
+ }
+
+ /**
+ * Sets up the WordPress query for retrieving networks.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query Array or URL query string of parameters.
+ * @return array|int List of networks, or number of networks when 'count' is passed as a query var.
+ */
+ public function query( $query ) {
+ $this->query_vars = wp_parse_args( $query );
+ return $this->get_networks();
+ }
+
+ /**
+ * Gets a list of networks matching the query vars.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return int|array The list of networks.
+ */
+ public function get_networks() {
+ $this->parse_query();
+
+ /**
+ * Fires before networks are retrieved.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Network_Query &$this Current instance of WP_Network_Query, passed by reference.
+ */
+ do_action_ref_array( 'pre_get_networks', array( &$this ) );
+
+ // $args can include anything. Only use the args defined in the query_var_defaults to compute the key.
+ $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) );
+ $last_changed = wp_cache_get( 'last_changed', 'networks' );
+ if ( ! $last_changed ) {
+ $last_changed = microtime();
+ wp_cache_set( 'last_changed', $last_changed, 'networks' );
+ }
+
+ $cache_key = "get_network_ids:$key:$last_changed";
+ $cache_value = wp_cache_get( $cache_key, 'networks' );
+
+ if ( false === $cache_value ) {
+ $network_ids = $this->get_network_ids();
+ if ( $network_ids ) {
+ $this->set_found_networks();
+ }
+
+ $cache_value = array(
+ 'network_ids' => $network_ids,
+ 'found_networks' => $this->found_networks,
+ );
+ wp_cache_add( $cache_key, $cache_value, 'networks' );
+ } else {
+ $network_ids = $cache_value['network_ids'];
+ $this->found_networks = $cache_value['found_networks'];
+ }
+
+ if ( $this->found_networks && $this->query_vars['number'] ) {
+ $this->max_num_pages = ceil( $this->found_networks / $this->query_vars['number'] );
+ }
+
+ // If querying for a count only, there's nothing more to do.
+ if ( $this->query_vars['count'] ) {
+ // $network_ids is actually a count in this case.
+ return intval( $network_ids );
+ }
+
+ $network_ids = array_map( 'intval', $network_ids );
+
+ if ( 'ids' == $this->query_vars['fields'] ) {
+ $this->networks = $network_ids;
+ return $this->networks;
+ }
+
+ if ( $this->query_vars['update_network_cache'] ) {
+ _prime_network_caches( $network_ids );
+ }
+
+ // Fetch full network objects from the primed cache.
+ $_networks = array();
+ foreach ( $network_ids as $network_id ) {
+ if ( $_network = get_network( $network_id ) ) {
+ $_networks[] = $_network;
+ }
+ }
+
+ /**
+ * Filters the network query results.
+ *
+ * @since 4.6.0
+ *
+ * @param array $results An array of networks.
+ * @param WP_Network_Query &$this Current instance of WP_Network_Query, passed by reference.
+ */
+ $_networks = apply_filters_ref_array( 'the_networks', array( $_networks, &$this ) );
+
+ // Convert to WP_Network instances
+ $this->networks = array_map( 'get_network', $_networks );
+
+ return $this->networks;
+ }
+
+ /**
+ * Used internally to get a list of network IDs matching the query vars.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @return int|array A single count of network IDs if a count query. An array of network IDs if a full query.
+ */
+ protected function get_network_ids() {
+ global $wpdb;
+
+ $order = $this->parse_order( $this->query_vars['order'] );
+
+ // Disable ORDER BY with 'none', an empty array, or boolean false.
+ if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) {
+ $orderby = '';
+ } elseif ( ! empty( $this->query_vars['orderby'] ) ) {
+ $ordersby = is_array( $this->query_vars['orderby'] ) ?
+ $this->query_vars['orderby'] :
+ preg_split( '/[,\s]/', $this->query_vars['orderby'] );
+
+ $orderby_array = array();
+ foreach ( $ordersby as $_key => $_value ) {
+ if ( ! $_value ) {
+ continue;
+ }
+
+ if ( is_int( $_key ) ) {
+ $_orderby = $_value;
+ $_order = $order;
+ } else {
+ $_orderby = $_key;
+ $_order = $_value;
+ }
+
+ $parsed = $this->parse_orderby( $_orderby );
+
+ if ( ! $parsed ) {
+ continue;
+ }
+
+ if ( 'network__in' === $_orderby ) {
+ $orderby_array[] = $parsed;
+ continue;
+ }
+
+ $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
+ }
+
+ $orderby = implode( ', ', $orderby_array );
+ } else {
+ $orderby = "$wpdb->site.id $order";
+ }
+
+ $number = absint( $this->query_vars['number'] );
+ $offset = absint( $this->query_vars['offset'] );
+
+ if ( ! empty( $number ) ) {
+ if ( $offset ) {
+ $limits = 'LIMIT ' . $offset . ',' . $number;
+ } else {
+ $limits = 'LIMIT ' . $number;
+ }
+ }
+
+ if ( $this->query_vars['count'] ) {
+ $fields = 'COUNT(*)';
+ } else {
+ $fields = "$wpdb->site.id";
+ }
+
+ // Parse network IDs for an IN clause.
+ if ( ! empty( $this->query_vars['network__in'] ) ) {
+ $this->sql_clauses['where']['network__in'] = "$wpdb->site.id IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['network__in'] ) ) . ' )';
+ }
+
+ // Parse network IDs for a NOT IN clause.
+ if ( ! empty( $this->query_vars['network__not_in'] ) ) {
+ $this->sql_clauses['where']['network__not_in'] = "$wpdb->site.id NOT IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['network__not_in'] ) ) . ' )';
+ }
+
+ if ( ! empty( $this->query_vars['domain'] ) ) {
+ $this->sql_clauses['where']['domain'] = $wpdb->prepare( "$wpdb->site.domain = %s", $this->query_vars['domain'] );
+ }
+
+ // Parse network domain for an IN clause.
+ if ( is_array( $this->query_vars['domain__in'] ) ) {
+ $this->sql_clauses['where']['domain__in'] = "$wpdb->site.domain IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__in'] ) ) . "' )";
+ }
+
+ // Parse network domain for a NOT IN clause.
+ if ( is_array( $this->query_vars['domain__not_in'] ) ) {
+ $this->sql_clauses['where']['domain__not_in'] = "$wpdb->site.domain NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__not_in'] ) ) . "' )";
+ }
+
+ if ( ! empty( $this->query_vars['path'] ) ) {
+ $this->sql_clauses['where']['path'] = $wpdb->prepare( "$wpdb->site.path = %s", $this->query_vars['path'] );
+ }
+
+ // Parse network path for an IN clause.
+ if ( is_array( $this->query_vars['path__in'] ) ) {
+ $this->sql_clauses['where']['path__in'] = "$wpdb->site.path IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__in'] ) ) . "' )";
+ }
+
+ // Parse network path for a NOT IN clause.
+ if ( is_array( $this->query_vars['path__not_in'] ) ) {
+ $this->sql_clauses['where']['path__not_in'] = "$wpdb->site.path NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__not_in'] ) ) . "' )";
+ }
+
+ // Falsey search strings are ignored.
+ if ( strlen( $this->query_vars['search'] ) ) {
+ $this->sql_clauses['where']['search'] = $this->get_search_sql(
+ $this->query_vars['search'],
+ array( "$wpdb->site.domain", "$wpdb->site.path" )
+ );
+ }
+
+ $join = '';
+
+ $where = implode( ' AND ', $this->sql_clauses['where'] );
+
+ $pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' );
+
+ /**
+ * Filters the network query clauses.
+ *
+ * @since 4.6.0
+ *
+ * @param array $pieces A compacted array of network query clauses.
+ * @param WP_Network_Query &$this Current instance of WP_Network_Query, passed by reference.
+ */
+ $clauses = apply_filters_ref_array( 'networks_clauses', array( compact( $pieces ), &$this ) );
+
+ $fields = isset( $clauses['fields'] ) ? $clauses['fields'] : '';
+ $join = isset( $clauses['join'] ) ? $clauses['join'] : '';
+ $where = isset( $clauses['where'] ) ? $clauses['where'] : '';
+ $orderby = isset( $clauses['orderby'] ) ? $clauses['orderby'] : '';
+ $limits = isset( $clauses['limits'] ) ? $clauses['limits'] : '';
+ $groupby = isset( $clauses['groupby'] ) ? $clauses['groupby'] : '';
+
+ if ( $where ) {
+ $where = 'WHERE ' . $where;
+ }
+
+ if ( $groupby ) {
+ $groupby = 'GROUP BY ' . $groupby;
+ }
+
+ if ( $orderby ) {
+ $orderby = "ORDER BY $orderby";
+ }
+
+ $found_rows = '';
+ if ( ! $this->query_vars['no_found_rows'] ) {
+ $found_rows = 'SQL_CALC_FOUND_ROWS';
+ }
+
+ $this->sql_clauses['select'] = "SELECT $found_rows $fields";
+ $this->sql_clauses['from'] = "FROM $wpdb->site $join";
+ $this->sql_clauses['groupby'] = $groupby;
+ $this->sql_clauses['orderby'] = $orderby;
+ $this->sql_clauses['limits'] = $limits;
+
+ $this->request = "{$this->sql_clauses['select']} {$this->sql_clauses['from']} {$where} {$this->sql_clauses['groupby']} {$this->sql_clauses['orderby']} {$this->sql_clauses['limits']}";
+
+ if ( $this->query_vars['count'] ) {
+ return intval( $wpdb->get_var( $this->request ) );
+ }
+
+ $network_ids = $wpdb->get_col( $this->request );
+
+ return array_map( 'intval', $network_ids );
+ }
+
+ /**
+ * Populates found_networks and max_num_pages properties for the current query
+ * if the limit clause was used.
+ *
+ * @since 4.6.0
+ * @access private
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ */
+ private function set_found_networks() {
+ global $wpdb;
+
+ if ( $this->query_vars['number'] && ! $this->query_vars['no_found_rows'] ) {
+ /**
+ * Filters the query used to retrieve found network count.
+ *
+ * @since 4.6.0
+ *
+ * @param string $found_networks_query SQL query. Default 'SELECT FOUND_ROWS()'.
+ * @param WP_Network_Query $network_query The `WP_Network_Query` instance.
+ */
+ $found_networks_query = apply_filters( 'found_networks_query', 'SELECT FOUND_ROWS()', $this );
+
+ $this->found_networks = (int) $wpdb->get_var( $found_networks_query );
+ }
+ }
+
+ /**
+ * Used internally to generate an SQL string for searching across multiple columns.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $string Search string.
+ * @param array $columns Columns to search.
+ *
+ * @return string Search SQL.
+ */
+ protected function get_search_sql( $string, $columns ) {
+ global $wpdb;
+
+ $like = '%' . $wpdb->esc_like( $string ) . '%';
+
+ $searches = array();
+ foreach ( $columns as $column ) {
+ $searches[] = $wpdb->prepare( "$column LIKE %s", $like );
+ }
+
+ return '(' . implode( ' OR ', $searches ) . ')';
+ }
+
+ /**
+ * Parses and sanitizes 'orderby' keys passed to the network query.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $orderby Alias for the field to order by.
+ * @return string|false Value to used in the ORDER clause. False otherwise.
+ */
+ protected function parse_orderby( $orderby ) {
+ global $wpdb;
+
+ $allowed_keys = array(
+ 'id',
+ 'domain',
+ 'path',
+ );
+
+ $parsed = false;
+ if ( $orderby == 'network__in' ) {
+ $network__in = implode( ',', array_map( 'absint', $this->query_vars['network__in'] ) );
+ $parsed = "FIELD( {$wpdb->site}.id, $network__in )";
+ } elseif ( $orderby == 'domain_length' || $orderby == 'path_length' ) {
+ $field = substr( $orderby, 0, -7 );
+ $parsed = "CHAR_LENGTH($wpdb->site.$field)";
+ } elseif ( in_array( $orderby, $allowed_keys ) ) {
+ $parsed = "$wpdb->site.$orderby";
+ }
+
+ return $parsed;
+ }
+
+ /**
+ * Parses an 'order' query variable and cast it to 'ASC' or 'DESC' as necessary.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @param string $order The 'order' query variable.
+ * @return string The sanitized 'order' query variable.
+ */
+ protected function parse_order( $order ) {
+ if ( ! is_string( $order ) || empty( $order ) ) {
+ return 'ASC';
+ }
+
+ if ( 'ASC' === strtoupper( $order ) ) {
+ return 'ASC';
+ } else {
+ return 'DESC';
+ }
+ }
+}
diff --git a/wp-includes/class-wp-network.php b/wp-includes/class-wp-network.php
index 529c73f..5ab29c2 100644
--- a/wp-includes/class-wp-network.php
+++ b/wp-includes/class-wp-network.php
@@ -17,19 +17,23 @@
* ability to interact with any network of sites is required.
*
* @since 4.4.0
+ *
+ * @property int $id
+ * @property int $site_id
*/
class WP_Network {
/**
* Network ID.
*
- * A numeric string, for compatibility reasons.
- *
* @since 4.4.0
- * @access public
- * @var string
+ * @since 4.6.0 Converted from public to private to explicitly enable more intuitive
+ * access via magic methods. As part of the access change, the type was
+ * also changed from `string` to `int`.
+ * @access private
+ * @var int
*/
- public $id;
+ private $id;
/**
* Domain of the network.
@@ -58,10 +62,10 @@ class WP_Network {
* A numeric string, for compatibility reasons.
*
* @since 4.4.0
- * @access public
+ * @access private
* @var string
*/
- public $blog_id = 0;
+ private $blog_id = '0';
/**
* Domain used to set cookies for this network.
@@ -137,6 +141,77 @@ class WP_Network {
$this->_set_cookie_domain();
}
+ /**
+ * Getter.
+ *
+ * Allows current multisite naming conventions when getting properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to get.
+ * @return mixed Value of the property. Null if not available.
+ */
+ public function __get( $key ) {
+ switch ( $key ) {
+ case 'id';
+ return (int) $this->id;
+ case 'blog_id':
+ return $this->blog_id;
+ case 'site_id':
+ return (int) $this->blog_id;
+ }
+
+ return null;
+ }
+
+ /**
+ * Isset-er.
+ *
+ * Allows current multisite naming conventions when checking for properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to check if set.
+ * @return bool Whether the property is set.
+ */
+ public function __isset( $key ) {
+ switch ( $key ) {
+ case 'id':
+ case 'blog_id':
+ case 'site_id':
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Setter.
+ *
+ * Allows current multisite naming conventions while setting properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to set.
+ * @param mixed $value Value to assign to the property.
+ */
+ public function __set( $key, $value ) {
+ switch ( $key ) {
+ case 'id':
+ $this->id = (int) $value;
+ break;
+ case 'blog_id':
+ case 'site_id':
+ $this->blog_id = (string) $value;
+ break;
+ default:
+ $this->$key = $value;
+ }
+ }
+
/**
* Set the site name assigned to the network if one has not been populated.
*
@@ -230,7 +305,7 @@ class WP_Network {
$path_segments = array_filter( explode( '/', trim( $path, '/' ) ) );
/**
- * Filter the number of path segments to consider when searching for a site.
+ * Filters the number of path segments to consider when searching for a site.
*
* @since 3.9.0
*
diff --git a/wp-includes/class-wp-oembed-controller.php b/wp-includes/class-wp-oembed-controller.php
index dbb4e3e..13fed83 100644
--- a/wp-includes/class-wp-oembed-controller.php
+++ b/wp-includes/class-wp-oembed-controller.php
@@ -20,10 +20,11 @@ final class WP_oEmbed_Controller {
* Register the oEmbed REST API route.
*
* @since 4.4.0
+ * @access public
*/
public function register_routes() {
/**
- * Filter the maxwidth oEmbed parameter.
+ * Filters the maxwidth oEmbed parameter.
*
* @since 4.4.0
*
@@ -59,6 +60,7 @@ final class WP_oEmbed_Controller {
* Returns the JSON object for the post.
*
* @since 4.4.0
+ * @access public
*
* @param WP_REST_Request $request Full data about the request.
* @return WP_Error|array oEmbed response data or WP_Error on failure.
@@ -67,7 +69,7 @@ final class WP_oEmbed_Controller {
$post_id = url_to_postid( $request['url'] );
/**
- * Filter the determined post ID.
+ * Filters the determined post ID.
*
* @since 4.4.0
*
diff --git a/wp-includes/class-wp-post-type.php b/wp-includes/class-wp-post-type.php
new file mode 100644
index 0000000..c08ca5e
--- /dev/null
+++ b/wp-includes/class-wp-post-type.php
@@ -0,0 +1,686 @@
+name = $post_type;
+
+ $this->set_props( $args );
+ }
+
+ /**
+ * Sets post type properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param array|string $args Array or string of arguments for registering a post type.
+ */
+ public function set_props( $args ) {
+ $args = wp_parse_args( $args );
+
+ /**
+ * Filter the arguments for registering a post type.
+ *
+ * @since 4.4.0
+ *
+ * @param array $args Array of arguments for registering a post type.
+ * @param string $post_type Post type key.
+ */
+ $args = apply_filters( 'register_post_type_args', $args, $this->name );
+
+ $has_edit_link = ! empty( $args['_edit_link'] );
+
+ // Args prefixed with an underscore are reserved for internal use.
+ $defaults = array(
+ 'labels' => array(),
+ 'description' => '',
+ 'public' => false,
+ 'hierarchical' => false,
+ 'exclude_from_search' => null,
+ 'publicly_queryable' => null,
+ 'show_ui' => null,
+ 'show_in_menu' => null,
+ 'show_in_nav_menus' => null,
+ 'show_in_admin_bar' => null,
+ 'menu_position' => null,
+ 'menu_icon' => null,
+ 'capability_type' => 'post',
+ 'capabilities' => array(),
+ 'map_meta_cap' => null,
+ 'supports' => array(),
+ 'register_meta_box_cb' => null,
+ 'taxonomies' => array(),
+ 'has_archive' => false,
+ 'rewrite' => true,
+ 'query_var' => true,
+ 'can_export' => true,
+ 'delete_with_user' => null,
+ '_builtin' => false,
+ '_edit_link' => 'post.php?post=%d',
+ );
+
+ $args = array_merge( $defaults, $args );
+
+ $args['name'] = $this->name;
+
+ // If not set, default to the setting for public.
+ if ( null === $args['publicly_queryable'] ) {
+ $args['publicly_queryable'] = $args['public'];
+ }
+
+ // If not set, default to the setting for public.
+ if ( null === $args['show_ui'] ) {
+ $args['show_ui'] = $args['public'];
+ }
+
+ // If not set, default to the setting for show_ui.
+ if ( null === $args['show_in_menu'] || ! $args['show_ui'] ) {
+ $args['show_in_menu'] = $args['show_ui'];
+ }
+
+ // If not set, default to the whether the full UI is shown.
+ if ( null === $args['show_in_admin_bar'] ) {
+ $args['show_in_admin_bar'] = (bool) $args['show_in_menu'];
+ }
+
+ // If not set, default to the setting for public.
+ if ( null === $args['show_in_nav_menus'] ) {
+ $args['show_in_nav_menus'] = $args['public'];
+ }
+
+ // If not set, default to true if not public, false if public.
+ if ( null === $args['exclude_from_search'] ) {
+ $args['exclude_from_search'] = ! $args['public'];
+ }
+
+ // Back compat with quirky handling in version 3.0. #14122.
+ if ( empty( $args['capabilities'] ) && null === $args['map_meta_cap'] && in_array( $args['capability_type'], array( 'post', 'page' ) ) ) {
+ $args['map_meta_cap'] = true;
+ }
+
+ // If not set, default to false.
+ if ( null === $args['map_meta_cap'] ) {
+ $args['map_meta_cap'] = false;
+ }
+
+ // If there's no specified edit link and no UI, remove the edit link.
+ if ( ! $args['show_ui'] && ! $has_edit_link ) {
+ $args['_edit_link'] = '';
+ }
+
+ $this->cap = get_post_type_capabilities( (object) $args );
+ unset( $args['capabilities'] );
+
+ if ( is_array( $args['capability_type'] ) ) {
+ $args['capability_type'] = $args['capability_type'][0];
+ }
+
+ if ( false !== $args['query_var'] ) {
+ if ( true === $args['query_var'] ) {
+ $args['query_var'] = $this->name;
+ } else {
+ $args['query_var'] = sanitize_title_with_dashes( $args['query_var'] );
+ }
+ }
+
+ if ( false !== $args['rewrite'] && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) {
+ if ( ! is_array( $args['rewrite'] ) ) {
+ $args['rewrite'] = array();
+ }
+ if ( empty( $args['rewrite']['slug'] ) ) {
+ $args['rewrite']['slug'] = $this->name;
+ }
+ if ( ! isset( $args['rewrite']['with_front'] ) ) {
+ $args['rewrite']['with_front'] = true;
+ }
+ if ( ! isset( $args['rewrite']['pages'] ) ) {
+ $args['rewrite']['pages'] = true;
+ }
+ if ( ! isset( $args['rewrite']['feeds'] ) || ! $args['has_archive'] ) {
+ $args['rewrite']['feeds'] = (bool) $args['has_archive'];
+ }
+ if ( ! isset( $args['rewrite']['ep_mask'] ) ) {
+ if ( isset( $args['permalink_epmask'] ) ) {
+ $args['rewrite']['ep_mask'] = $args['permalink_epmask'];
+ } else {
+ $args['rewrite']['ep_mask'] = EP_PERMALINK;
+ }
+ }
+ }
+
+ foreach ( $args as $property_name => $property_value ) {
+ $this->$property_name = $property_value;
+ }
+
+ $this->labels = get_post_type_labels( $this );
+ $this->label = $this->labels->name;
+ }
+
+ /**
+ * Sets the features support for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function add_supports() {
+ if ( ! empty( $this->supports ) ) {
+ add_post_type_support( $this->name, $this->supports );
+ unset( $this->supports );
+ } elseif ( false !== $this->supports ) {
+ // Add default features.
+ add_post_type_support( $this->name, array( 'title', 'editor' ) );
+ }
+ }
+
+ /**
+ * Adds the necessary rewrite rules for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @global WP_Rewrite $wp_rewrite WordPress Rewrite Component.
+ * @global WP $wp Current WordPress environment instance.
+ */
+ public function add_rewrite_rules() {
+ global $wp_rewrite, $wp;
+
+ if ( false !== $this->query_var && $wp && is_post_type_viewable( $this ) ) {
+ $wp->add_query_var( $this->query_var );
+ }
+
+ if ( false !== $this->rewrite && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) {
+ if ( $this->hierarchical ) {
+ add_rewrite_tag( "%$this->name%", '(.+?)', $this->query_var ? "{$this->query_var}=" : "post_type=$this->name&pagename=" );
+ } else {
+ add_rewrite_tag( "%$this->name%", '([^/]+)', $this->query_var ? "{$this->query_var}=" : "post_type=$this->name&name=" );
+ }
+
+ if ( $this->has_archive ) {
+ $archive_slug = true === $this->has_archive ? $this->rewrite['slug'] : $this->has_archive;
+ if ( $this->rewrite['with_front'] ) {
+ $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
+ } else {
+ $archive_slug = $wp_rewrite->root . $archive_slug;
+ }
+
+ add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$this->name", 'top' );
+ if ( $this->rewrite['feeds'] && $wp_rewrite->feeds ) {
+ $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
+ add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
+ add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
+ }
+ if ( $this->rewrite['pages'] ) {
+ add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$this->name" . '&paged=$matches[1]', 'top' );
+ }
+ }
+
+ $permastruct_args = $this->rewrite;
+ $permastruct_args['feed'] = $permastruct_args['feeds'];
+ add_permastruct( $this->name, "{$this->rewrite['slug']}/%$this->name%", $permastruct_args );
+ }
+ }
+
+ /**
+ * Registers the post type meta box if a custom callback was specified.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function register_meta_boxes() {
+ if ( $this->register_meta_box_cb ) {
+ add_action( 'add_meta_boxes_' . $this->name, $this->register_meta_box_cb, 10, 1 );
+ }
+ }
+
+ /**
+ * Adds the future post hook action for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function add_hooks() {
+ add_action( 'future_' . $this->name, '_future_post_hook', 5, 2 );
+ }
+
+ /**
+ * Registers the taxonomies for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function register_taxonomies() {
+ foreach ( $this->taxonomies as $taxonomy ) {
+ register_taxonomy_for_object_type( $taxonomy, $this->name );
+ }
+ }
+
+ /**
+ * Removes the features support for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @global array $_wp_post_type_features Post type features.
+ */
+ public function remove_supports() {
+ global $_wp_post_type_features;
+
+ unset( $_wp_post_type_features[ $this->name ] );
+ }
+
+ /**
+ * Removes any rewrite rules, permastructs, and rules for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
+ * @global WP $wp Current WordPress environment instance.
+ * @global array $post_type_meta_caps Used to remove meta capabilities.
+ */
+ public function remove_rewrite_rules() {
+ global $wp, $wp_rewrite, $post_type_meta_caps;
+
+ // Remove query var.
+ if ( false !== $this->query_var ) {
+ $wp->remove_query_var( $this->query_var );
+ }
+
+ // Remove any rewrite rules, permastructs, and rules.
+ if ( false !== $this->rewrite ) {
+ remove_rewrite_tag( "%$this->name%" );
+ remove_permastruct( $this->name );
+ foreach ( $wp_rewrite->extra_rules_top as $regex => $query ) {
+ if ( false !== strpos( $query, "index.php?post_type=$this->name" ) ) {
+ unset( $wp_rewrite->extra_rules_top[ $regex ] );
+ }
+ }
+ }
+
+ // Remove registered custom meta capabilities.
+ foreach ( $this->cap as $cap ) {
+ unset( $post_type_meta_caps[ $cap ] );
+ }
+ }
+
+ /**
+ * Unregisters the post type meta box if a custom callback was specified.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function unregister_meta_boxes() {
+ if ( $this->register_meta_box_cb ) {
+ remove_action( 'add_meta_boxes_' . $this->name, $this->register_meta_box_cb, 10 );
+ }
+ }
+
+ /**
+ * Removes the post type from all taxonomies.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function unregister_taxonomies() {
+ foreach ( get_object_taxonomies( $this->name ) as $taxonomy ) {
+ unregister_taxonomy_for_object_type( $taxonomy, $this->name );
+ }
+ }
+
+ /**
+ * Removes the future post hook action for the post type.
+ *
+ * @since 4.6.0
+ * @access public
+ */
+ public function remove_hooks() {
+ remove_action( 'future_' . $this->name, '_future_post_hook', 5 );
+ }
+}
diff --git a/wp-includes/class-wp-rewrite.php b/wp-includes/class-wp-rewrite.php
index 7c621fb..2c57615 100644
--- a/wp-includes/class-wp-rewrite.php
+++ b/wp-includes/class-wp-rewrite.php
@@ -1252,13 +1252,13 @@ class WP_Rewrite {
/**
* Constructs rewrite matches and queries from permalink structure.
*
- * Runs the action 'generate_rewrite_rules' with the parameter that is an
+ * Runs the action {@see 'generate_rewrite_rules'} with the parameter that is an
* reference to the current WP_Rewrite instance to further manipulate the
- * permalink structures and rewrite rules. Runs the 'rewrite_rules_array'
+ * permalink structures and rewrite rules. Runs the {@see 'rewrite_rules_array'}
* filter on the full rewrite rule array.
*
* There are two ways to manipulate the rewrite rules, one by hooking into
- * the 'generate_rewrite_rules' action and gaining full control of the
+ * the {@see 'generate_rewrite_rules'} action and gaining full control of the
* object or just manipulating the rewrite rule array before it is passed
* from the function.
*
@@ -1297,7 +1297,7 @@ class WP_Rewrite {
$post_rewrite = $this->generate_rewrite_rules( $this->permalink_structure, EP_PERMALINK );
/**
- * Filter rewrite rules used for "post" archives.
+ * Filters rewrite rules used for "post" archives.
*
* @since 1.5.0
*
@@ -1309,7 +1309,7 @@ class WP_Rewrite {
$date_rewrite = $this->generate_rewrite_rules($this->get_date_permastruct(), EP_DATE);
/**
- * Filter rewrite rules used for date archives.
+ * Filters rewrite rules used for date archives.
*
* Likely date archives would include /yyyy/, /yyyy/mm/, and /yyyy/mm/dd/.
*
@@ -1323,7 +1323,7 @@ class WP_Rewrite {
$root_rewrite = $this->generate_rewrite_rules($this->root . '/', EP_ROOT);
/**
- * Filter rewrite rules used for root-level archives.
+ * Filters rewrite rules used for root-level archives.
*
* Likely root-level archives would include pagination rules for the homepage
* as well as site-wide post feeds (e.g. /feed/, and /feed/atom/).
@@ -1338,7 +1338,7 @@ class WP_Rewrite {
$comments_rewrite = $this->generate_rewrite_rules($this->root . $this->comments_base, EP_COMMENTS, false, true, true, false);
/**
- * Filter rewrite rules used for comment feed archives.
+ * Filters rewrite rules used for comment feed archives.
*
* Likely comments feed archives include /comments/feed/, and /comments/feed/atom/.
*
@@ -1353,7 +1353,7 @@ class WP_Rewrite {
$search_rewrite = $this->generate_rewrite_rules($search_structure, EP_SEARCH);
/**
- * Filter rewrite rules used for search archives.
+ * Filters rewrite rules used for search archives.
*
* Likely search-related archives include /search/search+query/ as well as
* pagination and feed paths for a search.
@@ -1368,7 +1368,7 @@ class WP_Rewrite {
$author_rewrite = $this->generate_rewrite_rules($this->get_author_permastruct(), EP_AUTHORS);
/**
- * Filter rewrite rules used for author archives.
+ * Filters rewrite rules used for author archives.
*
* Likely author archives would include /author/author-name/, as well as
* pagination and feed paths for author archives.
@@ -1383,7 +1383,7 @@ class WP_Rewrite {
$page_rewrite = $this->page_rewrite_rules();
/**
- * Filter rewrite rules used for "page" post type archives.
+ * Filters rewrite rules used for "page" post type archives.
*
* @since 1.5.0
*
@@ -1403,7 +1403,7 @@ class WP_Rewrite {
}
/**
- * Filter rewrite rules used for individual permastructs.
+ * Filters rewrite rules used for individual permastructs.
*
* The dynamic portion of the hook name, `$permastructname`, refers
* to the name of the registered permastruct, e.g. 'post_tag' (tags),
@@ -1417,7 +1417,7 @@ class WP_Rewrite {
if ( 'post_tag' == $permastructname ) {
/**
- * Filter rewrite rules used specifically for Tags.
+ * Filters rewrite rules used specifically for Tags.
*
* @since 2.3.0
* @deprecated 3.1.0 Use 'post_tag_rewrite_rules' instead
@@ -1446,7 +1446,7 @@ class WP_Rewrite {
do_action_ref_array( 'generate_rewrite_rules', array( &$this ) );
/**
- * Filter the full set of generated rewrite rules.
+ * Filters the full set of generated rewrite rules.
*
* @since 1.5.0
*
@@ -1550,7 +1550,7 @@ class WP_Rewrite {
$rules .= "\n";
/**
- * Filter the list of rewrite rules formatted for output to an .htaccess file.
+ * Filters the list of rewrite rules formatted for output to an .htaccess file.
*
* @since 1.5.0
*
@@ -1559,7 +1559,7 @@ class WP_Rewrite {
$rules = apply_filters( 'mod_rewrite_rules', $rules );
/**
- * Filter the list of rewrite rules formatted for output to an .htaccess file.
+ * Filters the list of rewrite rules formatted for output to an .htaccess file.
*
* @since 1.5.0
* @deprecated 1.5.0 Use the mod_rewrite_rules filter instead.
@@ -1612,7 +1612,7 @@ class WP_Rewrite {
}
/**
- * Filter the list of rewrite rules formatted for output to a web.config.
+ * Filters the list of rewrite rules formatted for output to a web.config.
*
* @since 2.8.0
*
@@ -1743,7 +1743,7 @@ class WP_Rewrite {
* }
*/
public function add_permastruct( $name, $struct, $args = array() ) {
- // Backwards compatibility for the old parameters: $with_front and $ep_mask.
+ // Back-compat for the old parameters: $with_front and $ep_mask.
if ( ! is_array( $args ) )
$args = array( 'with_front' => $args );
if ( func_num_args() == 4 )
@@ -1814,7 +1814,7 @@ class WP_Rewrite {
$this->wp_rewrite_rules();
/**
- * Filter whether a "hard" rewrite rule flush should be performed when requested.
+ * Filters whether a "hard" rewrite rule flush should be performed when requested.
*
* A "hard" flush updates .htaccess (Apache) or web.config (IIS).
*
@@ -1872,7 +1872,7 @@ class WP_Rewrite {
* between the current permalink structure and the parameter value. Calls
* WP_Rewrite::init() after the option is updated.
*
- * Fires the 'permalink_structure_changed' action once the init call has
+ * Fires the {@see 'permalink_structure_changed'} action once the init call has
* processed passing the old and new values
*
* @since 1.5.0
diff --git a/wp-includes/class-wp-role.php b/wp-includes/class-wp-role.php
index 335d20d..6c9702d 100644
--- a/wp-includes/class-wp-role.php
+++ b/wp-includes/class-wp-role.php
@@ -63,12 +63,12 @@ class WP_Role {
}
/**
- * Remove capability from role.
+ * Removes a capability from a role.
*
- * This is a container for {@link WP_Roles::remove_cap()} to remove the
- * capability from the role. That is to say, that {@link
- * WP_Roles::remove_cap()} implements the functionality, but it also makes
- * sense to use this class, because you don't need to enter the role name.
+ * This is a container for WP_Roles::remove_cap() to remove the
+ * capability from the role. That is to say, that WP_Roles::remove_cap()
+ * implements the functionality, but it also makes sense to use this class,
+ * because you don't need to enter the role name.
*
* @since 2.0.0
* @access public
@@ -96,7 +96,7 @@ class WP_Role {
*/
public function has_cap( $cap ) {
/**
- * Filter which capabilities a role has.
+ * Filters which capabilities a role has.
*
* @since 2.0.0
*
diff --git a/wp-includes/class-wp-roles.php b/wp-includes/class-wp-roles.php
index 94fc672..ff733e2 100644
--- a/wp-includes/class-wp-roles.php
+++ b/wp-includes/class-wp-roles.php
@@ -79,7 +79,7 @@ class WP_Roles {
}
/**
- * Make private/protected methods readable for backwards compatibility.
+ * Make private/protected methods readable for backward compatibility.
*
* @since 4.0.0
* @access public
diff --git a/wp-includes/class-wp-site-query.php b/wp-includes/class-wp-site-query.php
new file mode 100644
index 0000000..cbffd66
--- /dev/null
+++ b/wp-includes/class-wp-site-query.php
@@ -0,0 +1,693 @@
+ '',
+ 'from' => '',
+ 'where' => array(),
+ 'groupby' => '',
+ 'orderby' => '',
+ 'limits' => '',
+ );
+
+ /**
+ * Date query container.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var object WP_Date_Query
+ */
+ public $date_query = false;
+
+ /**
+ * Query vars set by the user.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_vars;
+
+ /**
+ * Default values for query vars.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_var_defaults;
+
+ /**
+ * List of sites located by the query.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $sites;
+
+ /**
+ * The amount of found sites for the current query.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var int
+ */
+ public $found_sites = 0;
+
+ /**
+ * The number of pages.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var int
+ */
+ public $max_num_pages = 0;
+
+ /**
+ * Sets up the site query, based on the query vars passed.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query {
+ * Optional. Array or query string of site query parameters. Default empty.
+ *
+ * @type array $site__in Array of site IDs to include. Default empty.
+ * @type array $site__not_in Array of site IDs to exclude. Default empty.
+ * @type bool $count Whether to return a site count (true) or array of site objects.
+ * Default false.
+ * @type array $date_query Date query clauses to limit sites by. See WP_Date_Query.
+ * Default null.
+ * @type string $fields Site fields to return. Accepts 'ids' (returns an array of site IDs)
+ * or empty (returns an array of complete site objects). Default empty.
+ * @type int $ID A site ID to only return that site. Default empty.
+ * @type int $number Maximum number of sites to retrieve. Default null (no limit).
+ * @type int $offset Number of sites to offset the query. Used to build LIMIT clause.
+ * Default 0.
+ * @type bool $no_found_rows Whether to disable the `SQL_CALC_FOUND_ROWS` query. Default true.
+ * @type string|array $orderby Site status or array of statuses. Accepts 'id', 'domain', 'path',
+ * 'network_id', 'last_updated', 'registered', 'domain_length',
+ * 'path_length', 'site__in' and 'network__in'. Also accepts false,
+ * an empty array, or 'none' to disable `ORDER BY` clause.
+ * Default 'id'.
+ * @type string $order How to order retrieved sites. Accepts 'ASC', 'DESC'. Default 'ASC'.
+ * @type int $network_id Limit results to those affiliated with a given network ID. If 0,
+ * include all networks. Default 0.
+ * @type array $network__in Array of network IDs to include affiliated sites for. Default empty.
+ * @type array $network__not_in Array of network IDs to exclude affiliated sites for. Default empty.
+ * @type string $domain Limit results to those affiliated with a given domain.
+ * Default empty.
+ * @type array $domain__in Array of domains to include affiliated sites for. Default empty.
+ * @type array $domain__not_in Array of domains to exclude affiliated sites for. Default empty.
+ * @type string $path Limit results to those affiliated with a given path.
+ * Default empty.
+ * @type array $path__in Array of paths to include affiliated sites for. Default empty.
+ * @type array $path__not_in Array of paths to exclude affiliated sites for. Default empty.
+ * @type int $public Limit results to public sites. Accepts '1' or '0'. Default empty.
+ * @type int $archived Limit results to archived sites. Accepts '1' or '0'. Default empty.
+ * @type int $mature Limit results to mature sites. Accepts '1' or '0'. Default empty.
+ * @type int $spam Limit results to spam sites. Accepts '1' or '0'. Default empty.
+ * @type int $deleted Limit results to deleted sites. Accepts '1' or '0'. Default empty.
+ * @type string $search Search term(s) to retrieve matching sites for. Default empty.
+ * @type array $search_columns Array of column names to be searched. Accepts 'domain' and 'path'.
+ * Default empty array.
+ * @type bool $update_site_cache Whether to prime the cache for found sites. Default false.
+ * }
+ */
+ public function __construct( $query = '' ) {
+ $this->query_var_defaults = array(
+ 'fields' => '',
+ 'ID' => '',
+ 'site__in' => '',
+ 'site__not_in' => '',
+ 'number' => 100,
+ 'offset' => '',
+ 'no_found_rows' => true,
+ 'orderby' => 'id',
+ 'order' => 'ASC',
+ 'network_id' => 0,
+ 'network__in' => '',
+ 'network__not_in' => '',
+ 'domain' => '',
+ 'domain__in' => '',
+ 'domain__not_in' => '',
+ 'path' => '',
+ 'path__in' => '',
+ 'path__not_in' => '',
+ 'public' => null,
+ 'archived' => null,
+ 'mature' => null,
+ 'spam' => null,
+ 'deleted' => null,
+ 'search' => '',
+ 'search_columns' => array(),
+ 'count' => false,
+ 'date_query' => null, // See WP_Date_Query
+ 'update_site_cache' => true,
+ );
+
+ if ( ! empty( $query ) ) {
+ $this->query( $query );
+ }
+ }
+
+ /**
+ * Parses arguments passed to the site query with default query parameters.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @see WP_Site_Query::__construct()
+ *
+ * @param string|array $query Array or string of WP_Site_Query arguments. See WP_Site_Query::__construct().
+ */
+ public function parse_query( $query = '' ) {
+ if ( empty( $query ) ) {
+ $query = $this->query_vars;
+ }
+
+ $this->query_vars = wp_parse_args( $query, $this->query_var_defaults );
+
+ /**
+ * Fires after the site query vars have been parsed.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Site_Query &$this The WP_Site_Query instance (passed by reference).
+ */
+ do_action_ref_array( 'parse_site_query', array( &$this ) );
+ }
+
+ /**
+ * Sets up the WordPress query for retrieving sites.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query Array or URL query string of parameters.
+ * @return array|int List of sites, or number of sites when 'count' is passed as a query var.
+ */
+ public function query( $query ) {
+ $this->query_vars = wp_parse_args( $query );
+
+ return $this->get_sites();
+ }
+
+ /**
+ * Retrieves a list of sites matching the query vars.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array|int List of sites, or number of sites when 'count' is passed as a query var.
+ */
+ public function get_sites() {
+ $this->parse_query();
+
+ /**
+ * Fires before sites are retrieved.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Site_Query &$this Current instance of WP_Site_Query, passed by reference.
+ */
+ do_action_ref_array( 'pre_get_sites', array( &$this ) );
+
+ // $args can include anything. Only use the args defined in the query_var_defaults to compute the key.
+ $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) );
+ $last_changed = wp_cache_get( 'last_changed', 'sites' );
+ if ( ! $last_changed ) {
+ $last_changed = microtime();
+ wp_cache_set( 'last_changed', $last_changed, 'sites' );
+ }
+
+ $cache_key = "get_sites:$key:$last_changed";
+ $cache_value = wp_cache_get( $cache_key, 'sites' );
+
+ if ( false === $cache_value ) {
+ $site_ids = $this->get_site_ids();
+ if ( $site_ids ) {
+ $this->set_found_sites();
+ }
+
+ $cache_value = array(
+ 'site_ids' => $site_ids,
+ 'found_sites' => $this->found_sites,
+ );
+ wp_cache_add( $cache_key, $cache_value, 'sites' );
+ } else {
+ $site_ids = $cache_value['site_ids'];
+ $this->found_sites = $cache_value['found_sites'];
+ }
+
+ if ( $this->found_sites && $this->query_vars['number'] ) {
+ $this->max_num_pages = ceil( $this->found_sites / $this->query_vars['number'] );
+ }
+
+ // If querying for a count only, there's nothing more to do.
+ if ( $this->query_vars['count'] ) {
+ // $site_ids is actually a count in this case.
+ return intval( $site_ids );
+ }
+
+ $site_ids = array_map( 'intval', $site_ids );
+
+ if ( 'ids' == $this->query_vars['fields'] ) {
+ $this->sites = $site_ids;
+
+ return $this->sites;
+ }
+
+ // Prime site network caches.
+ if ( $this->query_vars['update_site_cache'] ) {
+ _prime_site_caches( $site_ids );
+ }
+
+ // Fetch full site objects from the primed cache.
+ $_sites = array();
+ foreach ( $site_ids as $site_id ) {
+ if ( $_site = get_site( $site_id ) ) {
+ $_sites[] = $_site;
+ }
+ }
+
+ /**
+ * Filters the site query results.
+ *
+ * @since 4.6.0
+ *
+ * @param array $results An array of sites.
+ * @param WP_Site_Query &$this Current instance of WP_Site_Query, passed by reference.
+ */
+ $_sites = apply_filters_ref_array( 'the_sites', array( $_sites, &$this ) );
+
+ // Convert to WP_Site instances.
+ $this->sites = array_map( 'get_site', $_sites );
+
+ return $this->sites;
+ }
+
+ /**
+ * Used internally to get a list of site IDs matching the query vars.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @return int|array A single count of site IDs if a count query. An array of site IDs if a full query.
+ */
+ protected function get_site_ids() {
+ global $wpdb;
+
+ $order = $this->parse_order( $this->query_vars['order'] );
+
+ // Disable ORDER BY with 'none', an empty array, or boolean false.
+ if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) {
+ $orderby = '';
+ } elseif ( ! empty( $this->query_vars['orderby'] ) ) {
+ $ordersby = is_array( $this->query_vars['orderby'] ) ?
+ $this->query_vars['orderby'] :
+ preg_split( '/[,\s]/', $this->query_vars['orderby'] );
+
+ $orderby_array = array();
+ foreach ( $ordersby as $_key => $_value ) {
+ if ( ! $_value ) {
+ continue;
+ }
+
+ if ( is_int( $_key ) ) {
+ $_orderby = $_value;
+ $_order = $order;
+ } else {
+ $_orderby = $_key;
+ $_order = $_value;
+ }
+
+ $parsed = $this->parse_orderby( $_orderby );
+
+ if ( ! $parsed ) {
+ continue;
+ }
+
+ if ( 'site__in' === $_orderby || 'network__in' === $_orderby ) {
+ $orderby_array[] = $parsed;
+ continue;
+ }
+
+ $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
+ }
+
+ $orderby = implode( ', ', $orderby_array );
+ } else {
+ $orderby = "blog_id $order";
+ }
+
+ $number = absint( $this->query_vars['number'] );
+ $offset = absint( $this->query_vars['offset'] );
+
+ if ( ! empty( $number ) ) {
+ if ( $offset ) {
+ $limits = 'LIMIT ' . $offset . ',' . $number;
+ } else {
+ $limits = 'LIMIT ' . $number;
+ }
+ }
+
+ if ( $this->query_vars['count'] ) {
+ $fields = 'COUNT(*)';
+ } else {
+ $fields = 'blog_id';
+ }
+
+ // Parse site IDs for an IN clause.
+ $site_id = absint( $this->query_vars['ID'] );
+ if ( ! empty( $site_id ) ) {
+ $this->sql_clauses['where']['ID'] = $wpdb->prepare( 'blog_id = %d', $site_id );
+ }
+
+ // Parse site IDs for an IN clause.
+ if ( ! empty( $this->query_vars['site__in'] ) ) {
+ $this->sql_clauses['where']['site__in'] = "blog_id IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['site__in'] ) ) . ' )';
+ }
+
+ // Parse site IDs for a NOT IN clause.
+ if ( ! empty( $this->query_vars['site__not_in'] ) ) {
+ $this->sql_clauses['where']['site__not_in'] = "blog_id NOT IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['site__not_in'] ) ) . ' )';
+ }
+
+ $network_id = absint( $this->query_vars['network_id'] );
+
+ if ( ! empty( $network_id ) ) {
+ $this->sql_clauses['where']['network_id'] = $wpdb->prepare( 'site_id = %d', $network_id );
+ }
+
+ // Parse site network IDs for an IN clause.
+ if ( ! empty( $this->query_vars['network__in'] ) ) {
+ $this->sql_clauses['where']['network__in'] = 'site_id IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['network__in'] ) ) . ' )';
+ }
+
+ // Parse site network IDs for a NOT IN clause.
+ if ( ! empty( $this->query_vars['network__not_in'] ) ) {
+ $this->sql_clauses['where']['network__not_in'] = 'site_id NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['network__not_in'] ) ) . ' )';
+ }
+
+ if ( ! empty( $this->query_vars['domain'] ) ) {
+ $this->sql_clauses['where']['domain'] = $wpdb->prepare( 'domain = %s', $this->query_vars['domain'] );
+ }
+
+ // Parse site domain for an IN clause.
+ if ( is_array( $this->query_vars['domain__in'] ) ) {
+ $this->sql_clauses['where']['domain__in'] = "domain IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__in'] ) ) . "' )";
+ }
+
+ // Parse site domain for a NOT IN clause.
+ if ( is_array( $this->query_vars['domain__not_in'] ) ) {
+ $this->sql_clauses['where']['domain__not_in'] = "domain NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__not_in'] ) ) . "' )";
+ }
+
+ if ( ! empty( $this->query_vars['path'] ) ) {
+ $this->sql_clauses['where']['path'] = $wpdb->prepare( 'path = %s', $this->query_vars['path'] );
+ }
+
+ // Parse site path for an IN clause.
+ if ( is_array( $this->query_vars['path__in'] ) ) {
+ $this->sql_clauses['where']['path__in'] = "path IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__in'] ) ) . "' )";
+ }
+
+ // Parse site path for a NOT IN clause.
+ if ( is_array( $this->query_vars['path__not_in'] ) ) {
+ $this->sql_clauses['where']['path__not_in'] = "path NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__not_in'] ) ) . "' )";
+ }
+
+ if ( is_numeric( $this->query_vars['archived'] ) ) {
+ $archived = absint( $this->query_vars['archived'] );
+ $this->sql_clauses['where']['archived'] = $wpdb->prepare( "archived = %d ", $archived );
+ }
+
+ if ( is_numeric( $this->query_vars['mature'] ) ) {
+ $mature = absint( $this->query_vars['mature'] );
+ $this->sql_clauses['where']['mature'] = $wpdb->prepare( "mature = %d ", $mature );
+ }
+
+ if ( is_numeric( $this->query_vars['spam'] ) ) {
+ $spam = absint( $this->query_vars['spam'] );
+ $this->sql_clauses['where']['spam'] = $wpdb->prepare( "spam = %d ", $spam );
+ }
+
+ if ( is_numeric( $this->query_vars['deleted'] ) ) {
+ $deleted = absint( $this->query_vars['deleted'] );
+ $this->sql_clauses['where']['deleted'] = $wpdb->prepare( "deleted = %d ", $deleted );
+ }
+
+ if ( is_numeric( $this->query_vars['public'] ) ) {
+ $public = absint( $this->query_vars['public'] );
+ $this->sql_clauses['where']['public'] = $wpdb->prepare( "public = %d ", $public );
+ }
+
+ // Falsey search strings are ignored.
+ if ( strlen( $this->query_vars['search'] ) ) {
+ $search_columns = array();
+
+ if ( $this->query_vars['search_columns'] ) {
+ $search_columns = array_intersect( $this->query_vars['search_columns'], array( 'domain', 'path' ) );
+ }
+
+ if ( ! $search_columns ) {
+ $search_columns = array( 'domain', 'path' );
+ }
+
+ /**
+ * Filters the columns to search in a WP_Site_Query search.
+ *
+ * The default columns include 'domain' and 'path.
+ *
+ * @since 4.6.0
+ *
+ * @param array $search_columns Array of column names to be searched.
+ * @param string $search Text being searched.
+ * @param WP_Site_Query $this The current WP_Site_Query instance.
+ */
+ $search_columns = apply_filters( 'site_search_columns', $search_columns, $this->query_vars['search'], $this );
+
+ $this->sql_clauses['where']['search'] = $this->get_search_sql( $this->query_vars['search'], $search_columns );
+ }
+
+ $date_query = $this->query_vars['date_query'];
+ if ( ! empty( $date_query ) && is_array( $date_query ) ) {
+ $this->date_query = new WP_Date_Query( $date_query, 'registered' );
+ $this->sql_clauses['where']['date_query'] = preg_replace( '/^\s*AND\s*/', '', $this->date_query->get_sql() );
+ }
+
+ $where = implode( ' AND ', $this->sql_clauses['where'] );
+
+ $pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' );
+
+ /**
+ * Filters the site query clauses.
+ *
+ * @since 4.6.0
+ *
+ * @param array $pieces A compacted array of site query clauses.
+ * @param WP_Site_Query &$this Current instance of WP_Site_Query, passed by reference.
+ */
+ $clauses = apply_filters_ref_array( 'sites_clauses', array( compact( $pieces ), &$this ) );
+
+ $fields = isset( $clauses['fields'] ) ? $clauses['fields'] : '';
+ $join = isset( $clauses['join'] ) ? $clauses['join'] : '';
+ $where = isset( $clauses['where'] ) ? $clauses['where'] : '';
+ $orderby = isset( $clauses['orderby'] ) ? $clauses['orderby'] : '';
+ $limits = isset( $clauses['limits'] ) ? $clauses['limits'] : '';
+ $groupby = isset( $clauses['groupby'] ) ? $clauses['groupby'] : '';
+
+ if ( $where ) {
+ $where = 'WHERE ' . $where;
+ }
+
+ if ( $groupby ) {
+ $groupby = 'GROUP BY ' . $groupby;
+ }
+
+ if ( $orderby ) {
+ $orderby = "ORDER BY $orderby";
+ }
+
+ $found_rows = '';
+ if ( ! $this->query_vars['no_found_rows'] ) {
+ $found_rows = 'SQL_CALC_FOUND_ROWS';
+ }
+
+ $this->sql_clauses['select'] = "SELECT $found_rows $fields";
+ $this->sql_clauses['from'] = "FROM $wpdb->blogs $join";
+ $this->sql_clauses['groupby'] = $groupby;
+ $this->sql_clauses['orderby'] = $orderby;
+ $this->sql_clauses['limits'] = $limits;
+
+ $this->request = "{$this->sql_clauses['select']} {$this->sql_clauses['from']} {$where} {$this->sql_clauses['groupby']} {$this->sql_clauses['orderby']} {$this->sql_clauses['limits']}";
+
+ if ( $this->query_vars['count'] ) {
+ return intval( $wpdb->get_var( $this->request ) );
+ }
+
+ $site_ids = $wpdb->get_col( $this->request );
+
+ return array_map( 'intval', $site_ids );
+ }
+
+ /**
+ * Populates found_sites and max_num_pages properties for the current query
+ * if the limit clause was used.
+ *
+ * @since 4.6.0
+ * @access private
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ */
+ private function set_found_sites() {
+ global $wpdb;
+
+ if ( $this->query_vars['number'] && ! $this->query_vars['no_found_rows'] ) {
+ /**
+ * Filters the query used to retrieve found site count.
+ *
+ * @since 4.6.0
+ *
+ * @param string $found_sites_query SQL query. Default 'SELECT FOUND_ROWS()'.
+ * @param WP_Site_Query $site_query The `WP_Site_Query` instance.
+ */
+ $found_sites_query = apply_filters( 'found_sites_query', 'SELECT FOUND_ROWS()', $this );
+
+ $this->found_sites = (int) $wpdb->get_var( $found_sites_query );
+ }
+ }
+
+ /**
+ * Used internally to generate an SQL string for searching across multiple columns.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $string Search string.
+ * @param array $columns Columns to search.
+ * @return string Search SQL.
+ */
+ protected function get_search_sql( $string, $columns ) {
+ global $wpdb;
+
+ if ( false !== strpos( $string, '*' ) ) {
+ $like = '%' . implode( '%', array_map( array( $wpdb, 'esc_like' ), explode( '*', $string ) ) ) . '%';
+ } else {
+ $like = '%' . $wpdb->esc_like( $string ) . '%';
+ }
+
+ $searches = array();
+ foreach ( $columns as $column ) {
+ $searches[] = $wpdb->prepare( "$column LIKE %s", $like );
+ }
+
+ return '(' . implode( ' OR ', $searches ) . ')';
+ }
+
+ /**
+ * Parses and sanitizes 'orderby' keys passed to the site query.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $orderby Alias for the field to order by.
+ * @return string|false Value to used in the ORDER clause. False otherwise.
+ */
+ protected function parse_orderby( $orderby ) {
+ global $wpdb;
+
+ $parsed = false;
+
+ switch ( $orderby ) {
+ case 'site__in':
+ $site__in = implode( ',', array_map( 'absint', $this->query_vars['site__in'] ) );
+ $parsed = "FIELD( {$wpdb->blogs}.blog_id, $site__in )";
+ break;
+ case 'network__in':
+ $network__in = implode( ',', array_map( 'absint', $this->query_vars['network__in'] ) );
+ $parsed = "FIELD( {$wpdb->blogs}.site_id, $network__in )";
+ break;
+ case 'domain':
+ case 'last_updated':
+ case 'path':
+ case 'registered':
+ $parsed = $orderby;
+ break;
+ case 'network_id':
+ $parsed = 'site_id';
+ break;
+ case 'domain_length':
+ $parsed = 'CHAR_LENGTH(domain)';
+ break;
+ case 'path_length':
+ $parsed = 'CHAR_LENGTH(path)';
+ break;
+ case 'id':
+ $parsed = 'blog_id';
+ break;
+ }
+
+ return $parsed;
+ }
+
+ /**
+ * Parses an 'order' query variable and cast it to 'ASC' or 'DESC' as necessary.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @param string $order The 'order' query variable.
+ * @return string The sanitized 'order' query variable.
+ */
+ protected function parse_order( $order ) {
+ if ( ! is_string( $order ) || empty( $order ) ) {
+ return 'ASC';
+ }
+
+ if ( 'ASC' === strtoupper( $order ) ) {
+ return 'ASC';
+ } else {
+ return 'DESC';
+ }
+ }
+}
diff --git a/wp-includes/class-wp-site.php b/wp-includes/class-wp-site.php
index 5de6b9f..a250c8d 100644
--- a/wp-includes/class-wp-site.php
+++ b/wp-includes/class-wp-site.php
@@ -14,6 +14,9 @@
* setup the current site.
*
* @since 4.5.0
+ *
+ * @property int $id
+ * @property int $network_id
*/
final class WP_Site {
@@ -198,4 +201,156 @@ final class WP_Site {
$this->$key = $value;
}
}
+
+ /**
+ * Converts an object to array.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @return array Object as array.
+ */
+ public function to_array() {
+ return get_object_vars( $this );
+ }
+
+ /**
+ * Getter.
+ *
+ * Allows current multisite naming conventions when getting properties.
+ * Allows access to extended site properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to get.
+ * @return mixed Value of the property. Null if not available.
+ */
+ public function __get( $key ) {
+ switch ( $key ) {
+ case 'id':
+ return (int) $this->blog_id;
+ case 'network_id':
+ return (int) $this->site_id;
+ case 'blogname':
+ case 'siteurl':
+ case 'post_count':
+ case 'home':
+ if ( ! did_action( 'ms_loaded' ) ) {
+ return null;
+ }
+ $details = $this->get_details();
+ return $details->$key;
+ }
+
+ return null;
+ }
+
+ /**
+ * Isset-er.
+ *
+ * Allows current multisite naming conventions when checking for properties.
+ * Checks for extended site properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to check if set.
+ * @return bool Whether the property is set.
+ */
+ public function __isset( $key ) {
+ switch ( $key ) {
+ case 'id':
+ case 'network_id':
+ return true;
+ case 'blogname':
+ case 'siteurl':
+ case 'post_count':
+ case 'home':
+ if ( ! did_action( 'ms_loaded' ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Setter.
+ *
+ * Allows current multisite naming conventions while setting properties.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $key Property to set.
+ * @param mixed $value Value to assign to the property.
+ */
+ public function __set( $key, $value ) {
+ switch ( $key ) {
+ case 'id':
+ $this->blog_id = (string) $value;
+ break;
+ case 'network_id':
+ $this->site_id = (string) $value;
+ break;
+ default:
+ $this->$key = $value;
+ }
+ }
+
+ /**
+ * Retrieves the details for this site.
+ *
+ * This method is used internally to lazy-load the extended properties of a site.
+ *
+ * @since 4.6.0
+ * @access private
+ *
+ * @see WP_Site::__get()
+ *
+ * @return object A raw site object with all details included.
+ */
+ private function get_details() {
+ $details = wp_cache_get( $this->blog_id, 'site-details' );
+
+ if ( false === $details ) {
+
+ switch_to_blog( $this->blog_id );
+ // Create a raw copy of the object for backwards compatibility with the filter below.
+ $details = new stdClass();
+ foreach ( get_object_vars( $this ) as $key => $value ) {
+ $details->$key = $value;
+ }
+ $details->blogname = get_option( 'blogname' );
+ $details->siteurl = get_option( 'siteurl' );
+ $details->post_count = get_option( 'post_count' );
+ $details->home = get_option( 'home' );
+ restore_current_blog();
+
+ $cache_details = true;
+ foreach ( array( 'blogname', 'siteurl', 'post_count', 'home' ) as $field ) {
+ if ( false === $details->$field ) {
+ $cache_details = false;
+ break;
+ }
+ }
+
+ if ( $cache_details ) {
+ wp_cache_set( $this->blog_id, $details, 'site-details' );
+ }
+ }
+
+ /**
+ * Filters a site's extended properties.
+ *
+ * @since 4.6.0
+ *
+ * @param object $details The site details.
+ */
+ $details = apply_filters( 'site_details', $details );
+
+ return $details;
+ }
}
diff --git a/wp-includes/class-wp-tax-query.php b/wp-includes/class-wp-tax-query.php
index a842b2c..9bff196 100644
--- a/wp-includes/class-wp-tax-query.php
+++ b/wp-includes/class-wp-tax-query.php
@@ -24,7 +24,7 @@ class WP_Tax_Query {
/**
* Array of taxonomy queries.
*
- * See {@see WP_Tax_Query::__construct()} for information on tax query arguments.
+ * See WP_Tax_Query::__construct() for information on tax query arguments.
*
* @since 3.1.0
* @access public
@@ -440,7 +440,7 @@ class WP_Tax_Query {
// Store the alias with this clause, so later siblings can use it.
$clause['alias'] = $alias;
- $join .= " INNER JOIN $wpdb->term_relationships";
+ $join .= " LEFT JOIN $wpdb->term_relationships";
$join .= $i ? " AS $alias" : '';
$join .= " ON ($this->primary_table.$this->primary_id_column = $alias.object_id)";
}
@@ -562,14 +562,14 @@ class WP_Tax_Query {
private function clean_query( &$query ) {
if ( empty( $query['taxonomy'] ) ) {
if ( 'term_taxonomy_id' !== $query['field'] ) {
- $query = new WP_Error( 'Invalid taxonomy' );
+ $query = new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
return;
}
// so long as there are shared terms, include_children requires that a taxonomy is set
$query['include_children'] = false;
} elseif ( ! taxonomy_exists( $query['taxonomy'] ) ) {
- $query = new WP_Error( 'Invalid taxonomy' );
+ $query = new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
return;
}
@@ -655,7 +655,7 @@ class WP_Tax_Query {
}
if ( 'AND' == $query['operator'] && count( $terms ) < count( $query['terms'] ) ) {
- $query = new WP_Error( 'Inexistent terms' );
+ $query = new WP_Error( 'inexistent_terms', __( 'Inexistent terms.' ) );
return;
}
diff --git a/wp-includes/class-wp-term-query.php b/wp-includes/class-wp-term-query.php
new file mode 100644
index 0000000..38977f4
--- /dev/null
+++ b/wp-includes/class-wp-term-query.php
@@ -0,0 +1,909 @@
+ '',
+ 'from' => '',
+ 'where' => array(),
+ 'orderby' => '',
+ 'limits' => '',
+ );
+
+ /**
+ * Query vars set by the user.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_vars;
+
+ /**
+ * Default values for query vars.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $query_var_defaults;
+
+ /**
+ * List of terms located by the query.
+ *
+ * @since 4.6.0
+ * @access public
+ * @var array
+ */
+ public $terms;
+
+ /**
+ * Constructor.
+ *
+ * Sets up the term query, based on the query vars passed.
+ *
+ * @since 4.6.0
+ * @since 4.6.0 Introduced 'term_taxonomy_id' parameter.
+ * @access public
+ *
+ * @param string|array $query {
+ * Optional. Array or query string of term query parameters. Default empty.
+ *
+ * @type string|array $taxonomy Taxonomy name, or array of taxonomies, to which results should
+ * be limited.
+ * @type string $orderby Field(s) to order terms by. Accepts term fields ('name',
+ * 'slug', 'term_group', 'term_id', 'id', 'description'),
+ * 'count' for term taxonomy count, 'include' to match the
+ * 'order' of the $include param, 'meta_value', 'meta_value_num',
+ * the value of `$meta_key`, the array keys of `$meta_query`, or
+ * 'none' to omit the ORDER BY clause. Defaults to 'name'.
+ * @type string $order Whether to order terms in ascending or descending order.
+ * Accepts 'ASC' (ascending) or 'DESC' (descending).
+ * Default 'ASC'.
+ * @type bool|int $hide_empty Whether to hide terms not assigned to any posts. Accepts
+ * 1|true or 0|false. Default 1|true.
+ * @type array|string $include Array or comma/space-separated string of term ids to include.
+ * Default empty array.
+ * @type array|string $exclude Array or comma/space-separated string of term ids to exclude.
+ * If $include is non-empty, $exclude is ignored.
+ * Default empty array.
+ * @type array|string $exclude_tree Array or comma/space-separated string of term ids to exclude
+ * along with all of their descendant terms. If $include is
+ * non-empty, $exclude_tree is ignored. Default empty array.
+ * @type int|string $number Maximum number of terms to return. Accepts ''|0 (all) or any
+ * positive number. Default ''|0 (all).
+ * @type int $offset The number by which to offset the terms query. Default empty.
+ * @type string $fields Term fields to query for. Accepts 'all' (returns an array of
+ * complete term objects), 'ids' (returns an array of ids),
+ * 'id=>parent' (returns an associative array with ids as keys,
+ * parent term IDs as values), 'names' (returns an array of term
+ * names), 'count' (returns the number of matching terms),
+ * 'id=>name' (returns an associative array with ids as keys,
+ * term names as values), or 'id=>slug' (returns an associative
+ * array with ids as keys, term slugs as values). Default 'all'.
+ * @type bool $count Whether to return a term count (true) or array of term objects
+ * (false). Will take precedence over `$fields` if true.
+ * Default false.
+ * @type string|array $name Optional. Name or array of names to return term(s) for.
+ * Default empty.
+ * @type string|array $slug Optional. Slug or array of slugs to return term(s) for.
+ * Default empty.
+ * @type int|array $term_taxonomy_id Optional. Term taxonomy ID, or array of term taxonomy IDs,
+ * to match when querying terms.
+ * @type bool $hierarchical Whether to include terms that have non-empty descendants (even
+ * if $hide_empty is set to true). Default true.
+ * @type string $search Search criteria to match terms. Will be SQL-formatted with
+ * wildcards before and after. Default empty.
+ * @type string $name__like Retrieve terms with criteria by which a term is LIKE
+ * `$name__like`. Default empty.
+ * @type string $description__like Retrieve terms where the description is LIKE
+ * `$description__like`. Default empty.
+ * @type bool $pad_counts Whether to pad the quantity of a term's children in the
+ * quantity of each term's "count" object variable.
+ * Default false.
+ * @type string $get Whether to return terms regardless of ancestry or whether the
+ * terms are empty. Accepts 'all' or empty (disabled).
+ * Default empty.
+ * @type int $child_of Term ID to retrieve child terms of. If multiple taxonomies
+ * are passed, $child_of is ignored. Default 0.
+ * @type int|string $parent Parent term ID to retrieve direct-child terms of.
+ * Default empty.
+ * @type bool $childless True to limit results to terms that have no children.
+ * This parameter has no effect on non-hierarchical taxonomies.
+ * Default false.
+ * @type string $cache_domain Unique cache key to be produced when this query is stored in
+ * an object cache. Default is 'core'.
+ * @type bool $update_term_meta_cache Whether to prime meta caches for matched terms. Default true.
+ * @type array $meta_query Optional. Meta query clauses to limit retrieved terms by.
+ * See `WP_Meta_Query`. Default empty.
+ * @type string $meta_key Limit terms to those matching a specific metadata key.
+ * Can be used in conjunction with `$meta_value`.
+ * @type string $meta_value Limit terms to those matching a specific metadata value.
+ * Usually used in conjunction with `$meta_key`.
+ * }
+ */
+ public function __construct( $query = '' ) {
+ $this->query_var_defaults = array(
+ 'taxonomy' => null,
+ 'orderby' => 'name',
+ 'order' => 'ASC',
+ 'hide_empty' => true,
+ 'include' => array(),
+ 'exclude' => array(),
+ 'exclude_tree' => array(),
+ 'number' => '',
+ 'offset' => '',
+ 'fields' => 'all',
+ 'count' => false,
+ 'name' => '',
+ 'slug' => '',
+ 'term_taxonomy_id' => '',
+ 'hierarchical' => true,
+ 'search' => '',
+ 'name__like' => '',
+ 'description__like' => '',
+ 'pad_counts' => false,
+ 'get' => '',
+ 'child_of' => 0,
+ 'parent' => '',
+ 'childless' => false,
+ 'cache_domain' => 'core',
+ 'update_term_meta_cache' => true,
+ 'meta_query' => '',
+ );
+
+ if ( ! empty( $query ) ) {
+ $this->query( $query );
+ }
+ }
+
+ /**
+ * Parse arguments passed to the term query with default query parameters.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query WP_Term_Query arguments. See WP_Term_Query::__construct()
+ */
+ public function parse_query( $query = '' ) {
+ if ( empty( $query ) ) {
+ $query = $this->query_vars;
+ }
+
+ $taxonomies = isset( $query['taxonomy'] ) ? (array) $query['taxonomy'] : null;
+
+ /**
+ * Filters the terms query default arguments.
+ *
+ * Use {@see 'get_terms_args'} to filter the passed arguments.
+ *
+ * @since 4.4.0
+ *
+ * @param array $defaults An array of default get_terms() arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $this->query_var_defaults = apply_filters( 'get_terms_defaults', $this->query_var_defaults, $taxonomies );
+
+ $query = wp_parse_args( $query, $this->query_var_defaults );
+
+ $query['number'] = absint( $query['number'] );
+ $query['offset'] = absint( $query['offset'] );
+
+ // 'parent' overrides 'child_of'.
+ if ( 0 < intval( $query['parent'] ) ) {
+ $query['child_of'] = false;
+ }
+
+ if ( 'all' == $query['get'] ) {
+ $query['childless'] = false;
+ $query['child_of'] = 0;
+ $query['hide_empty'] = 0;
+ $query['hierarchical'] = false;
+ $query['pad_counts'] = false;
+ }
+
+ $query['taxonomy'] = $taxonomies;
+
+ /**
+ * Filters the terms query arguments.
+ *
+ * @since 3.1.0
+ *
+ * @param array $args An array of get_terms() arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $this->query_vars = apply_filters( 'get_terms_args', $query, $taxonomies );
+
+ /**
+ * Fires after term query vars have been parsed.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Term_Query $this Current instance of WP_Term_Query.
+ */
+ do_action( 'parse_term_query', $this );
+ }
+
+ /**
+ * Sets up the query for retrieving terms.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string|array $query Array or URL query string of parameters.
+ * @return array|int List of terms, or number of terms when 'count' is passed as a query var.
+ */
+ public function query( $query ) {
+ $this->query_vars = wp_parse_args( $query );
+ return $this->get_terms();
+ }
+
+ /**
+ * Get terms, based on query_vars.
+ *
+ * @param 4.6.0
+ * @access public
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @return array
+ */
+ public function get_terms() {
+ global $wpdb;
+
+ $this->parse_query( $this->query_vars );
+ $args = $this->query_vars;
+
+ // Set up meta_query so it's available to 'pre_get_terms'.
+ $this->meta_query = new WP_Meta_Query();
+ $this->meta_query->parse_query_vars( $args );
+
+ /**
+ * Fires before terms are retrieved.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Term_Query $this Current instance of WP_Term_Query.
+ */
+ do_action( 'pre_get_terms', $this );
+
+ $taxonomies = $args['taxonomy'];
+
+ // Save queries by not crawling the tree in the case of multiple taxes or a flat tax.
+ $has_hierarchical_tax = false;
+ if ( $taxonomies ) {
+ foreach ( $taxonomies as $_tax ) {
+ if ( is_taxonomy_hierarchical( $_tax ) ) {
+ $has_hierarchical_tax = true;
+ }
+ }
+ }
+
+ if ( ! $has_hierarchical_tax ) {
+ $args['hierarchical'] = false;
+ $args['pad_counts'] = false;
+ }
+
+ // 'parent' overrides 'child_of'.
+ if ( 0 < intval( $args['parent'] ) ) {
+ $args['child_of'] = false;
+ }
+
+ if ( 'all' == $args['get'] ) {
+ $args['childless'] = false;
+ $args['child_of'] = 0;
+ $args['hide_empty'] = 0;
+ $args['hierarchical'] = false;
+ $args['pad_counts'] = false;
+ }
+
+ /**
+ * Filters the terms query arguments.
+ *
+ * @since 3.1.0
+ *
+ * @param array $args An array of get_terms() arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $args = apply_filters( 'get_terms_args', $args, $taxonomies );
+
+ // Avoid the query if the queried parent/child_of term has no descendants.
+ $child_of = $args['child_of'];
+ $parent = $args['parent'];
+
+ if ( $child_of ) {
+ $_parent = $child_of;
+ } elseif ( $parent ) {
+ $_parent = $parent;
+ } else {
+ $_parent = false;
+ }
+
+ if ( $_parent ) {
+ $in_hierarchy = false;
+ foreach ( $taxonomies as $_tax ) {
+ $hierarchy = _get_term_hierarchy( $_tax );
+
+ if ( isset( $hierarchy[ $_parent ] ) ) {
+ $in_hierarchy = true;
+ }
+ }
+
+ if ( ! $in_hierarchy ) {
+ return array();
+ }
+ }
+
+ $orderby = $this->parse_orderby( $this->query_vars['orderby'] );
+ if ( $orderby ) {
+ $orderby = "ORDER BY $orderby";
+ }
+
+ $order = $this->parse_order( $this->query_vars['order'] );
+
+ if ( $taxonomies ) {
+ $this->sql_clauses['where']['taxonomy'] = "tt.taxonomy IN ('" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "')";
+ }
+
+ $exclude = $args['exclude'];
+ $exclude_tree = $args['exclude_tree'];
+ $include = $args['include'];
+
+ $inclusions = '';
+ if ( ! empty( $include ) ) {
+ $exclude = '';
+ $exclude_tree = '';
+ $inclusions = implode( ',', wp_parse_id_list( $include ) );
+ }
+
+ if ( ! empty( $inclusions ) ) {
+ $this->sql_clauses['where']['inclusions'] = 't.term_id IN ( ' . $inclusions . ' )';
+ }
+
+ $exclusions = array();
+ if ( ! empty( $exclude_tree ) ) {
+ $exclude_tree = wp_parse_id_list( $exclude_tree );
+ $excluded_children = $exclude_tree;
+ foreach ( $exclude_tree as $extrunk ) {
+ $excluded_children = array_merge(
+ $excluded_children,
+ (array) get_terms( $taxonomies[0], array(
+ 'child_of' => intval( $extrunk ),
+ 'fields' => 'ids',
+ 'hide_empty' => 0
+ ) )
+ );
+ }
+ $exclusions = array_merge( $excluded_children, $exclusions );
+ }
+
+ if ( ! empty( $exclude ) ) {
+ $exclusions = array_merge( wp_parse_id_list( $exclude ), $exclusions );
+ }
+
+ // 'childless' terms are those without an entry in the flattened term hierarchy.
+ $childless = (bool) $args['childless'];
+ if ( $childless ) {
+ foreach ( $taxonomies as $_tax ) {
+ $term_hierarchy = _get_term_hierarchy( $_tax );
+ $exclusions = array_merge( array_keys( $term_hierarchy ), $exclusions );
+ }
+ }
+
+ if ( ! empty( $exclusions ) ) {
+ $exclusions = 't.term_id NOT IN (' . implode( ',', array_map( 'intval', $exclusions ) ) . ')';
+ } else {
+ $exclusions = '';
+ }
+
+ /**
+ * Filters the terms to exclude from the terms query.
+ *
+ * @since 2.3.0
+ *
+ * @param string $exclusions `NOT IN` clause of the terms query.
+ * @param array $args An array of terms query arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $exclusions = apply_filters( 'list_terms_exclusions', $exclusions, $args, $taxonomies );
+
+ if ( ! empty( $exclusions ) ) {
+ // Must do string manipulation here for backward compatibility with filter.
+ $this->sql_clauses['where']['exclusions'] = preg_replace( '/^\s*AND\s*/', '', $exclusions );
+ }
+
+ if ( ! empty( $args['name'] ) ) {
+ $names = (array) $args['name'];
+ foreach ( $names as &$_name ) {
+ // `sanitize_term_field()` returns slashed data.
+ $_name = stripslashes( sanitize_term_field( 'name', $_name, 0, reset( $taxonomies ), 'db' ) );
+ }
+
+ $this->sql_clauses['where']['name'] = "t.name IN ('" . implode( "', '", array_map( 'esc_sql', $names ) ) . "')";
+ }
+
+ if ( ! empty( $args['slug'] ) ) {
+ if ( is_array( $args['slug'] ) ) {
+ $slug = array_map( 'sanitize_title', $args['slug'] );
+ $this->sql_clauses['where']['slug'] = "t.slug IN ('" . implode( "', '", $slug ) . "')";
+ } else {
+ $slug = sanitize_title( $args['slug'] );
+ $this->sql_clauses['where']['slug'] = "t.slug = '$slug'";
+ }
+ }
+
+ if ( ! empty( $args['term_taxonomy_id'] ) ) {
+ if ( is_array( $args['term_taxonomy_id'] ) ) {
+ $tt_ids = implode( ',', array_map( 'intval', $args['term_taxonomy_id'] ) );
+ $this->sql_clauses['where']['term_taxonomy_id'] = "tt.term_taxonomy_id IN ({$tt_ids})";
+ } else {
+ $this->sql_clauses['where']['term_taxonomy_id'] = $wpdb->prepare( "tt.term_taxonomy_id = %d", $args['term_taxonomy_id'] );
+ }
+ }
+
+ if ( ! empty( $args['name__like'] ) ) {
+ $this->sql_clauses['where']['name__like'] = $wpdb->prepare( "t.name LIKE %s", '%' . $wpdb->esc_like( $args['name__like'] ) . '%' );
+ }
+
+ if ( ! empty( $args['description__like'] ) ) {
+ $this->sql_clauses['where']['description__like'] = $wpdb->prepare( "tt.description LIKE %s", '%' . $wpdb->esc_like( $args['description__like'] ) . '%' );
+ }
+
+ if ( '' !== $parent ) {
+ $parent = (int) $parent;
+ $this->sql_clauses['where']['parent'] = "tt.parent = '$parent'";
+ }
+
+ $hierarchical = $args['hierarchical'];
+ if ( 'count' == $args['fields'] ) {
+ $hierarchical = false;
+ }
+ if ( $args['hide_empty'] && !$hierarchical ) {
+ $this->sql_clauses['where']['count'] = 'tt.count > 0';
+ }
+
+ $number = $args['number'];
+ $offset = $args['offset'];
+
+ // Don't limit the query results when we have to descend the family tree.
+ if ( $number && ! $hierarchical && ! $child_of && '' === $parent ) {
+ if ( $offset ) {
+ $limits = 'LIMIT ' . $offset . ',' . $number;
+ } else {
+ $limits = 'LIMIT ' . $number;
+ }
+ } else {
+ $limits = '';
+ }
+
+
+ if ( ! empty( $args['search'] ) ) {
+ $this->sql_clauses['where']['search'] = $this->get_search_sql( $args['search'] );
+ }
+
+ // Meta query support.
+ $join = '';
+ $distinct = '';
+
+ // Reparse meta_query query_vars, in case they were modified in a 'pre_get_terms' callback.
+ $this->meta_query->parse_query_vars( $this->query_vars );
+ $mq_sql = $this->meta_query->get_sql( 'term', 't', 'term_id' );
+ $meta_clauses = $this->meta_query->get_clauses();
+
+ if ( ! empty( $meta_clauses ) ) {
+ $join .= $mq_sql['join'];
+ $this->sql_clauses['where']['meta_query'] = preg_replace( '/^\s*AND\s*/', '', $mq_sql['where'] );
+ $distinct .= "DISTINCT";
+
+ }
+
+ $selects = array();
+ switch ( $args['fields'] ) {
+ case 'all':
+ $selects = array( 't.*', 'tt.*' );
+ break;
+ case 'ids':
+ case 'id=>parent':
+ $selects = array( 't.term_id', 'tt.parent', 'tt.count', 'tt.taxonomy' );
+ break;
+ case 'names':
+ $selects = array( 't.term_id', 'tt.parent', 'tt.count', 't.name', 'tt.taxonomy' );
+ break;
+ case 'count':
+ $orderby = '';
+ $order = '';
+ $selects = array( 'COUNT(*)' );
+ break;
+ case 'id=>name':
+ $selects = array( 't.term_id', 't.name', 'tt.count', 'tt.taxonomy' );
+ break;
+ case 'id=>slug':
+ $selects = array( 't.term_id', 't.slug', 'tt.count', 'tt.taxonomy' );
+ break;
+ }
+
+ $_fields = $args['fields'];
+
+ /**
+ * Filters the fields to select in the terms query.
+ *
+ * Field lists modified using this filter will only modify the term fields returned
+ * by the function when the `$fields` parameter set to 'count' or 'all'. In all other
+ * cases, the term fields in the results array will be determined by the `$fields`
+ * parameter alone.
+ *
+ * Use of this filter can result in unpredictable behavior, and is not recommended.
+ *
+ * @since 2.8.0
+ *
+ * @param array $selects An array of fields to select for the terms query.
+ * @param array $args An array of term query arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $fields = implode( ', ', apply_filters( 'get_terms_fields', $selects, $args, $taxonomies ) );
+
+ $join .= " INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id";
+
+ $where = implode( ' AND ', $this->sql_clauses['where'] );
+
+ $pieces = array( 'fields', 'join', 'where', 'distinct', 'orderby', 'order', 'limits' );
+
+ /**
+ * Filters the terms query SQL clauses.
+ *
+ * @since 3.1.0
+ *
+ * @param array $pieces Terms query SQL clauses.
+ * @param array $taxonomies An array of taxonomies.
+ * @param array $args An array of terms query arguments.
+ */
+ $clauses = apply_filters( 'terms_clauses', compact( $pieces ), $taxonomies, $args );
+
+ $fields = isset( $clauses[ 'fields' ] ) ? $clauses[ 'fields' ] : '';
+ $join = isset( $clauses[ 'join' ] ) ? $clauses[ 'join' ] : '';
+ $where = isset( $clauses[ 'where' ] ) ? $clauses[ 'where' ] : '';
+ $distinct = isset( $clauses[ 'distinct' ] ) ? $clauses[ 'distinct' ] : '';
+ $orderby = isset( $clauses[ 'orderby' ] ) ? $clauses[ 'orderby' ] : '';
+ $order = isset( $clauses[ 'order' ] ) ? $clauses[ 'order' ] : '';
+ $limits = isset( $clauses[ 'limits' ] ) ? $clauses[ 'limits' ] : '';
+
+ if ( $where ) {
+ $where = "WHERE $where";
+ }
+
+ $this->sql_clauses['select'] = "SELECT $distinct $fields";
+ $this->sql_clauses['from'] = "FROM $wpdb->terms AS t $join";
+ $this->sql_clauses['orderby'] = $orderby ? "$orderby $order" : '';
+ $this->sql_clauses['limits'] = $limits;
+
+ $this->request = "{$this->sql_clauses['select']} {$this->sql_clauses['from']} {$where} {$this->sql_clauses['orderby']} {$this->sql_clauses['limits']}";
+
+ // $args can be anything. Only use the args defined in defaults to compute the key.
+ $key = md5( serialize( wp_array_slice_assoc( $args, array_keys( $this->query_var_defaults ) ) ) . serialize( $taxonomies ) . $this->request );
+ $last_changed = wp_cache_get( 'last_changed', 'terms' );
+ if ( ! $last_changed ) {
+ $last_changed = microtime();
+ wp_cache_set( 'last_changed', $last_changed, 'terms' );
+ }
+ $cache_key = "get_terms:$key:$last_changed";
+ $cache = wp_cache_get( $cache_key, 'terms' );
+ if ( false !== $cache ) {
+ if ( 'all' === $_fields ) {
+ $cache = array_map( 'get_term', $cache );
+ }
+
+ $this->terms = $cache;
+ return $this->terms;
+ }
+
+ if ( 'count' == $_fields ) {
+ return $wpdb->get_var( $this->request );
+ }
+
+ $terms = $wpdb->get_results( $this->request );
+ if ( 'all' == $_fields ) {
+ update_term_cache( $terms );
+ }
+
+ // Prime termmeta cache.
+ if ( $args['update_term_meta_cache'] ) {
+ $term_ids = wp_list_pluck( $terms, 'term_id' );
+ update_termmeta_cache( $term_ids );
+ }
+
+ if ( empty( $terms ) ) {
+ wp_cache_add( $cache_key, array(), 'terms', DAY_IN_SECONDS );
+ return array();
+ }
+
+ if ( $child_of ) {
+ foreach ( $taxonomies as $_tax ) {
+ $children = _get_term_hierarchy( $_tax );
+ if ( ! empty( $children ) ) {
+ $terms = _get_term_children( $child_of, $terms, $_tax );
+ }
+ }
+ }
+
+ // Update term counts to include children.
+ if ( $args['pad_counts'] && 'all' == $_fields ) {
+ foreach ( $taxonomies as $_tax ) {
+ _pad_term_counts( $terms, $_tax );
+ }
+ }
+
+ // Make sure we show empty categories that have children.
+ if ( $hierarchical && $args['hide_empty'] && is_array( $terms ) ) {
+ foreach ( $terms as $k => $term ) {
+ if ( ! $term->count ) {
+ $children = get_term_children( $term->term_id, $term->taxonomy );
+ if ( is_array( $children ) ) {
+ foreach ( $children as $child_id ) {
+ $child = get_term( $child_id, $term->taxonomy );
+ if ( $child->count ) {
+ continue 2;
+ }
+ }
+ }
+
+ // It really is empty.
+ unset( $terms[ $k ] );
+ }
+ }
+ }
+
+ $_terms = array();
+ if ( 'id=>parent' == $_fields ) {
+ foreach ( $terms as $term ) {
+ $_terms[ $term->term_id ] = $term->parent;
+ }
+ } elseif ( 'ids' == $_fields ) {
+ foreach ( $terms as $term ) {
+ $_terms[] = $term->term_id;
+ }
+ } elseif ( 'names' == $_fields ) {
+ foreach ( $terms as $term ) {
+ $_terms[] = $term->name;
+ }
+ } elseif ( 'id=>name' == $_fields ) {
+ foreach ( $terms as $term ) {
+ $_terms[ $term->term_id ] = $term->name;
+ }
+ } elseif ( 'id=>slug' == $_fields ) {
+ foreach ( $terms as $term ) {
+ $_terms[ $term->term_id ] = $term->slug;
+ }
+ }
+
+ if ( ! empty( $_terms ) ) {
+ $terms = $_terms;
+ }
+
+ // Hierarchical queries are not limited, so 'offset' and 'number' must be handled now.
+ if ( $hierarchical && $number && is_array( $terms ) ) {
+ if ( $offset >= count( $terms ) ) {
+ $terms = array();
+ } else {
+ $terms = array_slice( $terms, $offset, $number, true );
+ }
+ }
+
+ wp_cache_add( $cache_key, $terms, 'terms', DAY_IN_SECONDS );
+
+ if ( 'all' === $_fields ) {
+ $terms = array_map( 'get_term', $terms );
+ }
+
+ $this->terms = $terms;
+ return $this->terms;
+ }
+
+ /**
+ * Parse and sanitize 'orderby' keys passed to the term query.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $orderby_raw Alias for the field to order by.
+ * @return string|false Value to used in the ORDER clause. False otherwise.
+ */
+ protected function parse_orderby( $orderby_raw ) {
+ $_orderby = strtolower( $orderby_raw );
+ $maybe_orderby_meta = false;
+ if ( 'count' == $_orderby ) {
+ $orderby = 'tt.count';
+ } elseif ( 'name' == $_orderby ) {
+ $orderby = 't.name';
+ } elseif ( 'slug' == $_orderby ) {
+ $orderby = 't.slug';
+ } elseif ( 'include' == $_orderby && ! empty( $this->query_vars['include'] ) ) {
+ $include = implode( ',', array_map( 'absint', $this->query_vars['include'] ) );
+ $orderby = "FIELD( t.term_id, $include )";
+ } elseif ( 'term_group' == $_orderby ) {
+ $orderby = 't.term_group';
+ } elseif ( 'description' == $_orderby ) {
+ $orderby = 'tt.description';
+ } elseif ( 'none' == $_orderby ) {
+ $orderby = '';
+ } elseif ( empty( $_orderby ) || 'id' == $_orderby || 'term_id' === $_orderby ) {
+ $orderby = 't.term_id';
+ } else {
+ $orderby = 't.name';
+
+ // This may be a value of orderby related to meta.
+ $maybe_orderby_meta = true;
+ }
+
+ /**
+ * Filters the ORDERBY clause of the terms query.
+ *
+ * @since 2.8.0
+ *
+ * @param string $orderby `ORDERBY` clause of the terms query.
+ * @param array $args An array of terms query arguments.
+ * @param array $taxonomies An array of taxonomies.
+ */
+ $orderby = apply_filters( 'get_terms_orderby', $orderby, $this->query_vars, $this->query_vars['taxonomy'] );
+
+ // Run after the 'get_terms_orderby' filter for backward compatibility.
+ if ( $maybe_orderby_meta ) {
+ $maybe_orderby_meta = $this->parse_orderby_meta( $_orderby );
+ if ( $maybe_orderby_meta ) {
+ $orderby = $maybe_orderby_meta;
+ }
+ }
+
+ return $orderby;
+ }
+
+ /**
+ * Generate the ORDER BY clause for an 'orderby' param that is potentially related to a meta query.
+ *
+ * @since 4.6.0
+ * @access public
+ *
+ * @param string $orderby_raw Raw 'orderby' value passed to WP_Term_Query.
+ * @return string
+ */
+ protected function parse_orderby_meta( $orderby_raw ) {
+ $orderby = '';
+
+ // Tell the meta query to generate its SQL, so we have access to table aliases.
+ $this->meta_query->get_sql( 'term', 't', 'term_id' );
+ $meta_clauses = $this->meta_query->get_clauses();
+ if ( ! $meta_clauses || ! $orderby_raw ) {
+ return $orderby;
+ }
+
+ $allowed_keys = array();
+ $primary_meta_key = null;
+ $primary_meta_query = reset( $meta_clauses );
+ if ( ! empty( $primary_meta_query['key'] ) ) {
+ $primary_meta_key = $primary_meta_query['key'];
+ $allowed_keys[] = $primary_meta_key;
+ }
+ $allowed_keys[] = 'meta_value';
+ $allowed_keys[] = 'meta_value_num';
+ $allowed_keys = array_merge( $allowed_keys, array_keys( $meta_clauses ) );
+
+ if ( ! in_array( $orderby_raw, $allowed_keys, true ) ) {
+ return $orderby;
+ }
+
+ switch( $orderby_raw ) {
+ case $primary_meta_key:
+ case 'meta_value':
+ if ( ! empty( $primary_meta_query['type'] ) ) {
+ $orderby = "CAST({$primary_meta_query['alias']}.meta_value AS {$primary_meta_query['cast']})";
+ } else {
+ $orderby = "{$primary_meta_query['alias']}.meta_value";
+ }
+ break;
+
+ case 'meta_value_num':
+ $orderby = "{$primary_meta_query['alias']}.meta_value+0";
+ break;
+
+ default:
+ if ( array_key_exists( $orderby_raw, $meta_clauses ) ) {
+ // $orderby corresponds to a meta_query clause.
+ $meta_clause = $meta_clauses[ $orderby_raw ];
+ $orderby = "CAST({$meta_clause['alias']}.meta_value AS {$meta_clause['cast']})";
+ }
+ break;
+ }
+
+ return $orderby;
+ }
+
+ /**
+ * Parse an 'order' query variable and cast it to ASC or DESC as necessary.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @param string $order The 'order' query variable.
+ * @return string The sanitized 'order' query variable.
+ */
+ protected function parse_order( $order ) {
+ if ( ! is_string( $order ) || empty( $order ) ) {
+ return 'DESC';
+ }
+
+ if ( 'ASC' === strtoupper( $order ) ) {
+ return 'ASC';
+ } else {
+ return 'DESC';
+ }
+ }
+
+ /**
+ * Used internally to generate a SQL string related to the 'search' parameter.
+ *
+ * @since 4.6.0
+ * @access protected
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param string $string
+ * @return string
+ */
+ protected function get_search_sql( $string ) {
+ global $wpdb;
+
+ $like = '%' . $wpdb->esc_like( $string ) . '%';
+
+ return $wpdb->prepare( '((t.name LIKE %s) OR (t.slug LIKE %s))', $like, $like );
+ }
+}
diff --git a/wp-includes/class-wp-term.php b/wp-includes/class-wp-term.php
index d53d518..3b4931a 100644
--- a/wp-includes/class-wp-term.php
+++ b/wp-includes/class-wp-term.php
@@ -176,7 +176,7 @@ final class WP_Term {
// Don't return terms from invalid taxonomies.
if ( ! taxonomy_exists( $_term->taxonomy ) ) {
- return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) );
+ return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
}
$_term = sanitize_term( $_term, $_term->taxonomy, 'raw' );
diff --git a/wp-includes/class-wp-theme.php b/wp-includes/class-wp-theme.php
index d98fb31..40af39d 100644
--- a/wp-includes/class-wp-theme.php
+++ b/wp-includes/class-wp-theme.php
@@ -170,7 +170,7 @@ final class WP_Theme implements ArrayAccess {
/**
* Flag for whether the themes cache bucket should be persistently cached.
*
- * Default is false. Can be set with the wp_cache_themes_persistently filter.
+ * Default is false. Can be set with the {@see 'wp_cache_themes_persistently'} filter.
*
* @static
* @access private
@@ -437,7 +437,7 @@ final class WP_Theme implements ArrayAccess {
* translated data. We are doing so now as it is safe to do. However, as
* Name and Title could have been used as the key for get_themes(), both remain
* untranslated for back compatibility. This means that ['Name'] is not ideal,
- * and care should be taken to use $theme->display('Name') to get a properly
+ * and care should be taken to use `$theme::display( 'Name' )` to get a properly
* translated header.
*
* @param mixed $offset
@@ -447,8 +447,10 @@ final class WP_Theme implements ArrayAccess {
switch ( $offset ) {
case 'Name' :
case 'Title' :
- // See note above about using translated data. get() is not ideal.
- // It is only for backwards compatibility. Use display().
+ /*
+ * See note above about using translated data. get() is not ideal.
+ * It is only for backward compatibility. Use display().
+ */
return $this->get('Name');
case 'Author' :
return $this->display( 'Author');
@@ -769,15 +771,28 @@ final class WP_Theme implements ArrayAccess {
$this->name_translated = translate( $value, $this->get('TextDomain' ) );
return $this->name_translated;
case 'Tags' :
- if ( empty( $value ) || ! function_exists( 'get_theme_feature_list' ) )
+ if ( empty( $value ) || ! function_exists( 'get_theme_feature_list' ) ) {
return $value;
+ }
static $tags_list;
if ( ! isset( $tags_list ) ) {
- $tags_list = array();
+ $tags_list = array(
+ // As of 4.6, deprecated tags which are only used to provide translation for older themes.
+ 'black' => __( 'Black' ), 'blue' => __( 'Blue' ), 'brown' => __( 'Brown' ),
+ 'gray' => __( 'Gray' ), 'green' => __( 'Green' ), 'orange' => __( 'Orange' ),
+ 'pink' => __( 'Pink' ), 'purple' => __( 'Purple' ), 'red' => __( 'Red' ),
+ 'silver' => __( 'Silver' ), 'tan' => __( 'Tan' ), 'white' => __( 'White' ),
+ 'yellow' => __( 'Yellow' ), 'dark' => __( 'Dark' ), 'light' => __( 'Light' ),
+ 'fixed-layout' => __( 'Fixed Layout' ), 'fluid-layout' => __( 'Fluid Layout' ),
+ 'responsive-layout' => __( 'Responsive Layout' ), 'blavatar' => __( 'Blavatar' ),
+ 'photoblogging' => __( 'Photoblogging' ), 'seasonal' => __( 'Seasonal' ),
+ );
+
$feature_list = get_theme_feature_list( false ); // No API
- foreach ( $feature_list as $tags )
+ foreach ( $feature_list as $tags ) {
$tags_list += $tags;
+ }
}
foreach ( $value as &$tag ) {
@@ -918,7 +933,7 @@ final class WP_Theme implements ArrayAccess {
*
* This is typically the absolute URL to wp-content/themes. This forms the basis
* for all other URLs returned by WP_Theme, so we pass it to the public function
- * get_theme_root_uri() and allow it to run the theme_root_uri filter.
+ * get_theme_root_uri() and allow it to run the {@see 'theme_root_uri'} filter.
*
* @since 3.4.0
* @access public
@@ -1029,7 +1044,7 @@ final class WP_Theme implements ArrayAccess {
$page_templates += $this->parent()->get_page_templates( $post );
/**
- * Filter list of page templates for a theme.
+ * Filters list of page templates for a theme.
*
* @since 3.9.0
* @since 4.4.0 Converted to allow complete control over the `$page_templates` array.
@@ -1190,7 +1205,7 @@ final class WP_Theme implements ArrayAccess {
*/
public static function get_allowed( $blog_id = null ) {
/**
- * Filter the array of themes allowed on the network.
+ * Filters the array of themes allowed on the network.
*
* Site is provided as context so that a list of network allowed themes can
* be filtered further.
@@ -1223,7 +1238,7 @@ final class WP_Theme implements ArrayAccess {
}
/**
- * Filter the array of themes allowed on the network.
+ * Filters the array of themes allowed on the network.
*
* @since MU
*
@@ -1255,7 +1270,7 @@ final class WP_Theme implements ArrayAccess {
if ( isset( $allowed_themes[ $blog_id ] ) ) {
/**
- * Filter the array of themes allowed on the site.
+ * Filters the array of themes allowed on the site.
*
* @since 4.5.0
*
@@ -1315,6 +1330,60 @@ final class WP_Theme implements ArrayAccess {
return (array) apply_filters( 'site_allowed_themes', $allowed_themes[ $blog_id ], $blog_id );
}
+ /**
+ * Enables a theme for all sites on the current network.
+ *
+ * @since 4.6.0
+ * @access public
+ * @static
+ *
+ * @param string|array $stylesheets Stylesheet name or array of stylesheet names.
+ */
+ public static function network_enable_theme( $stylesheets ) {
+ if ( ! is_multisite() ) {
+ return;
+ }
+
+ if ( ! is_array( $stylesheets ) ) {
+ $stylesheets = array( $stylesheets );
+ }
+
+ $allowed_themes = get_site_option( 'allowedthemes' );
+ foreach ( $stylesheets as $stylesheet ) {
+ $allowed_themes[ $stylesheet ] = true;
+ }
+
+ update_site_option( 'allowedthemes', $allowed_themes );
+ }
+
+ /**
+ * Disables a theme for all sites on the current network.
+ *
+ * @since 4.6.0
+ * @access public
+ * @static
+ *
+ * @param string|array $stylesheets Stylesheet name or array of stylesheet names.
+ */
+ public static function network_disable_theme( $stylesheets ) {
+ if ( ! is_multisite() ) {
+ return;
+ }
+
+ if ( ! is_array( $stylesheets ) ) {
+ $stylesheets = array( $stylesheets );
+ }
+
+ $allowed_themes = get_site_option( 'allowedthemes' );
+ foreach ( $stylesheets as $stylesheet ) {
+ if ( isset( $allowed_themes[ $stylesheet ] ) ) {
+ unset( $allowed_themes[ $stylesheet ] );
+ }
+ }
+
+ update_site_option( 'allowedthemes', $allowed_themes );
+ }
+
/**
* Sorts themes by name.
*
diff --git a/wp-includes/class-wp-user-query.php b/wp-includes/class-wp-user-query.php
index 02cae10..84cdcf6 100644
--- a/wp-includes/class-wp-user-query.php
+++ b/wp-includes/class-wp-user-query.php
@@ -255,13 +255,6 @@ class WP_User_Query {
$blog_id = absint( $qv['blog_id'] );
}
- if ( isset( $qv['who'] ) && 'authors' == $qv['who'] && $blog_id ) {
- $qv['meta_key'] = $wpdb->get_blog_prefix( $blog_id ) . 'user_level';
- $qv['meta_value'] = 0;
- $qv['meta_compare'] = '!=';
- $qv['blog_id'] = $blog_id = 0; // Prevent extra meta query
- }
-
if ( $qv['has_published_posts'] && $blog_id ) {
if ( true === $qv['has_published_posts'] ) {
$post_types = get_post_types( array( 'public' => true ) );
@@ -281,6 +274,29 @@ class WP_User_Query {
$this->meta_query = new WP_Meta_Query();
$this->meta_query->parse_query_vars( $qv );
+ if ( isset( $qv['who'] ) && 'authors' == $qv['who'] && $blog_id ) {
+ $who_query = array(
+ 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'user_level',
+ 'value' => 0,
+ 'compare' => '!=',
+ );
+
+ // Prevent extra meta query.
+ $qv['blog_id'] = $blog_id = 0;
+
+ if ( empty( $this->meta_query->queries ) ) {
+ $this->meta_query->queries = array( $who_query );
+ } else {
+ // Append the cap query to the original queries and reparse the query.
+ $this->meta_query->queries = array(
+ 'relation' => 'AND',
+ array( $this->meta_query->queries, $who_query ),
+ );
+ }
+
+ $this->meta_query->parse_query_vars( $this->meta_query->queries );
+ }
+
$roles = array();
if ( isset( $qv['role'] ) ) {
if ( is_array( $qv['role'] ) ) {
@@ -464,7 +480,7 @@ class WP_User_Query {
}
/**
- * Filter the columns to search in a WP_User_Query search.
+ * Filters the columns to search in a WP_User_Query search.
*
* The default columns depend on the search term, and include 'user_email',
* 'user_login', 'ID', 'user_url', 'display_name', and 'user_nicename'.
@@ -531,7 +547,7 @@ class WP_User_Query {
}
/**
- * Filter SELECT FOUND_ROWS() query for the current WP_User_Query instance.
+ * Filters SELECT FOUND_ROWS() query for the current WP_User_Query instance.
*
* @since 3.2.0
*
@@ -720,7 +736,7 @@ class WP_User_Query {
}
/**
- * Make private properties readable for backwards compatibility.
+ * Make private properties readable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -735,7 +751,7 @@ class WP_User_Query {
}
/**
- * Make private properties settable for backwards compatibility.
+ * Make private properties settable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -751,7 +767,7 @@ class WP_User_Query {
}
/**
- * Make private properties checkable for backwards compatibility.
+ * Make private properties checkable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -766,7 +782,7 @@ class WP_User_Query {
}
/**
- * Make private properties un-settable for backwards compatibility.
+ * Make private properties un-settable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -780,7 +796,7 @@ class WP_User_Query {
}
/**
- * Make private/protected methods readable for backwards compatibility.
+ * Make private/protected methods readable for backward compatibility.
*
* @since 4.0.0
* @access public
diff --git a/wp-includes/class-wp-user.php b/wp-includes/class-wp-user.php
index 210919d..0f5ee10 100644
--- a/wp-includes/class-wp-user.php
+++ b/wp-includes/class-wp-user.php
@@ -242,7 +242,7 @@ class WP_User {
}
/**
- * Makes private/protected methods readable for backwards compatibility.
+ * Makes private/protected methods readable for backward compatibility.
*
* @since 4.3.0
* @access public
@@ -269,7 +269,7 @@ class WP_User {
*/
public function __isset( $key ) {
if ( 'id' == $key ) {
- _deprecated_argument( 'WP_User->id', '2.1',
+ _deprecated_argument( 'WP_User->id', '2.1.0',
sprintf(
/* translators: %s: WP_User->ID */
__( 'Use %s instead.' ),
@@ -299,7 +299,7 @@ class WP_User {
*/
public function __get( $key ) {
if ( 'id' == $key ) {
- _deprecated_argument( 'WP_User->id', '2.1',
+ _deprecated_argument( 'WP_User->id', '2.1.0',
sprintf(
/* translators: %s: WP_User->ID */
__( 'Use %s instead.' ),
@@ -338,7 +338,7 @@ class WP_User {
*/
public function __set( $key, $value ) {
if ( 'id' == $key ) {
- _deprecated_argument( 'WP_User->id', '2.1',
+ _deprecated_argument( 'WP_User->id', '2.1.0',
sprintf(
/* translators: %s: WP_User->ID */
__( 'Use %s instead.' ),
@@ -362,7 +362,7 @@ class WP_User {
*/
public function __unset( $key ) {
if ( 'id' == $key ) {
- _deprecated_argument( 'WP_User->id', '2.1',
+ _deprecated_argument( 'WP_User->id', '2.1.0',
sprintf(
/* translators: %s: WP_User->ID */
__( 'Use %s instead.' ),
@@ -712,7 +712,7 @@ class WP_User {
*/
public function has_cap( $cap ) {
if ( is_numeric( $cap ) ) {
- _deprecated_argument( __FUNCTION__, '2.0', __('Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead.') );
+ _deprecated_argument( __FUNCTION__, '2.0.0', __('Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead.') );
$cap = $this->translate_level_to_cap( $cap );
}
diff --git a/wp-includes/class-wp-walker.php b/wp-includes/class-wp-walker.php
index ee68a20..57bd90b 100644
--- a/wp-includes/class-wp-walker.php
+++ b/wp-includes/class-wp-walker.php
@@ -139,7 +139,7 @@ class Walker {
//display this element
$this->has_children = ! empty( $children_elements[ $id ] );
if ( isset( $args[0] ) && is_array( $args[0] ) ) {
- $args[0]['has_children'] = $this->has_children; // Backwards compatibility.
+ $args[0]['has_children'] = $this->has_children; // Back-compat.
}
$cb_args = array_merge( array(&$output, $element, $depth), $args);
@@ -386,7 +386,7 @@ class Walker {
*
* @since 2.7.0
* @access public
- *
+ *
* @param array $elements Elements to list.
* @return int Number of root elements.
*/
diff --git a/wp-includes/class-wp-widget-factory.php b/wp-includes/class-wp-widget-factory.php
index 12b4553..0616258 100644
--- a/wp-includes/class-wp-widget-factory.php
+++ b/wp-includes/class-wp-widget-factory.php
@@ -45,28 +45,84 @@ class WP_Widget_Factory {
self::__construct();
}
+ /**
+ * Memory for the number of times unique class instances have been hashed.
+ *
+ * This can be eliminated in favor of straight spl_object_hash() when 5.3
+ * is the minimum requirement for PHP.
+ *
+ * @since 4.6.0
+ * @access private
+ * @var array
+ *
+ * @see WP_Widget_Factory::hash_object()
+ */
+ private $hashed_class_counts = array();
+
+ /**
+ * Hashes an object, doing fallback of `spl_object_hash()` if not available.
+ *
+ * This can be eliminated in favor of straight spl_object_hash() when 5.3
+ * is the minimum requirement for PHP.
+ *
+ * @since 4.6.0
+ * @access private
+ *
+ * @param WP_Widget $widget Widget.
+ * @return string Object hash.
+ */
+ private function hash_object( $widget ) {
+ if ( function_exists( 'spl_object_hash' ) ) {
+ return spl_object_hash( $widget );
+ } else {
+ $class_name = get_class( $widget );
+ $hash = $class_name;
+ if ( ! isset( $widget->_wp_widget_factory_hash_id ) ) {
+ if ( ! isset( $this->hashed_class_counts[ $class_name ] ) ) {
+ $this->hashed_class_counts[ $class_name ] = 0;
+ }
+ $this->hashed_class_counts[ $class_name ] += 1;
+ $widget->_wp_widget_factory_hash_id = $this->hashed_class_counts[ $class_name ];
+ }
+ $hash .= ':' . $widget->_wp_widget_factory_hash_id;
+ return $hash;
+ }
+ }
+
/**
* Registers a widget subclass.
*
* @since 2.8.0
+ * @since 4.6.0 Updated the `$widget` parameter to also accept a WP_Widget instance object
+ * instead of simply a `WP_Widget` subclass name.
* @access public
*
- * @param string $widget_class The name of a WP_Widget subclass.
+ * @param string|WP_Widget $widget Either the name of a `WP_Widget` subclass or an instance of a `WP_Widget` subclass.
*/
- public function register( $widget_class ) {
- $this->widgets[$widget_class] = new $widget_class();
+ public function register( $widget ) {
+ if ( $widget instanceof WP_Widget ) {
+ $this->widgets[ $this->hash_object( $widget ) ] = $widget;
+ } else {
+ $this->widgets[ $widget ] = new $widget();
+ }
}
/**
* Un-registers a widget subclass.
*
* @since 2.8.0
+ * @since 4.6.0 Updated the `$widget` parameter to also accept a WP_Widget instance object
+ * instead of simply a `WP_Widget` subclass name.
* @access public
*
- * @param string $widget_class The name of a WP_Widget subclass.
+ * @param string|WP_Widget $widget Either the name of a `WP_Widget` subclass or an instance of a `WP_Widget` subclass.
*/
- public function unregister( $widget_class ) {
- unset( $this->widgets[ $widget_class ] );
+ public function unregister( $widget ) {
+ if ( $widget instanceof WP_Widget ) {
+ unset( $this->widgets[ $this->hash_object( $widget ) ] );
+ } else {
+ unset( $this->widgets[ $widget ] );
+ }
}
/**
diff --git a/wp-includes/class-wp-widget.php b/wp-includes/class-wp-widget.php
index 9b9e472..44f3686 100644
--- a/wp-includes/class-wp-widget.php
+++ b/wp-includes/class-wp-widget.php
@@ -10,8 +10,9 @@
/**
* Core base class extended to register widgets.
*
- * This class must be extended for each widget and WP_Widget::widget(), WP_Widget::update()
- * and WP_Widget::form() need to be overridden.
+ * This class must be extended for each widget, and WP_Widget::widget() must be overriden.
+ *
+ * If adding widget options, WP_Widget::update() and WP_Widget::form() should also be overridden.
*
* @since 2.8.0
* @since 4.4.0 Moved to its own file from wp-includes/widgets.php
@@ -168,7 +169,7 @@ class WP_Widget {
* @access public
*
* @see __construct()
- *
+ *
* @param string $id_base Optional Base ID for the widget, lowercase and unique. If left empty,
* a portion of the widget's class name will be used Has to be unique.
* @param string $name Name for the widget displayed on the configuration page.
@@ -352,7 +353,7 @@ class WP_Widget {
$instance = $instances[ $this->number ];
/**
- * Filter the settings for a particular widget instance.
+ * Filters the settings for a particular widget instance.
*
* Returning false will effectively short-circuit display of the widget.
*
@@ -441,7 +442,7 @@ class WP_Widget {
}
/**
- * Filter a widget's settings before saving.
+ * Filters a widget's settings before saving.
*
* Returning false will effectively short-circuit the widget's ability
* to update settings.
@@ -497,7 +498,7 @@ class WP_Widget {
}
/**
- * Filter the widget instance's settings before displaying the control form.
+ * Filters the widget instance's settings before displaying the control form.
*
* Returning false effectively short-circuits display of the control form.
*
diff --git a/wp-includes/class-wp-xmlrpc-server.php b/wp-includes/class-wp-xmlrpc-server.php
index 531dd50..be2d3ed 100644
--- a/wp-includes/class-wp-xmlrpc-server.php
+++ b/wp-includes/class-wp-xmlrpc-server.php
@@ -14,7 +14,7 @@
* options, etc.
*
* As of WordPress 3.5.0, XML-RPC is enabled by default. It can be disabled
- * via the xmlrpc_enabled filter found in wp_xmlrpc_server::login().
+ * via the {@see 'xmlrpc_enabled'} filter found in wp_xmlrpc_server::login().
*
* @package WordPress
* @subpackage Publishing
@@ -54,11 +54,11 @@ class wp_xmlrpc_server extends IXR_Server {
protected $auth_failed = false;
/**
- * Register all of the XMLRPC methods that XMLRPC server understands.
+ * Registers all of the XMLRPC methods that XMLRPC server understands.
*
* Sets up server and method property. Passes XMLRPC
- * methods through the 'xmlrpc_methods' filter to allow plugins to extend
- * or replace XMLRPC methods.
+ * methods through the {@see 'xmlrpc_methods'} filter to allow plugins to extend
+ * or replace XML-RPC methods.
*
* @since 1.5.0
*/
@@ -159,7 +159,7 @@ class wp_xmlrpc_server extends IXR_Server {
$this->initialise_blog_option_info();
/**
- * Filter the methods exposed by the XML-RPC server.
+ * Filters the methods exposed by the XML-RPC server.
*
* This filter can be used to add new methods, and remove built-in methods.
*
@@ -171,7 +171,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Make private/protected methods readable for backwards compatibility.
+ * Make private/protected methods readable for backward compatibility.
*
* @since 4.0.0
* @access public
@@ -247,7 +247,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Filter whether XML-RPC methods requiring authentication are enabled.
+ * Filters whether XML-RPC methods requiring authentication are enabled.
*
* Contrary to the way it's named, this filter does not control whether XML-RPC is *fully*
* enabled, rather, it only controls whether XML-RPC methods requiring authentication - such
@@ -288,7 +288,7 @@ class wp_xmlrpc_server extends IXR_Server {
$this->auth_failed = true;
/**
- * Filter the XML-RPC user login error message.
+ * Filters the XML-RPC user login error message.
*
* @since 3.5.0
*
@@ -562,7 +562,7 @@ class wp_xmlrpc_server extends IXR_Server {
);
/**
- * Filter the XML-RPC blog options property.
+ * Filters the XML-RPC blog options property.
*
* @since 2.6.0
*
@@ -704,7 +704,7 @@ class wp_xmlrpc_server extends IXR_Server {
$_taxonomy['object_type'] = array_unique( (array) $taxonomy->object_type );
/**
- * Filter XML-RPC-prepared data for the given taxonomy.
+ * Filters XML-RPC-prepared data for the given taxonomy.
*
* @since 3.4.0
*
@@ -738,7 +738,7 @@ class wp_xmlrpc_server extends IXR_Server {
$_term['count'] = intval( $_term['count'] );
/**
- * Filter XML-RPC-prepared data for the given term.
+ * Filters XML-RPC-prepared data for the given term.
*
* @since 3.4.0
*
@@ -867,7 +867,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Filter XML-RPC-prepared date for the given post.
+ * Filters XML-RPC-prepared date for the given post.
*
* @since 3.4.0
*
@@ -881,10 +881,12 @@ class wp_xmlrpc_server extends IXR_Server {
/**
* Prepares post data for return in an XML-RPC object.
*
+ * @since 3.4.0
+ * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object.
* @access protected
*
- * @param object $post_type Post type object.
- * @param array $fields The subset of post fields to return.
+ * @param WP_Post_Type $post_type Post type object.
+ * @param array $fields The subset of post fields to return.
* @return array The prepared post type data.
*/
protected function _prepare_post_type( $post_type, $fields ) {
@@ -918,12 +920,13 @@ class wp_xmlrpc_server extends IXR_Server {
$_post_type['taxonomies'] = get_object_taxonomies( $post_type->name, 'names' );
/**
- * Filter XML-RPC-prepared date for the given post type.
+ * Filters XML-RPC-prepared date for the given post type.
*
* @since 3.4.0
+ * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object.
*
- * @param array $_post_type An array of post type data.
- * @param object $post_type Post type object.
+ * @param array $_post_type An array of post type data.
+ * @param WP_Post_Type $post_type Post type object.
*/
return apply_filters( 'xmlrpc_prepare_post_type', $_post_type, $post_type );
}
@@ -957,7 +960,7 @@ class wp_xmlrpc_server extends IXR_Server {
$_media_item['thumbnail'] = $_media_item['link'];
/**
- * Filter XML-RPC-prepared data for the given media item.
+ * Filters XML-RPC-prepared data for the given media item.
*
* @since 3.4.0
*
@@ -1039,7 +1042,7 @@ class wp_xmlrpc_server extends IXR_Server {
);
/**
- * Filter XML-RPC-prepared data for the given page.
+ * Filters XML-RPC-prepared data for the given page.
*
* @since 3.4.0
*
@@ -1088,7 +1091,7 @@ class wp_xmlrpc_server extends IXR_Server {
);
/**
- * Filter XML-RPC-prepared data for the given comment.
+ * Filters XML-RPC-prepared data for the given comment.
*
* @since 3.4.0
*
@@ -1136,7 +1139,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Filter XML-RPC-prepared data for the given user.
+ * Filters XML-RPC-prepared data for the given user.
*
* @since 3.5.0
*
@@ -1152,7 +1155,7 @@ class wp_xmlrpc_server extends IXR_Server {
*
* @since 3.4.0
*
- * @link http://en.wikipedia.org/wiki/RSS_enclosure for information on RSS enclosures.
+ * @link https://en.wikipedia.org/wiki/RSS_enclosure for information on RSS enclosures.
*
* @param array $args {
* Method arguments. Note: top-level arguments must be ordered as documented.
@@ -1299,7 +1302,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_type = get_post_type_object( $post_data['post_type'] );
if ( ! $post_type )
- return new IXR_Error( 403, __( 'Invalid post type' ) );
+ return new IXR_Error( 403, __( 'Invalid post type.' ) );
$update = ! empty( $post_data['ID'] );
@@ -1340,7 +1343,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_data['post_author'] = absint( $post_data['post_author'] );
if ( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) {
if ( ! current_user_can( $post_type->cap->edit_others_posts ) )
- return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to create posts as this user.' ) );
$author = get_userdata( $post_data['post_author'] );
@@ -1423,7 +1426,7 @@ class wp_xmlrpc_server extends IXR_Server {
$term = get_term_by( 'id', $term_id, $taxonomy );
if ( ! $term )
- return new IXR_Error( 403, __( 'Invalid term ID' ) );
+ return new IXR_Error( 403, __( 'Invalid term ID.' ) );
$terms[$taxonomy][] = (int) $term_id;
}
@@ -1506,7 +1509,7 @@ class wp_xmlrpc_server extends IXR_Server {
$this->attach_uploads( $post_ID, $post_data['post_content'] );
/**
- * Filter post data array to be inserted via XML-RPC.
+ * Filters post data array to be inserted via XML-RPC.
*
* @since 3.4.0
*
@@ -1634,7 +1637,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'delete_post', $post_id ) ) {
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) );
}
$result = wp_delete_post( $post_id );
@@ -1709,7 +1712,7 @@ class wp_xmlrpc_server extends IXR_Server {
$fields = $args[4];
} else {
/**
- * Filter the list of post query fields used by the given XML-RPC method.
+ * Filters the list of post query fields used by the given XML-RPC method.
*
* @since 3.4.0
*
@@ -1731,7 +1734,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( ! current_user_can( 'edit_post', $post_id ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
return $this->_prepare_post( $post, $fields );
}
@@ -1792,7 +1795,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( $post_type->cap->edit_posts ) )
- return new IXR_Error( 401, __( 'You are not allowed to edit posts in this post type.' ));
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts in this post type.' ));
$query['post_type'] = $post_type->name;
@@ -1870,12 +1873,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.newTerm' );
if ( ! taxonomy_exists( $content_struct['taxonomy'] ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $content_struct['taxonomy'] );
if ( ! current_user_can( $taxonomy->cap->manage_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to create terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to create terms in this taxonomy.' ) );
$taxonomy = (array) $taxonomy;
@@ -1957,12 +1960,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.editTerm' );
if ( ! taxonomy_exists( $content_struct['taxonomy'] ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $content_struct['taxonomy'] );
if ( ! current_user_can( $taxonomy->cap->edit_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to edit terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit terms in this taxonomy.' ) );
$taxonomy = (array) $taxonomy;
@@ -1975,7 +1978,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 500, $term->get_error_message() );
if ( ! $term )
- return new IXR_Error( 404, __( 'Invalid term ID' ) );
+ return new IXR_Error( 404, __( 'Invalid term ID.' ) );
if ( isset( $content_struct['name'] ) ) {
$term_data['name'] = trim( $content_struct['name'] );
@@ -2053,12 +2056,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.deleteTerm' );
if ( ! taxonomy_exists( $taxonomy ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $taxonomy );
if ( ! current_user_can( $taxonomy->cap->delete_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to delete terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete terms in this taxonomy.' ) );
$term = get_term( $term_id, $taxonomy->name );
@@ -2066,7 +2069,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 500, $term->get_error_message() );
if ( ! $term )
- return new IXR_Error( 404, __( 'Invalid term ID' ) );
+ return new IXR_Error( 404, __( 'Invalid term ID.' ) );
$result = wp_delete_term( $term_id, $taxonomy->name );
@@ -2124,12 +2127,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getTerm' );
if ( ! taxonomy_exists( $taxonomy ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $taxonomy );
if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign terms in this taxonomy.' ) );
$term = get_term( $term_id , $taxonomy->name, ARRAY_A );
@@ -2137,7 +2140,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 500, $term->get_error_message() );
if ( ! $term )
- return new IXR_Error( 404, __( 'Invalid term ID' ) );
+ return new IXR_Error( 404, __( 'Invalid term ID.' ) );
return $this->_prepare_term( $term );
}
@@ -2182,12 +2185,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getTerms' );
if ( ! taxonomy_exists( $taxonomy ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $taxonomy );
if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign terms in this taxonomy.' ) );
$query = array();
@@ -2260,7 +2263,7 @@ class wp_xmlrpc_server extends IXR_Server {
$fields = $args[4];
} else {
/**
- * Filter the taxonomy query fields used by the given XML-RPC method.
+ * Filters the taxonomy query fields used by the given XML-RPC method.
*
* @since 3.4.0
*
@@ -2277,12 +2280,12 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getTaxonomy' );
if ( ! taxonomy_exists( $taxonomy ) )
- return new IXR_Error( 403, __( 'Invalid taxonomy' ) );
+ return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
$taxonomy = get_taxonomy( $taxonomy );
if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
- return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign terms in this taxonomy.' ) );
return $this->_prepare_taxonomy( $taxonomy, $fields );
}
@@ -2395,7 +2398,7 @@ class wp_xmlrpc_server extends IXR_Server {
$fields = $args[4];
} else {
/**
- * Filter the default user query fields used by the given XML-RPC method.
+ * Filters the default user query fields used by the given XML-RPC method.
*
* @since 3.5.0
*
@@ -2412,7 +2415,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getUser' );
if ( ! current_user_can( 'edit_user', $user_id ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit users.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this user.' ) );
$user_data = get_userdata( $user_id );
@@ -2470,7 +2473,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getUsers' );
if ( ! current_user_can( 'list_users' ) )
- return new IXR_Error( 401, __( 'You are not allowed to browse users.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to browse users.' ) );
$query = array( 'fields' => 'all_with_meta' );
@@ -2543,7 +2546,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getProfile' );
if ( ! current_user_can( 'edit_user', $user->ID ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit your profile.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit your profile.' ) );
$user_data = get_userdata( $user->ID );
@@ -2589,7 +2592,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.editProfile' );
if ( ! current_user_can( 'edit_user', $user->ID ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit your profile.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit your profile.' ) );
// holds data of the user
$user_data = array();
@@ -2659,7 +2662,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can( 'edit_page', $page_id ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this page.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this page.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPage' );
@@ -2700,7 +2703,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_pages' ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit pages.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPages' );
@@ -2794,7 +2797,7 @@ class wp_xmlrpc_server extends IXR_Server {
// Make sure the user can delete pages.
if ( !current_user_can('delete_page', $page_id) )
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete this page.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this page.' ) );
// Attempt to delete the page.
$result = wp_delete_post($page_id);
@@ -2856,7 +2859,7 @@ class wp_xmlrpc_server extends IXR_Server {
// Make sure the user is allowed to edit pages.
if ( !current_user_can('edit_page', $page_id) )
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to edit this page.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this page.' ) );
// Mark this as content for a page.
$content['post_type'] = 'page';
@@ -2902,7 +2905,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_pages' ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit pages.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit pages.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPageList' );
@@ -2958,7 +2961,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can('edit_posts') )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getAuthors' );
@@ -3053,7 +3056,7 @@ class wp_xmlrpc_server extends IXR_Server {
// Make sure the user is allowed to add a category.
if ( !current_user_can('manage_categories') )
- return new IXR_Error(401, __('Sorry, you do not have the right to add a category.'));
+ return new IXR_Error(401, __('Sorry, you are not allowed to add a category.'));
// If no slug was provided make it empty so that
// WordPress will generate one.
@@ -3112,7 +3115,7 @@ class wp_xmlrpc_server extends IXR_Server {
* @type string $password
* @type int $category_id
* }
- * @return bool|IXR_Error See {@link wp_delete_term()} for return info.
+ * @return bool|IXR_Error See wp_delete_term() for return info.
*/
public function wp_deleteCategory( $args ) {
$this->escape( $args );
@@ -3128,7 +3131,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.deleteCategory' );
if ( !current_user_can('manage_categories') )
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete a category.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete a category.' ) );
$status = wp_delete_term( $category_id, 'category' );
@@ -3226,7 +3229,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
- return new IXR_Error( 403, __( 'You are not allowed to moderate or edit this comment.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed to moderate or edit this comment.' ) );
}
return $this->_prepare_comment( $comment );
@@ -3244,7 +3247,7 @@ class wp_xmlrpc_server extends IXR_Server {
* - 'status' - Default is ''. Filter by status (e.g., 'approve', 'hold')
* - 'post_id' - Default is ''. The post where the comment is posted. Empty string shows all comments.
* - 'number' - Default is 10. Total number of media items to retrieve.
- * - 'offset' - Default is 0. See {@link WP_Query::query()} for more.
+ * - 'offset' - Default is 0. See WP_Query::query() for more.
*
* @since 2.7.0
*
@@ -3256,7 +3259,7 @@ class wp_xmlrpc_server extends IXR_Server {
* @type string $password
* @type array $struct
* }
- * @return array|IXR_Error Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents
+ * @return array|IXR_Error Contains a collection of comments. See wp_xmlrpc_server::wp_getComment() for a description of each item contents
*/
public function wp_getComments( $args ) {
$this->escape( $args );
@@ -3328,8 +3331,7 @@ class wp_xmlrpc_server extends IXR_Server {
* Delete a comment.
*
* By default, the comment will be moved to the trash instead of deleted.
- * See {@link wp_delete_comment()} for more information on
- * this behavior.
+ * See wp_delete_comment() for more information on this behavior.
*
* @since 2.7.0
*
@@ -3341,7 +3343,7 @@ class wp_xmlrpc_server extends IXR_Server {
* @type string $password
* @type int $comment_ID
* }
- * @return bool|IXR_Error {@link wp_delete_comment()}
+ * @return bool|IXR_Error See wp_delete_comment().
*/
public function wp_deleteComment( $args ) {
$this->escape($args);
@@ -3359,7 +3361,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( !current_user_can( 'edit_comment', $comment_ID ) ) {
- return new IXR_Error( 403, __( 'You are not allowed to moderate or edit this comment.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed to moderate or edit this comment.' ) );
}
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
@@ -3426,7 +3428,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'edit_comment', $comment_ID ) ) {
- return new IXR_Error( 403, __( 'You are not allowed to moderate or edit this comment.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed to moderate or edit this comment.' ) );
}
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
@@ -3498,7 +3500,7 @@ class wp_xmlrpc_server extends IXR_Server {
* @type string|int $post
* @type array $content_struct
* }
- * @return int|IXR_Error {@link wp_new_comment()}
+ * @return int|IXR_Error See wp_new_comment().
*/
public function wp_newComment($args) {
$this->escape($args);
@@ -3509,7 +3511,7 @@ class wp_xmlrpc_server extends IXR_Server {
$content_struct = $args[4];
/**
- * Filter whether to allow anonymous comments over XML-RPC.
+ * Filters whether to allow anonymous comments over XML-RPC.
*
* @since 2.7.0
*
@@ -3630,7 +3632,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'publish_posts' ) ) {
- return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
}
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
@@ -3671,7 +3673,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
- return new IXR_Error( 403, __( 'You are not allowed access to details of this post.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details of this post.' ) );
}
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
@@ -3711,7 +3713,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_posts' ) )
- return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPostStatusList' );
@@ -3743,7 +3745,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_pages' ) )
- return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPageStatusList' );
@@ -3775,7 +3777,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_pages' ) )
- return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
$templates = get_page_templates();
$templates['Default'] = 'default';
@@ -3869,7 +3871,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'manage_options' ) )
- return new IXR_Error( 403, __( 'You are not allowed to update options.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed to update options.' ) );
$option_names = array();
foreach ( $options as $o_name => $o_value ) {
@@ -3921,7 +3923,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'upload_files' ) )
- return new IXR_Error( 403, __( 'You do not have permission to upload files.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed to upload files.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getMediaItem' );
@@ -3969,7 +3971,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'upload_files' ) )
- return new IXR_Error( 401, __( 'You do not have permission to upload files.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to upload files.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getMediaLibrary' );
@@ -4013,7 +4015,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_posts' ) )
- return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) );
+ return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'wp.getPostFormats' );
@@ -4079,7 +4081,7 @@ class wp_xmlrpc_server extends IXR_Server {
$fields = $args[4];
} else {
/**
- * Filter the default query fields used by the given XML-RPC method.
+ * Filters the default query fields used by the given XML-RPC method.
*
* @since 3.4.0
*
@@ -4096,7 +4098,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'wp.getPostType' );
if ( ! post_type_exists( $post_type_name ) )
- return new IXR_Error( 403, __( 'Invalid post type' ) );
+ return new IXR_Error( 403, __( 'Invalid post type.' ) );
$post_type = get_post_type_object( $post_type_name );
@@ -4197,7 +4199,7 @@ class wp_xmlrpc_server extends IXR_Server {
$fields = $args[4];
} else {
/**
- * Filter the default revision query fields used by the given XML-RPC method.
+ * Filters the default revision query fields used by the given XML-RPC method.
*
* @since 3.5.0
*
@@ -4287,7 +4289,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( ! current_user_can( 'edit_post', $revision->post_parent ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
// Check if revisions are disabled.
if ( ! wp_revisions_enabled( $post ) )
@@ -4299,7 +4301,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/* Blogger API functions.
- * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/
+ * specs on http://plant.blogger.com/api and https://groups.yahoo.com/group/bloggerDev/
*/
/**
@@ -4410,7 +4412,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( !current_user_can( 'edit_posts' ) )
- return new IXR_Error( 401, __( 'Sorry, you do not have access to user data on this site.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to access user data on this site.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'blogger.getUserInfo' );
@@ -4456,7 +4458,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can( 'edit_post', $post_ID ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'blogger.getPost' );
@@ -4509,7 +4511,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( ! current_user_can( 'edit_posts' ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'blogger.getRecentPosts' );
@@ -4683,10 +4685,10 @@ class wp_xmlrpc_server extends IXR_Server {
$this->escape($actual_post);
if ( ! current_user_can( 'edit_post', $post_ID ) ) {
- return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.'));
+ return new IXR_Error(401, __('Sorry, you are not allowed to edit this post.'));
}
if ( 'publish' == $actual_post['post_status'] && ! current_user_can( 'publish_posts' ) ) {
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this post.' ) );
}
$postdata = array();
@@ -4753,7 +4755,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
if ( ! current_user_can( 'delete_post', $post_ID ) ) {
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) );
}
$result = wp_delete_post( $post_ID );
@@ -4855,7 +4857,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_type = 'post';
} else {
// No other post_type values are allowed here
- return new IXR_Error( 401, __( 'Invalid post type' ) );
+ return new IXR_Error( 401, __( 'Invalid post type.' ) );
}
} else {
if ( $publish )
@@ -4906,14 +4908,14 @@ class wp_xmlrpc_server extends IXR_Server {
switch ( $post_type ) {
case "post":
if ( !current_user_can( 'edit_others_posts' ) )
- return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to create posts as this user.' ) );
break;
case "page":
if ( !current_user_can( 'edit_others_pages' ) )
- return new IXR_Error( 401, __( 'You are not allowed to create pages as this user.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to create pages as this user.' ) );
break;
default:
- return new IXR_Error( 401, __( 'Invalid post type' ) );
+ return new IXR_Error( 401, __( 'Invalid post type.' ) );
}
$author = get_userdata( $content_struct['wp_author_id'] );
if ( ! $author )
@@ -5187,11 +5189,11 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( ! current_user_can( 'edit_post', $post_ID ) )
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
// Use wp.editPost to edit post types other than post and page.
if ( ! in_array( $postdata[ 'post_type' ], array( 'post', 'page' ) ) )
- return new IXR_Error( 401, __( 'Invalid post type' ) );
+ return new IXR_Error( 401, __( 'Invalid post type.' ) );
// Thwart attempt to change the post type.
if ( ! empty( $content_struct[ 'post_type' ] ) && ( $content_struct['post_type'] != $postdata[ 'post_type' ] ) )
@@ -5246,16 +5248,16 @@ class wp_xmlrpc_server extends IXR_Server {
switch ( $post_type ) {
case 'post':
if ( ! current_user_can( 'edit_others_posts' ) ) {
- return new IXR_Error( 401, __( 'You are not allowed to change the post author as this user.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to change the post author as this user.' ) );
}
break;
case 'page':
if ( ! current_user_can( 'edit_others_pages' ) ) {
- return new IXR_Error( 401, __( 'You are not allowed to change the page author as this user.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to change the page author as this user.' ) );
}
break;
default:
- return new IXR_Error( 401, __( 'Invalid post type' ) );
+ return new IXR_Error( 401, __( 'Invalid post type.' ) );
}
$post_author = $content_struct['wp_author_id'];
}
@@ -5358,9 +5360,9 @@ class wp_xmlrpc_server extends IXR_Server {
if ( 'publish' == $post_status || 'private' == $post_status ) {
if ( 'page' == $post_type && ! current_user_can( 'publish_pages' ) ) {
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this page.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this page.' ) );
} elseif ( ! current_user_can( 'publish_posts' ) ) {
- return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this post.' ) );
}
}
@@ -5484,7 +5486,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can( 'edit_post', $post_ID ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'metaWeblog.getPost' );
@@ -5614,7 +5616,7 @@ class wp_xmlrpc_server extends IXR_Server {
return $this->error;
if ( ! current_user_can( 'edit_posts' ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit posts on this site.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'metaWeblog.getRecentPosts' );
@@ -5791,7 +5793,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'metaWeblog.newMediaObject' );
if ( !current_user_can('upload_files') ) {
- $this->error = new IXR_Error( 401, __( 'You do not have permission to upload files.' ) );
+ $this->error = new IXR_Error( 401, __( 'Sorry, you are not allowed to upload files.' ) );
return $this->error;
}
@@ -5801,7 +5803,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Filter whether to preempt the XML-RPC media upload.
+ * Filters whether to preempt the XML-RPC media upload.
*
* Passing a truthy value will effectively short-circuit the media upload,
* returning that value as a 500 error instead.
@@ -5825,7 +5827,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_id = (int) $data['post_id'];
if ( ! current_user_can( 'edit_post', $post_id ) )
- return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
}
$attachment = array(
'post_title' => $name,
@@ -5996,7 +5998,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can( 'edit_post', $post_ID ) )
- return new IXR_Error( 401, __( 'Sorry, you can not edit this post.' ) );
+ return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
do_action( 'xmlrpc_call', 'mt.getPostCategories' );
@@ -6050,7 +6052,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can('edit_post', $post_ID) )
- return new IXR_Error(401, __('Sorry, you cannot edit this post.'));
+ return new IXR_Error(401, __('Sorry, you are not allowed to edit this post.'));
$catids = array();
foreach ( $categories as $cat ) {
@@ -6086,7 +6088,7 @@ class wp_xmlrpc_server extends IXR_Server {
do_action( 'xmlrpc_call', 'mt.supportedTextFilters' );
/**
- * Filter the MoveableType text filters list for XML-RPC.
+ * Filters the MoveableType text filters list for XML-RPC.
*
* @since 2.2.0
*
@@ -6169,7 +6171,7 @@ class wp_xmlrpc_server extends IXR_Server {
return new IXR_Error( 404, __( 'Invalid post ID.' ) );
if ( !current_user_can('publish_posts') || !current_user_can('edit_post', $post_ID) )
- return new IXR_Error(401, __('Sorry, you cannot publish this post.'));
+ return new IXR_Error(401, __('Sorry, you are not allowed to publish this post.'));
$postdata['post_status'] = 'publish';
@@ -6214,7 +6216,7 @@ class wp_xmlrpc_server extends IXR_Server {
$pagelinkedto = str_replace( '&', '&', $pagelinkedto );
/**
- * Filter the pingback source URI.
+ * Filters the pingback source URI.
*
* @since 3.6.0
*
@@ -6311,7 +6313,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
/**
- * Filter the pingback remote source.
+ * Filters the pingback remote source.
*
* @since 2.5.0
*
@@ -6457,7 +6459,7 @@ class wp_xmlrpc_server extends IXR_Server {
*/
protected function pingback_error( $code, $message ) {
/**
- * Filter the XML-RPC pingback error return.
+ * Filters the XML-RPC pingback error return.
*
* @since 3.5.1
*
diff --git a/wp-includes/class-wp.php b/wp-includes/class-wp.php
index 1217f1c..4a97183 100644
--- a/wp-includes/class-wp.php
+++ b/wp-includes/class-wp.php
@@ -56,7 +56,7 @@ class WP {
public $query_string;
/**
- * Permalink or requested URI.
+ * The request path, e.g. 2015/05/06.
*
* @since 2.0.0
* @access public
@@ -146,7 +146,7 @@ class WP {
global $wp_rewrite;
/**
- * Filter whether to parse the request.
+ * Filters whether to parse the request.
*
* @since 3.5.0
*
@@ -202,18 +202,19 @@ class WP {
// The requested permalink is in $pathinfo for path info requests and
// $req_uri for other requests.
if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) {
- $request = $pathinfo;
+ $requested_path = $pathinfo;
} else {
// If the request uri is the index, blank it out so that we don't try to match it against a rule.
if ( $req_uri == $wp_rewrite->index )
$req_uri = '';
- $request = $req_uri;
+ $requested_path = $req_uri;
}
+ $requested_file = $req_uri;
- $this->request = $request;
+ $this->request = $requested_path;
// Look for matches.
- $request_match = $request;
+ $request_match = $requested_path;
if ( empty( $request_match ) ) {
// An empty request could only match against ^$ regex
if ( isset( $rewrite['$'] ) ) {
@@ -223,9 +224,9 @@ class WP {
}
} else {
foreach ( (array) $rewrite as $match => $query ) {
- // If the requesting file is the anchor of the match, prepend it to the path info.
- if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
- $request_match = $req_uri . '/' . $request;
+ // If the requested file is the anchor of the match, prepend it to the path info.
+ if ( ! empty($requested_file) && strpos($match, $requested_file) === 0 && $requested_file != $requested_path )
+ $request_match = $requested_file . '/' . $requested_path;
if ( preg_match("#^$match#", $request_match, $matches) ||
preg_match("#^$match#", urldecode($request_match), $matches) ) {
@@ -269,7 +270,7 @@ class WP {
}
// If req_uri is empty or if it is a request for ourself, unset error.
- if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) {
+ if ( empty($requested_path) || $requested_file == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) {
unset( $error, $_GET['error'] );
if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false )
@@ -280,7 +281,7 @@ class WP {
}
/**
- * Filter the query variables whitelist before processing.
+ * Filters the query variables whitelist before processing.
*
* Allows (publicly allowed) query vars to be added, removed, or changed prior
* to executing the query. Needed to allow custom rewrite rules using your own arguments
@@ -367,7 +368,7 @@ class WP {
$this->query_vars['error'] = $error;
/**
- * Filter the array of parsed query variables.
+ * Filters the array of parsed query variables.
*
* @since 2.1.0
*
@@ -462,7 +463,7 @@ class WP {
}
/**
- * Filter the HTTP headers before they're sent to the browser.
+ * Filters the HTTP headers before they're sent to the browser.
*
* @since 2.8.0
*
@@ -512,8 +513,8 @@ class WP {
/**
* Sets the query string property based off of the query variable property.
*
- * The 'query_string' filter is deprecated, but still works. Plugins should
- * use the 'request' filter instead.
+ * The {@see 'query_string'} filter is deprecated, but still works. Plugins should
+ * use the {@see 'request'} filter instead.
*
* @since 2.0.0
* @access public
@@ -531,7 +532,7 @@ class WP {
if ( has_filter( 'query_string' ) ) { // Don't bother filtering and parsing if no plugins are hooked in.
/**
- * Filter the query string before parsing.
+ * Filters the query string before parsing.
*
* @since 1.5.0
* @deprecated 2.1.0 Use 'query_vars' or 'request' filters instead.
@@ -630,7 +631,7 @@ class WP {
global $wp_query;
/**
- * Filter whether to short-circuit default header status handling.
+ * Filters whether to short-circuit default header status handling.
*
* Returning a non-false value from the filter will short-circuit the handling
* and return early.
@@ -710,14 +711,14 @@ class WP {
/**
* Sets up all of the variables required by the WordPress environment.
*
- * The action 'wp' has one parameter that references the WP object. It
+ * The action {@see 'wp'} has one parameter that references the WP object. It
* allows for accessing the properties and methods to further manipulate the
* object.
*
* @since 2.0.0
* @access public
*
- * @param string|array $query_args Passed to {@link parse_request()}
+ * @param string|array $query_args Passed to parse_request().
*/
public function main($query_args = '') {
$this->init();
diff --git a/wp-includes/class.wp-scripts.php b/wp-includes/class.wp-scripts.php
index 144bfce..81634ec 100644
--- a/wp-includes/class.wp-scripts.php
+++ b/wp-includes/class.wp-scripts.php
@@ -197,7 +197,7 @@ class WP_Scripts extends WP_Dependencies {
* @return bool|string|void Void if no data exists, extra scripts if `$echo` is true, true otherwise.
*/
public function print_scripts_l10n( $handle, $echo = true ) {
- _deprecated_function( __FUNCTION__, '3.3', 'print_extra_script()' );
+ _deprecated_function( __FUNCTION__, '3.3.0', 'print_extra_script()' );
return $this->print_extra_script( $handle, $echo );
}
@@ -286,7 +286,7 @@ class WP_Scripts extends WP_Dependencies {
if ( $this->do_concat ) {
/**
- * Filter the script loader source.
+ * Filters the script loader source.
*
* @since 2.2.0
*
@@ -345,7 +345,7 @@ class WP_Scripts extends WP_Dependencies {
$tag = "{$cond_before}{$before_handle}\n{$after_handle}{$cond_after}";
/**
- * Filter the HTML script tag of an enqueued script.
+ * Filters the HTML script tag of an enqueued script.
*
* @since 4.1.0
*
@@ -502,7 +502,7 @@ class WP_Scripts extends WP_Dependencies {
$r = parent::all_deps( $handles, $recursion, $group );
if ( ! $recursion ) {
/**
- * Filter the list of script dependencies left to print.
+ * Filters the list of script dependencies left to print.
*
* @since 2.3.0
*
diff --git a/wp-includes/class.wp-styles.php b/wp-includes/class.wp-styles.php
index a175058..0b6c011 100644
--- a/wp-includes/class.wp-styles.php
+++ b/wp-includes/class.wp-styles.php
@@ -189,7 +189,7 @@ class WP_Styles extends WP_Dependencies {
$title = isset($obj->extra['title']) ? "title='" . esc_attr( $obj->extra['title'] ) . "'" : '';
/**
- * Filter the HTML link tag of an enqueued style.
+ * Filters the HTML link tag of an enqueued style.
*
* @since 2.6.0
* @since 4.3.0 Introduced the `$href` parameter.
@@ -313,7 +313,7 @@ class WP_Styles extends WP_Dependencies {
$r = parent::all_deps( $handles, $recursion, $group );
if ( ! $recursion ) {
/**
- * Filter the array of enqueued styles before processing for output.
+ * Filters the array of enqueued styles before processing for output.
*
* @since 2.6.0
*
@@ -344,7 +344,7 @@ class WP_Styles extends WP_Dependencies {
$src = add_query_arg('ver', $ver, $src);
/**
- * Filter an enqueued style's fully-qualified URL.
+ * Filters an enqueued style's fully-qualified URL.
*
* @since 2.6.0
*
diff --git a/wp-includes/comment-template.php b/wp-includes/comment-template.php
index 29b102a..42ebd41 100644
--- a/wp-includes/comment-template.php
+++ b/wp-includes/comment-template.php
@@ -34,7 +34,7 @@ function get_comment_author( $comment_ID = 0 ) {
}
/**
- * Filter the returned comment author name.
+ * Filters the returned comment author name.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -60,7 +60,7 @@ function comment_author( $comment_ID = 0 ) {
$author = get_comment_author( $comment );
/**
- * Filter the comment author's name for display.
+ * Filters the comment author's name for display.
*
* @since 1.2.0
* @since 4.1.0 The `$comment_ID` parameter was added.
@@ -85,7 +85,7 @@ function get_comment_author_email( $comment_ID = 0 ) {
$comment = get_comment( $comment_ID );
/**
- * Filter the comment author's returned email address.
+ * Filters the comment author's returned email address.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -117,7 +117,7 @@ function comment_author_email( $comment_ID = 0 ) {
$author_email = get_comment_author_email( $comment );
/**
- * Filter the comment author's email for display.
+ * Filters the comment author's email for display.
*
* @since 1.2.0
* @since 4.1.0 The `$comment_ID` parameter was added.
@@ -138,15 +138,18 @@ function comment_author_email( $comment_ID = 0 ) {
* address and use it for their own means good and bad.
*
* @since 0.71
+ * @since 4.6.0 Added the `$comment` parameter.
*
- * @param string $linktext Optional. Text to display instead of the comment author's email address.
- * Default empty.
- * @param string $before Optional. Text or HTML to display before the email link. Default empty.
- * @param string $after Optional. Text or HTML to display after the email link. Default empty.
+ * @param string $linktext Optional. Text to display instead of the comment author's email address.
+ * Default empty.
+ * @param string $before Optional. Text or HTML to display before the email link. Default empty.
+ * @param string $after Optional. Text or HTML to display after the email link. Default empty.
+ * @param int|WP_Comment $comment Optional. Comment ID or WP_Comment object. Default is the current comment.
*/
-function comment_author_email_link( $linktext = '', $before = '', $after = '' ) {
- if ( $link = get_comment_author_email_link( $linktext, $before, $after ) )
+function comment_author_email_link( $linktext = '', $before = '', $after = '', $comment = null ) {
+ if ( $link = get_comment_author_email_link( $linktext, $before, $after, $comment ) ) {
echo $link;
+ }
}
/**
@@ -159,17 +162,21 @@ function comment_author_email_link( $linktext = '', $before = '', $after = '' )
* address and use it for their own means good and bad.
*
* @since 2.7.0
+ * @since 4.6.0 Added the `$comment` parameter.
*
- * @param string $linktext Optional. Text to display instead of the comment author's email address.
- * Default empty.
- * @param string $before Optional. Text or HTML to display before the email link. Default empty.
- * @param string $after Optional. Text or HTML to display after the email link. Default empty.
- * @return string
+ * @param string $linktext Optional. Text to display instead of the comment author's email address.
+ * Default empty.
+ * @param string $before Optional. Text or HTML to display before the email link. Default empty.
+ * @param string $after Optional. Text or HTML to display after the email link. Default empty.
+ * @param int|WP_Comment $comment Optional. Comment ID or WP_Comment object. Default is the current comment.
+ * @return string HTML markup for the comment author email link. By default, the email address is obfuscated
+ * via the {@see 'comment_email'} filter with antispambot().
*/
-function get_comment_author_email_link( $linktext = '', $before = '', $after = '' ) {
- $comment = get_comment();
+function get_comment_author_email_link( $linktext = '', $before = '', $after = '', $comment = null ) {
+ $comment = get_comment( $comment );
+
/**
- * Filter the comment author's email for display.
+ * Filters the comment author's email for display.
*
* Care should be taken to protect the email address and assure that email
* harvesters do not capture your commenter's email address.
@@ -181,6 +188,7 @@ function get_comment_author_email_link( $linktext = '', $before = '', $after = '
* @param WP_Comment $comment The comment object.
*/
$email = apply_filters( 'comment_email', $comment->comment_author_email, $comment );
+
if ((!empty($email)) && ($email != '@')) {
$display = ($linktext != '') ? $linktext : $email;
$return = $before;
@@ -216,7 +224,7 @@ function get_comment_author_link( $comment_ID = 0 ) {
$return = "$author";
/**
- * Filter the comment author's link for display.
+ * Filters the comment author's link for display.
*
* @since 1.5.0
* @since 4.1.0 The `$author` and `$comment_ID` parameters were added.
@@ -256,7 +264,7 @@ function get_comment_author_IP( $comment_ID = 0 ) {
$comment = get_comment( $comment_ID );
/**
- * Filter the comment author's returned IP address.
+ * Filters the comment author's returned IP address.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -293,11 +301,16 @@ function comment_author_IP( $comment_ID = 0 ) {
*/
function get_comment_author_url( $comment_ID = 0 ) {
$comment = get_comment( $comment_ID );
- $url = ('http://' == $comment->comment_author_url) ? '' : $comment->comment_author_url;
- $url = esc_url( $url, array('http', 'https') );
+ $url = '';
+ $id = 0;
+ if ( ! empty( $comment ) ) {
+ $author_url = ( 'http://' == $comment->comment_author_url ) ? '' : $comment->comment_author_url;
+ $url = esc_url( $author_url, array( 'http', 'https' ) );
+ $id = $comment->ID;
+ }
/**
- * Filter the comment author's URL.
+ * Filters the comment author's URL.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -306,7 +319,7 @@ function get_comment_author_url( $comment_ID = 0 ) {
* @param int $comment_ID The comment ID.
* @param WP_Comment $comment The comment object.
*/
- return apply_filters( 'get_comment_author_url', $url, $comment->comment_ID, $comment );
+ return apply_filters( 'get_comment_author_url', $url, $id, $comment );
}
/**
@@ -323,7 +336,7 @@ function comment_author_url( $comment_ID = 0 ) {
$author_url = get_comment_author_url( $comment );
/**
- * Filter the comment author's URL for display.
+ * Filters the comment author's URL for display.
*
* @since 1.2.0
* @since 4.1.0 The `$comment_ID` parameter was added.
@@ -345,17 +358,20 @@ function comment_author_url( $comment_ID = 0 ) {
* in the order of $before, link, and finally $after.
*
* @since 1.5.0
+ * @since 4.6.0 Added the `$comment` parameter.
*
- * @param string $linktext Optional. The text to display instead of the comment
- * author's email address. Default empty.
- * @param string $before Optional. The text or HTML to display before the email link.
- * Default empty.
- * @param string $after Optional. The text or HTML to display after the email link.
- * Default empty.
+ * @param string $linktext Optional. The text to display instead of the comment
+ * author's email address. Default empty.
+ * @param string $before Optional. The text or HTML to display before the email link.
+ * Default empty.
+ * @param string $after Optional. The text or HTML to display after the email link.
+ * Default empty.
+ * @param int|WP_Comment $comment Optional. Comment ID or WP_Comment object.
+ * Default is the current comment.
* @return string The HTML link between the $before and $after parameters.
*/
-function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) {
- $url = get_comment_author_url();
+function get_comment_author_url_link( $linktext = '', $before = '', $after = '', $comment = 0 ) {
+ $url = get_comment_author_url( $comment );
$display = ($linktext != '') ? $linktext : $url;
$display = str_replace( 'http://www.', '', $display );
$display = str_replace( 'http://', '', $display );
@@ -367,7 +383,7 @@ function get_comment_author_url_link( $linktext = '', $before = '', $after = ''
$return = "$before$display$after";
/**
- * Filter the comment author's returned URL link.
+ * Filters the comment author's returned URL link.
*
* @since 1.5.0
*
@@ -380,16 +396,19 @@ function get_comment_author_url_link( $linktext = '', $before = '', $after = ''
* Displays the HTML link of the url of the author of the current comment.
*
* @since 0.71
+ * @since 4.6.0 Added the `$comment` parameter.
*
- * @param string $linktext Optional. Text to display instead of the comment author's
- * email address. Default empty.
- * @param string $before Optional. Text or HTML to display before the email link.
- * Default empty.
- * @param string $after Optional. Text or HTML to display after the email link.
- * Default empty.
+ * @param string $linktext Optional. Text to display instead of the comment author's
+ * email address. Default empty.
+ * @param string $before Optional. Text or HTML to display before the email link.
+ * Default empty.
+ * @param string $after Optional. Text or HTML to display after the email link.
+ * Default empty.
+ * @param int|WP_Comment $comment Optional. Comment ID or WP_Comment object.
+ * Default is the current comment.
*/
-function comment_author_url_link( $linktext = '', $before = '', $after = '' ) {
- echo get_comment_author_url_link( $linktext, $before, $after );
+function comment_author_url_link( $linktext = '', $before = '', $after = '', $comment = 0 ) {
+ echo get_comment_author_url_link( $linktext, $before, $after, $comment );
}
/**
@@ -493,7 +512,7 @@ function get_comment_class( $class = '', $comment_id = null, $post_id = null ) {
$classes = array_map('esc_attr', $classes);
/**
- * Filter the returned CSS classes for the current comment.
+ * Filters the returned CSS classes for the current comment.
*
* @since 2.7.0
*
@@ -524,7 +543,7 @@ function get_comment_date( $d = '', $comment_ID = 0 ) {
else
$date = mysql2date($d, $comment->comment_date);
/**
- * Filter the returned comment date.
+ * Filters the returned comment date.
*
* @since 1.5.0
*
@@ -569,7 +588,7 @@ function get_comment_excerpt( $comment_ID = 0 ) {
$words = explode( ' ', $comment_text );
/**
- * Filter the amount of words used in the comment excerpt.
+ * Filters the amount of words used in the comment excerpt.
*
* @since 4.4.0
*
@@ -587,7 +606,7 @@ function get_comment_excerpt( $comment_ID = 0 ) {
$excerpt .= '…';
}
/**
- * Filter the retrieved comment excerpt.
+ * Filters the retrieved comment excerpt.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -613,7 +632,7 @@ function comment_excerpt( $comment_ID = 0 ) {
$comment_excerpt = get_comment_excerpt( $comment );
/**
- * Filter the comment excerpt for display.
+ * Filters the comment excerpt for display.
*
* @since 1.2.0
* @since 4.1.0 The `$comment_ID` parameter was added.
@@ -635,7 +654,7 @@ function get_comment_ID() {
$comment = get_comment();
/**
- * Filter the returned comment ID.
+ * Filters the returned comment ID.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` parameter was added.
@@ -670,12 +689,13 @@ function comment_ID() {
* @param array $args {
* An array of optional arguments to override the defaults.
*
- * @type string $type Passed to {@see get_page_of_comment()}.
+ * @type string $type Passed to get_page_of_comment().
* @type int $page Current page of comments, for calculating comment pagination.
* @type int $per_page Per-page value for comment pagination.
- * @type int $max_depth Passed to {@see get_page_of_comment()}.
- * @type int|string $cpage Value to use for the comment's "comment-page" or "cpage" value. If provided, this
- * value overrides any value calculated from `$page` and `$per_page`.
+ * @type int $max_depth Passed to get_page_of_comment().
+ * @type int|string $cpage Value to use for the comment's "comment-page" or "cpage" value.
+ * If provided, this value overrides any value calculated from `$page`
+ * and `$per_page`.
* }
* @return string The permalink to the given comment.
*/
@@ -684,7 +704,7 @@ function get_comment_link( $comment = null, $args = array() ) {
$comment = get_comment($comment);
- // Backwards compat
+ // Back-compat.
if ( ! is_array( $args ) ) {
$args = array( 'page' => $args );
}
@@ -755,7 +775,7 @@ function get_comment_link( $comment = null, $args = array() ) {
$link = $link . '#comment-' . $comment->comment_ID;
/**
- * Filter the returned single comment permalink.
+ * Filters the returned single comment permalink.
*
* @since 2.8.0
* @since 4.4.0 Added the `$cpage` parameter.
@@ -783,7 +803,7 @@ function get_comments_link( $post_id = 0 ) {
$comments_link = get_permalink( $post_id ) . $hash;
/**
- * Filter the returned post comments permalink.
+ * Filters the returned post comments permalink.
*
* @since 3.6.0
*
@@ -805,7 +825,7 @@ function comments_link( $deprecated = '', $deprecated_2 = '' ) {
if ( !empty( $deprecated ) )
_deprecated_argument( __FUNCTION__, '0.72' );
if ( !empty( $deprecated_2 ) )
- _deprecated_argument( __FUNCTION__, '1.3' );
+ _deprecated_argument( __FUNCTION__, '1.3.0' );
echo esc_url( get_comments_link() );
}
@@ -828,7 +848,7 @@ function get_comments_number( $post_id = 0 ) {
}
/**
- * Filter the returned comment count for a post.
+ * Filters the returned comment count for a post.
*
* @since 1.5.0
*
@@ -850,7 +870,7 @@ function get_comments_number( $post_id = 0 ) {
*/
function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) {
if ( ! empty( $deprecated ) ) {
- _deprecated_argument( __FUNCTION__, '1.3' );
+ _deprecated_argument( __FUNCTION__, '1.3.0' );
}
echo get_comments_number_text( $zero, $one, $more );
}
@@ -873,6 +893,27 @@ function get_comments_number_text( $zero = false, $one = false, $more = false )
$output = sprintf( _n( '%s Comment', '%s Comments', $number ), number_format_i18n( $number ) );
} else {
// % Comments
+ /* translators: If comment number in your language requires declension,
+ * translate this to 'on'. Do not translate into your own language.
+ */
+ if ( 'on' === _x( 'off', 'Comment number declension: on or off' ) ) {
+ $text = preg_replace( '#.+?#', '', $more );
+ $text = preg_replace( '/&.+?;/', '', $text ); // Kill entities
+ $text = trim( strip_tags( $text ), '% ' );
+
+ // Replace '% Comments' with a proper plural form
+ if ( $text && ! preg_match( '/[0-9]+/', $text ) && false !== strpos( $more, '%' ) ) {
+ /* translators: %s: number of comments */
+ $new_text = _n( '%s Comment', '%s Comments', $number );
+ $new_text = trim( sprintf( $new_text, '' ) );
+
+ $more = str_replace( $text, $new_text, $more );
+ if ( false === strpos( $more, '%' ) ) {
+ $more = '% ' . $more;
+ }
+ }
+ }
+
$output = str_replace( '%', number_format_i18n( $number ), $more );
}
} elseif ( $number == 0 ) {
@@ -881,7 +922,7 @@ function get_comments_number_text( $zero = false, $one = false, $more = false )
$output = ( false === $one ) ? __( '1 Comment' ) : $one;
}
/**
- * Filter the comments count for display.
+ * Filters the comments count for display.
*
* @since 1.5.0
*
@@ -911,7 +952,7 @@ function get_comment_text( $comment_ID = 0, $args = array() ) {
$comment = get_comment( $comment_ID );
/**
- * Filter the text of a comment.
+ * Filters the text of a comment.
*
* @since 1.5.0
*
@@ -941,7 +982,7 @@ function comment_text( $comment_ID = 0, $args = array() ) {
$comment_text = get_comment_text( $comment, $args );
/**
- * Filter the text of a comment to be displayed.
+ * Filters the text of a comment to be displayed.
*
* @since 1.2.0
*
@@ -975,7 +1016,7 @@ function get_comment_time( $d = '', $gmt = false, $translate = true ) {
$date = mysql2date($d, $comment_date, $translate);
/**
- * Filter the returned comment time.
+ * Filters the returned comment time.
*
* @since 1.5.0
*
@@ -1015,7 +1056,7 @@ function get_comment_type( $comment_ID = 0 ) {
$comment->comment_type = 'comment';
/**
- * Filter the returned comment type.
+ * Filters the returned comment type.
*
* @since 1.5.0
* @since 4.1.0 The `$comment_ID` and `$comment` parameters were added.
@@ -1071,7 +1112,7 @@ function get_trackback_url() {
$tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . get_the_ID();
/**
- * Filter the returned trackback URL.
+ * Filters the returned trackback URL.
*
* @since 2.2.0
*
@@ -1091,7 +1132,7 @@ function get_trackback_url() {
*/
function trackback_url( $deprecated_echo = true ) {
if ( true !== $deprecated_echo ) {
- _deprecated_argument( __FUNCTION__, '2.5',
+ _deprecated_argument( __FUNCTION__, '2.5.0',
/* translators: %s: get_trackback_url() */
sprintf( __( 'Use %s instead if you do not want the value echoed.' ),
'get_trackback_url()'
@@ -1117,7 +1158,7 @@ function trackback_url( $deprecated_echo = true ) {
*/
function trackback_rdf( $deprecated = '' ) {
if ( ! empty( $deprecated ) ) {
- _deprecated_argument( __FUNCTION__, '2.5' );
+ _deprecated_argument( __FUNCTION__, '2.5.0' );
}
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && false !== stripos( $_SERVER['HTTP_USER_AGENT'], 'W3C_Validator' ) ) {
@@ -1153,7 +1194,7 @@ function comments_open( $post_id = null ) {
$open = ( 'open' == $_post->comment_status );
/**
- * Filter whether the current post is open for comments.
+ * Filters whether the current post is open for comments.
*
* @since 2.5.0
*
@@ -1178,7 +1219,7 @@ function pings_open( $post_id = null ) {
$open = ( 'open' == $_post->ping_status );
/**
- * Filter whether the current post is open for pings.
+ * Filters whether the current post is open for pings.
*
* @since 2.5.0
*
@@ -1219,10 +1260,10 @@ function wp_comment_form_unfiltered_html_nonce() {
* the post does not have comments.
*
* Uses the WordPress database object to query for the comments. The comments
- * are passed through the 'comments_array' filter hook with the list of comments
+ * are passed through the {@see 'comments_array'} filter hook with the list of comments
* and the post ID respectively.
*
- * The $file path is passed through a filter hook called, 'comments_template'
+ * The `$file` path is passed through a filter hook called {@see 'comments_template'},
* which includes the TEMPLATEPATH and $file combined. Tries the $filtered path
* first and if it fails it will require the default comment template from the
* default theme. If either does not exist, then the WordPress process will be
@@ -1386,7 +1427,7 @@ function comments_template( $file = '/comments.php', $separate_comments = false
}
/**
- * Filter the comments array.
+ * Filters the comments array.
*
* @since 2.1.0
*
@@ -1417,7 +1458,7 @@ function comments_template( $file = '/comments.php', $separate_comments = false
$theme_template = STYLESHEETPATH . $file;
/**
- * Filter the path to the theme template file used for the comments template.
+ * Filters the path to the theme template file used for the comments template.
*
* @since 1.5.1
*
@@ -1486,7 +1527,7 @@ function comments_popup_link( $zero = false, $one = false, $more = false, $css_c
if ( 0 == $number ) {
$respond_link = get_permalink() . '#respond';
/**
- * Filter the respond link when a post has no comments.
+ * Filters the respond link when a post has no comments.
*
* @since 4.4.0
*
@@ -1505,7 +1546,7 @@ function comments_popup_link( $zero = false, $one = false, $more = false, $css_c
$attributes = '';
/**
- * Filter the comments link attributes for display.
+ * Filters the comments link attributes for display.
*
* @since 2.5.0
*
@@ -1576,7 +1617,7 @@ function get_comment_reply_link( $args = array(), $comment = null, $post = null
}
/**
- * Filter the comment reply link arguments.
+ * Filters the comment reply link arguments.
*
* @since 4.1.0
*
@@ -1606,7 +1647,7 @@ function get_comment_reply_link( $args = array(), $comment = null, $post = null
}
/**
- * Filter the comment reply link.
+ * Filters the comment reply link.
*
* @since 2.7.0
*
@@ -1695,7 +1736,7 @@ function get_post_reply_link($args = array(), $post = null) {
$formatted_link = $args['before'] . $link . $args['after'];
/**
- * Filter the formatted post comments link HTML.
+ * Filters the formatted post comments link HTML.
*
* @since 2.7.0
*
@@ -1739,7 +1780,7 @@ function get_cancel_comment_reply_link( $text = '' ) {
$formatted_link = '' . $text . '';
/**
- * Filter the cancel comment reply link HTML.
+ * Filters the cancel comment reply link HTML.
*
* @since 2.7.0
*
@@ -1778,7 +1819,7 @@ function get_comment_id_fields( $id = 0 ) {
$result .= "\n";
/**
- * Filter the returned comment id fields.
+ * Filters the returned comment id fields.
*
* @since 3.0.0
*
@@ -1904,7 +1945,7 @@ function wp_list_comments( $args = array(), $comments = null ) {
$r = wp_parse_args( $args, $defaults );
/**
- * Filter the arguments used in retrieving the comment list.
+ * Filters the arguments used in retrieving the comment list.
*
* @since 4.0.0
*
@@ -1940,13 +1981,23 @@ function wp_list_comments( $args = array(), $comments = null ) {
$current_per_page = get_query_var( 'comments_per_page' );
if ( $r['page'] != $current_cpage || $r['per_page'] != $current_per_page ) {
-
- $comments = get_comments( array(
+ $comment_args = array(
'post_id' => get_the_ID(),
'orderby' => 'comment_date_gmt',
'order' => 'ASC',
- 'status' => 'all',
- ) );
+ 'status' => 'approve',
+ );
+
+ if ( is_user_logged_in() ) {
+ $comment_args['include_unapproved'] = get_current_user_id();
+ } else {
+ $commenter = wp_get_current_commenter();
+ if ( $commenter['comment_author_email'] ) {
+ $comment_args['include_unapproved'] = $commenter['comment_author_email'];
+ }
+ }
+
+ $comments = get_comments( $comment_args );
if ( 'all' != $r['type'] ) {
$comments_by_type = separate_comments( $comments );
@@ -2049,13 +2100,13 @@ function wp_list_comments( $args = array(), $comments = null ) {
}
/**
- * Output a complete commenting form for use within a template.
+ * Outputs a complete commenting form for use within a template.
*
* Most strings and form fields may be controlled through the $args array passed
- * into the function, while you may also choose to use the comment_form_default_fields
+ * into the function, while you may also choose to use the {@see 'comment_form_default_fields'}
* filter to modify the array of default fields if you'd just like to add a new
* one or remove a single field. All fields are also individually passed through
- * a filter of the form comment_form_field_$name where $name is the key used
+ * a filter of the {@see 'comment_form_field_$name'} where $name is the key used
* in the array of fields.
*
* @since 3.0.0
@@ -2065,12 +2116,13 @@ function wp_list_comments( $args = array(), $comments = null ) {
* 'cancel_reply_before', and 'cancel_reply_after' arguments.
* @since 4.5.0 The 'author', 'email', and 'url' form fields are limited to 245, 100,
* and 200 characters, respectively.
+ * @since 4.6.0 Introduced the 'action' argument.
*
* @param array $args {
* Optional. Default arguments and form fields to override.
*
* @type array $fields {
- * Default comment fields, filterable by default via the 'comment_form_default_fields' hook.
+ * Default comment fields, filterable by default via the {@see 'comment_form_default_fields'} hook.
*
* @type string $author Comment author field HTML.
* @type string $email Comment author email field HTML.
@@ -2083,6 +2135,7 @@ function wp_list_comments( $args = array(), $comments = null ) {
* if the user is not logged in.
* Default 'Your email address will not be published.'.
* @type string $comment_notes_after HTML element for a message displayed after the textarea field.
+ * @type string $action The comment form element action attribute. Default '/wp-comments-post.php'.
* @type string $id_form The comment form element id attribute. Default 'commentform'.
* @type string $id_submit The comment submit element id attribute. Default 'submit'.
* @type string $class_form The comment form element class attribute. Default 'comment-form'.
@@ -2136,7 +2189,7 @@ function comment_form( $args = array(), $post_id = null ) {
$required_text = sprintf( ' ' . __('Required fields are marked %s'), '*' );
/**
- * Filter the default comment form fields.
+ * Filters the default comment form fields.
*
* @since 3.0.0
*
@@ -2164,6 +2217,7 @@ function comment_form( $args = array(), $post_id = null ) {
) . '',
'comment_notes_before' => '
' . __( 'Your email address will not be published.' ) . ''. ( $req ? $required_text : '' ) . '
',
'comment_notes_after' => '',
+ 'action' => site_url( '/wp-comments-post.php' ),
'id_form' => 'commentform',
'id_submit' => 'submit',
'class_form' => 'comment-form',
@@ -2183,9 +2237,9 @@ function comment_form( $args = array(), $post_id = null ) {
);
/**
- * Filter the comment form default arguments.
+ * Filters the comment form default arguments.
*
- * Use 'comment_form_default_fields' to filter the comment fields.
+ * Use {@see 'comment_form_default_fields'} to filter the comment fields.
*
* @since 3.0.0
*
@@ -2228,7 +2282,7 @@ function comment_form( $args = array(), $post_id = null ) {
*/
do_action( 'comment_form_must_log_in_after' );
else : ?>
-
', $echo = true ) {
}
/**
- * Filter the HTML link to the Registration or Admin page.
+ * Filters the HTML link to the Registration or Admin page.
*
* Users are sent to the admin page if logged-in, or the registration page
* if enabled and logged-out.
@@ -566,7 +567,7 @@ function wp_register( $before = '
', $after = '
', $echo = true ) {
/**
* Theme container function for the 'wp_meta' action.
*
- * The 'wp_meta' action can have several purposes, depending on how you use it,
+ * The {@see 'wp_meta'} action can have several purposes, depending on how you use it,
* but one purpose might have been to allow for theme switching.
*
* @since 1.5.0
@@ -646,7 +647,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
switch( $show ) {
case 'home' : // DEPRECATED
case 'siteurl' : // DEPRECATED
- _deprecated_argument( __FUNCTION__, '2.2', sprintf(
+ _deprecated_argument( __FUNCTION__, '2.2.0', sprintf(
/* translators: 1: 'siteurl'/'home' argument, 2: bloginfo() function name, 3: 'url' argument */
__( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s option instead.' ),
'' . $show . '',
@@ -719,7 +720,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
}
break;
case 'text_direction':
- _deprecated_argument( __FUNCTION__, '2.2', sprintf(
+ _deprecated_argument( __FUNCTION__, '2.2.0', sprintf(
/* translators: 1: 'text_direction' argument, 2: bloginfo() function name, 3: is_rtl() function name */
__( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s function instead.' ),
'' . $show . '',
@@ -747,7 +748,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
if ( 'display' == $filter ) {
if ( $url ) {
/**
- * Filter the URL returned by get_bloginfo().
+ * Filters the URL returned by get_bloginfo().
*
* @since 2.0.5
*
@@ -757,7 +758,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
$output = apply_filters( 'bloginfo_url', $output, $show );
} else {
/**
- * Filter the site information returned by get_bloginfo().
+ * Filters the site information returned by get_bloginfo().
*
* @since 0.71
*
@@ -802,7 +803,7 @@ function get_site_icon_url( $size = 512, $url = '', $blog_id = 0 ) {
}
/**
- * Filter the site icon URL.
+ * Filters the site icon URL.
*
* @site 4.4.0
*
@@ -900,13 +901,15 @@ function get_custom_logo( $blog_id = 0 ) {
}
/**
- * Filter the custom logo output.
+ * Filters the custom logo output.
*
* @since 4.5.0
+ * @since 4.6.0 Added the `$blog_id` parameter.
*
- * @param string $html Custom logo HTML output.
+ * @param string $html Custom logo HTML output.
+ * @param int $blog_id ID of the blog to get the custom logo for.
*/
- return apply_filters( 'get_custom_logo', $html );
+ return apply_filters( 'get_custom_logo', $html, $blog_id );
}
/**
@@ -933,7 +936,7 @@ function the_custom_logo( $blog_id = 0 ) {
function wp_get_document_title() {
/**
- * Filter the document title before it is generated.
+ * Filters the document title before it is generated.
*
* Passing a non-empty value will short-circuit wp_get_document_title(),
* returning that value instead.
@@ -1013,7 +1016,7 @@ function wp_get_document_title() {
}
/**
- * Filter the separator for the document title.
+ * Filters the separator for the document title.
*
* @since 4.4.0
*
@@ -1022,7 +1025,7 @@ function wp_get_document_title() {
$sep = apply_filters( 'document_title_separator', '-' );
/**
- * Filter the parts of the document title.
+ * Filters the parts of the document title.
*
* @since 4.4.0
*
@@ -1071,10 +1074,10 @@ function _wp_render_title_tag() {
* important, which is the page that the user is looking at.
*
* There are also SEO benefits to having the blog title after or to the 'right'
- * or the page title. However, it is mostly common sense to have the blog title
+ * of the page title. However, it is mostly common sense to have the blog title
* to the right with most browsers supporting tabs. You can achieve this by
* using the seplocation parameter and setting the value to 'right'. This change
- * was introduced around 2.5.0, in case backwards compatibility of themes is
+ * was introduced around 2.5.0, in case backward compatibility of themes is
* important.
*
* @since 1.0.0
@@ -1179,7 +1182,7 @@ function wp_title( $sep = '»', $display = true, $seplocation = '' ) {
}
/**
- * Filter the parts of the page title.
+ * Filters the parts of the page title.
*
* @since 4.0.0
*
@@ -1196,7 +1199,7 @@ function wp_title( $sep = '»', $display = true, $seplocation = '' ) {
}
/**
- * Filter the text of the page title.
+ * Filters the text of the page title.
*
* @since 2.0.0
*
@@ -1237,7 +1240,7 @@ function single_post_title( $prefix = '', $display = true ) {
return;
/**
- * Filter the page title for a single post.
+ * Filters the page title for a single post.
*
* @since 0.71
*
@@ -1274,7 +1277,7 @@ function post_type_archive_title( $prefix = '', $display = true ) {
$post_type_obj = get_post_type_object( $post_type );
/**
- * Filter the post type archive title.
+ * Filters the post type archive title.
*
* @since 3.1.0
*
@@ -1344,7 +1347,7 @@ function single_term_title( $prefix = '', $display = true ) {
if ( is_category() ) {
/**
- * Filter the category archive page title.
+ * Filters the category archive page title.
*
* @since 2.0.10
*
@@ -1353,7 +1356,7 @@ function single_term_title( $prefix = '', $display = true ) {
$term_name = apply_filters( 'single_cat_title', $term->name );
} elseif ( is_tag() ) {
/**
- * Filter the tag archive page title.
+ * Filters the tag archive page title.
*
* @since 2.3.0
*
@@ -1362,7 +1365,7 @@ function single_term_title( $prefix = '', $display = true ) {
$term_name = apply_filters( 'single_tag_title', $term->name );
} elseif ( is_tax() ) {
/**
- * Filter the custom taxonomy archive page title.
+ * Filters the custom taxonomy archive page title.
*
* @since 3.1.0
*
@@ -1492,7 +1495,7 @@ function get_the_archive_title() {
}
/**
- * Filter the archive title.
+ * Filters the archive title.
*
* @since 4.1.0
*
@@ -1527,7 +1530,7 @@ function the_archive_description( $before = '', $after = '' ) {
*/
function get_the_archive_description() {
/**
- * Filter the archive description.
+ * Filters the archive description.
*
* @since 4.1.0
*
@@ -1585,7 +1588,7 @@ function get_archives_link($url, $text, $format = 'html', $before = '', $after =
$link_html = "\t$before$text$after\n";
/**
- * Filter the archive link content.
+ * Filters the archive link content.
*
* @since 2.6.0
* @since 4.5.0 Added the `$url`, `$text`, `$format`, `$before`, and `$after` parameters.
@@ -1674,7 +1677,7 @@ function wp_get_archives( $args = '' ) {
$sql_where = $wpdb->prepare( "WHERE post_type = %s AND post_status = 'publish'", $r['post_type'] );
/**
- * Filter the SQL WHERE clause for retrieving archives.
+ * Filters the SQL WHERE clause for retrieving archives.
*
* @since 2.2.0
*
@@ -1684,7 +1687,7 @@ function wp_get_archives( $args = '' ) {
$where = apply_filters( 'getarchives_where', $sql_where, $r );
/**
- * Filter the SQL JOIN clause for retrieving archives.
+ * Filters the SQL JOIN clause for retrieving archives.
*
* @since 2.2.0
*
@@ -1790,7 +1793,7 @@ function wp_get_archives( $args = '' ) {
$arc_week = get_weekstartend( $result->yyyymmdd, get_option( 'start_of_week' ) );
$arc_week_start = date_i18n( get_option( 'date_format' ), $arc_week['start'] );
$arc_week_end = date_i18n( get_option( 'date_format' ), $arc_week['end'] );
- $url = sprintf( '%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', home_url(), '', '?', '=', $arc_year, '&', '=', $result->week );
+ $url = add_query_arg( array( 'm' => $arc_year, 'w' => $result->week, ), home_url( '/' ) );
if ( 'post' !== $r['post_type'] ) {
$url = add_query_arg( 'post_type', $r['post_type'], $url );
}
@@ -2065,7 +2068,7 @@ function get_calendar( $initial = true, $echo = true ) {
if ( $echo ) {
/**
- * Filter the HTML calendar output.
+ * Filters the HTML calendar output.
*
* @since 3.0.0
*
@@ -2157,7 +2160,7 @@ function the_date( $d = '', $before = '', $after = '', $echo = true ) {
$previousday = $currentday;
/**
- * Filter the date a post was published for display.
+ * Filters the date a post was published for display.
*
* @since 0.71
*
@@ -2180,7 +2183,7 @@ function the_date( $d = '', $before = '', $after = '', $echo = true ) {
* Retrieve the date on which the post was written.
*
* Unlike the_date() this function will always return the date.
- * Modify output with 'get_the_date' filter.
+ * Modify output with the {@see 'get_the_date'} filter.
*
* @since 3.0.0
*
@@ -2202,7 +2205,7 @@ function get_the_date( $d = '', $post = null ) {
}
/**
- * Filter the date a post was published.
+ * Filters the date a post was published.
*
* @since 3.0.0
*
@@ -2229,7 +2232,7 @@ function the_modified_date( $d = '', $before = '', $after = '', $echo = true ) {
$the_modified_date = $before . get_the_modified_date($d) . $after;
/**
- * Filter the date a post was last modified for display.
+ * Filters the date a post was last modified for display.
*
* @since 2.1.0
*
@@ -2252,26 +2255,36 @@ function the_modified_date( $d = '', $before = '', $after = '', $echo = true ) {
* Retrieve the date on which the post was last modified.
*
* @since 2.1.0
+ * @since 4.6.0 Added the `$post` parameter.
*
- * @param string $d Optional. PHP date format. Defaults to the "date_format" option
- * @return string
+ * @param string $d Optional. PHP date format defaults to the date_format option if not specified.
+ * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default current post.
+ * @return false|string Date the current post was modified. False on failure.
*/
-function get_the_modified_date($d = '') {
- if ( '' == $d )
- $the_time = get_post_modified_time(get_option('date_format'), null, null, true);
- else
- $the_time = get_post_modified_time($d, null, null, true);
+function get_the_modified_date( $d = '', $post = null ) {
+ $post = get_post( $post );
+
+ if ( ! $post ) {
+ // For backward compatibility, failures go through the filter below.
+ $the_time = false;
+ } elseif ( empty( $d ) ) {
+ $the_time = get_post_modified_time( get_option( 'date_format' ), false, $post, true );
+ } else {
+ $the_time = get_post_modified_time( $d, false, $post, true );
+ }
/**
- * Filter the date a post was last modified.
+ * Filters the date a post was last modified.
*
* @since 2.1.0
+ * @since 4.6.0 Added the `$post` parameter.
*
- * @param string $the_time The formatted date.
- * @param string $d PHP date format. Defaults to value specified in
- * 'date_format' option.
+ * @param string $the_time The formatted date.
+ * @param string $d PHP date format. Defaults to value specified in
+ * 'date_format' option.
+ * @param WP_Post $post WP_Post object.
*/
- return apply_filters( 'get_the_modified_date', $the_time, $d );
+ return apply_filters( 'get_the_modified_date', $the_time, $d, $post );
}
/**
@@ -2283,7 +2296,7 @@ function get_the_modified_date($d = '') {
*/
function the_time( $d = '' ) {
/**
- * Filter the time a post was written for display.
+ * Filters the time a post was written for display.
*
* @since 0.71
*
@@ -2303,7 +2316,7 @@ function the_time( $d = '' ) {
* was written. Either 'G', 'U', or php date format defaults
* to the value specified in the time_format option. Default empty.
* @param int|WP_Post $post WP_Post object or ID. Default is global $post object.
- * @return false|string Formatted date string or Unix timestamp. False on failure.
+ * @return string|int|false Formatted date string or Unix timestamp if `$id` is 'U' or 'G'. False on failure.
*/
function get_the_time( $d = '', $post = null ) {
$post = get_post($post);
@@ -2318,7 +2331,7 @@ function get_the_time( $d = '', $post = null ) {
$the_time = get_post_time($d, false, $post, true);
/**
- * Filter the time a post was written.
+ * Filters the time a post was written.
*
* @since 1.5.0
*
@@ -2341,7 +2354,7 @@ function get_the_time( $d = '', $post = null ) {
* @param bool $gmt Optional. Whether to retrieve the GMT time. Default false.
* @param int|WP_Post $post WP_Post object or ID. Default is global $post object.
* @param bool $translate Whether to translate the time string. Default false.
- * @return false|string|int Formatted date string or Unix timestamp. False on failure.
+ * @return string|int|false Formatted date string or Unix timestamp if `$id` is 'U' or 'G'. False on failure.
*/
function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false ) {
$post = get_post($post);
@@ -2358,7 +2371,7 @@ function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false
$time = mysql2date($d, $time, $translate);
/**
- * Filter the localized time a post was written.
+ * Filters the localized time a post was written.
*
* @since 2.6.0
*
@@ -2379,7 +2392,7 @@ function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false
*/
function the_modified_time($d = '') {
/**
- * Filter the localized time a post was last modified, for display.
+ * Filters the localized time a post was last modified, for display.
*
* @since 2.0.0
*
@@ -2395,27 +2408,39 @@ function the_modified_time($d = '') {
* Retrieve the time at which the post was last modified.
*
* @since 2.0.0
+ * @since 4.6.0 Added the `$post` parameter.
*
- * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.
- * @return string
+ * @param string $d Optional. Format to use for retrieving the time the post
+ * was modified. Either 'G', 'U', or php date format defaults
+ * to the value specified in the time_format option. Default empty.
+ * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default current post.
+ * @return false|string Formatted date string or Unix timestamp. False on failure.
*/
-function get_the_modified_time($d = '') {
- if ( '' == $d )
- $the_time = get_post_modified_time(get_option('time_format'), null, null, true);
- else
- $the_time = get_post_modified_time($d, null, null, true);
+function get_the_modified_time( $d = '', $post = null ) {
+ $post = get_post( $post );
+
+ if ( ! $post ) {
+ // For backward compatibility, failures go through the filter below.
+ $the_time = false;
+ } elseif ( empty( $d ) ) {
+ $the_time = get_post_modified_time( get_option( 'time_format' ), false, $post, true );
+ } else {
+ $the_time = get_post_modified_time( $d, false, $post, true );
+ }
/**
- * Filter the localized time a post was last modified.
+ * Filters the localized time a post was last modified.
*
* @since 2.0.0
+ * @since 4.6.0 Added the `$post` parameter.
*
* @param string $the_time The formatted time.
* @param string $d Format to use for retrieving the time the post was
* written. Accepts 'G', 'U', or php date format. Defaults
* to value specified in 'time_format' option.
+ * @param WP_Post $post WP_Post object.
*/
- return apply_filters( 'get_the_modified_time', $the_time, $d );
+ return apply_filters( 'get_the_modified_time', $the_time, $d, $post );
}
/**
@@ -2428,7 +2453,7 @@ function get_the_modified_time($d = '') {
* @param bool $gmt Optional. Whether to retrieve the GMT time. Default false.
* @param int|WP_Post $post WP_Post object or ID. Default is global $post object.
* @param bool $translate Whether to translate the time string. Default false.
- * @return false|string Formatted date string or Unix timestamp. False on failure.
+ * @return string|int|false Formatted date string or Unix timestamp if `$id` is 'U' or 'G'. False on failure.
*/
function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translate = false ) {
$post = get_post($post);
@@ -2444,7 +2469,7 @@ function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translat
$time = mysql2date($d, $time, $translate);
/**
- * Filter the localized time a post was last modified.
+ * Filters the localized time a post was last modified.
*
* @since 2.8.0
*
@@ -2467,7 +2492,7 @@ function the_weekday() {
$the_weekday = $wp_locale->get_weekday( mysql2date( 'w', get_post()->post_date, false ) );
/**
- * Filter the weekday on which the post was written, for display.
+ * Filters the weekday on which the post was written, for display.
*
* @since 0.71
*
@@ -2502,7 +2527,7 @@ function the_weekday_date($before='',$after='') {
}
/**
- * Filter the localized date on which the post was written, for display.
+ * Filters the localized date on which the post was written, for display.
*
* @since 0.71
*
@@ -2515,13 +2540,15 @@ function the_weekday_date($before='',$after='') {
}
/**
- * Fire the wp_head action
+ * Fire the wp_head action.
+ *
+ * See {@see 'wp_head'}.
*
* @since 1.2.0
*/
function wp_head() {
/**
- * Print scripts or data in the head tag on the front end.
+ * Prints scripts or data in the head tag on the front end.
*
* @since 1.5.0
*/
@@ -2529,13 +2556,15 @@ function wp_head() {
}
/**
- * Fire the wp_footer action
+ * Fire the wp_footer action.
+ *
+ * See {@see 'wp_footer'}.
*
* @since 1.5.1
*/
function wp_footer() {
/**
- * Print scripts or data before the closing body tag on the front end.
+ * Prints scripts or data before the closing body tag on the front end.
*
* @since 1.5.1
*/
@@ -2565,7 +2594,7 @@ function feed_links( $args = array() ) {
$args = wp_parse_args( $args, $defaults );
/**
- * Filter whether to display the posts feed link.
+ * Filters whether to display the posts feed link.
*
* @since 4.4.0
*
@@ -2576,7 +2605,7 @@ function feed_links( $args = array() ) {
}
/**
- * Filter whether to display the comments feed link.
+ * Filters whether to display the comments feed link.
*
* @since 4.4.0
*
@@ -2683,7 +2712,7 @@ function rsd_link() {
/**
* Display the link to the Windows Live Writer manifest file.
*
- * @link http://msdn.microsoft.com/en-us/library/bb463265.aspx
+ * @link https://msdn.microsoft.com/en-us/library/bb463265.aspx
* @since 2.3.1
*/
function wlwmanifest_link() {
@@ -2692,11 +2721,15 @@ function wlwmanifest_link() {
}
/**
- * Display a noindex meta tag if required by the blog configuration.
+ * Displays a noindex meta tag if required by the blog configuration.
*
* If a blog is marked as not being public then the noindex meta tag will be
- * output to tell web robots not to index the page content. Add this to the wp_head action.
- * Typical usage is as a wp_head callback. add_action( 'wp_head', 'noindex' );
+ * output to tell web robots not to index the page content. Add this to the
+ * {@see 'wp_head'} action.
+ *
+ * Typical usage is as a {@see 'wp_head'} callback:
+ *
+ * add_action( 'wp_head', 'noindex' );
*
* @see wp_no_robots
*
@@ -2725,7 +2758,7 @@ function wp_no_robots() {
*
* @since 4.3.0
*
- * @link http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#rel-icon HTML5 specification link icon.
+ * @link https://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#rel-icon HTML5 specification link icon.
*/
function wp_site_icon() {
if ( ! has_site_icon() && ! is_customize_preview() ) {
@@ -2740,7 +2773,7 @@ function wp_site_icon() {
);
/**
- * Filter the site icon meta tags, so Plugins can add their own.
+ * Filters the site icon meta tags, so Plugins can add their own.
*
* @since 4.3.0
*
@@ -2754,6 +2787,110 @@ function wp_site_icon() {
}
}
+/**
+ * Prints resource hints to browsers for pre-fetching, pre-rendering
+ * and pre-connecting to web sites.
+ *
+ * Gives hints to browsers to prefetch specific pages or render them
+ * in the background, to perform DNS lookups or to begin the connection
+ * handshake (DNS, TCP, TLS) in the background.
+ *
+ * These performance improving indicators work by using ``.
+ *
+ * @since 4.6.0
+ */
+function wp_resource_hints() {
+ $hints = array(
+ 'dns-prefetch' => wp_dependencies_unique_hosts(),
+ 'preconnect' => array(),
+ 'prefetch' => array(),
+ 'prerender' => array(),
+ );
+
+ /*
+ * Add DNS prefetch for the Emoji CDN.
+ * The path is removed in the foreach loop below.
+ */
+ /** This filter is documented in wp-includes/formatting.php */
+ $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' );
+
+ foreach ( $hints as $relation_type => $urls ) {
+ /**
+ * Filters domains and URLs for resource hints of relation type.
+ *
+ * @since 4.6.0
+ *
+ * @param array $urls URLs to print for resource hints.
+ * @param string $relation_type The relation type the URLs are printed for, e.g. 'preconnect' or 'prerender'.
+ */
+ $urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );
+
+ foreach ( $urls as $key => $url ) {
+ $url = esc_url( $url, array( 'http', 'https' ) );
+ if ( ! $url ) {
+ unset( $urls[ $key ] );
+ continue;
+ }
+
+ if ( in_array( $relation_type, array( 'preconnect', 'dns-prefetch' ) ) ) {
+ $parsed = wp_parse_url( $url );
+ if ( empty( $parsed['host'] ) ) {
+ unset( $urls[ $key ] );
+ continue;
+ }
+
+ if ( 'preconnect' === $relation_type && ! empty( $parsed['scheme'] ) ) {
+ $url = $parsed['scheme'] . '://' . $parsed['host'];
+ } else {
+ // Use protocol-relative URLs for dns-prefetch or if scheme is missing.
+ $url = '//' . $parsed['host'];
+ }
+ }
+
+ $urls[ $key ] = $url;
+ }
+
+ $urls = array_unique( $urls );
+
+ foreach ( $urls as $url ) {
+ printf( "\n", $relation_type, $url );
+ }
+ }
+}
+
+/**
+ * Retrieves a list of unique hosts of all enqueued scripts and styles.
+ *
+ * @since 4.6.0
+ *
+ * @return array A list of unique hosts of enqueued scripts and styles.
+ */
+function wp_dependencies_unique_hosts() {
+ global $wp_scripts, $wp_styles;
+
+ $unique_hosts = array();
+
+ foreach ( array( $wp_scripts, $wp_styles ) as $dependencies ) {
+ if ( $dependencies instanceof WP_Dependencies && ! empty( $dependencies->queue ) ) {
+ foreach ( $dependencies->queue as $handle ) {
+ if ( ! isset( $dependencies->registered[ $handle ] ) ) {
+ continue;
+ }
+
+ /* @var _WP_Dependency $dependency */
+ $dependency = $dependencies->registered[ $handle ];
+ $parsed = wp_parse_url( $dependency->src );
+
+ if ( ! empty( $parsed['host'] ) && ! in_array( $parsed['host'], $unique_hosts ) && $parsed['host'] !== $_SERVER['SERVER_NAME'] ) {
+ $unique_hosts[] = $parsed['host'];
+ }
+ }
+ }
+ }
+
+ return $unique_hosts;
+}
+
/**
* Whether the user should have a WYSIWIG editor.
*
@@ -2787,7 +2924,7 @@ function user_can_richedit() {
}
/**
- * Filter whether the user can access the rich (Visual) editor.
+ * Filters whether the user can access the rich (Visual) editor.
*
* @since 2.1.0
*
@@ -2814,7 +2951,7 @@ function wp_default_editor() {
}
/**
- * Filter which editor should be displayed by default.
+ * Filters which editor should be displayed by default.
*
* @since 2.5.0
*
@@ -2830,7 +2967,7 @@ function wp_default_editor() {
* _WP_Editors should not be used directly. See https://core.trac.wordpress.org/ticket/17144.
*
* NOTE: Once initialized the TinyMCE editor cannot be safely moved in the DOM. For that reason
- * running wp_editor() inside of a metabox is not a good idea unless only Quicktags is used.
+ * running wp_editor() inside of a meta box is not a good idea unless only Quicktags is used.
* On the post edit screen several actions can be used to include additional editors
* containing TinyMCE: 'edit_page_form', 'edit_form_advanced' and 'dbx_post_sidebar'.
* See https://core.trac.wordpress.org/ticket/19173 for more information.
@@ -2850,10 +2987,10 @@ function wp_editor( $content, $editor_id, $settings = array() ) {
}
/**
- * Retrieve the contents of the search WordPress query variable.
+ * Retrieves the contents of the search WordPress query variable.
*
- * The search query string is passed through {@link esc_attr()}
- * to ensure that it is safe for placing in an html attribute.
+ * The search query string is passed through esc_attr() to ensure that it is safe
+ * for placing in an html attribute.
*
* @since 2.3.0
*
@@ -2863,7 +3000,7 @@ function wp_editor( $content, $editor_id, $settings = array() ) {
*/
function get_search_query( $escaped = true ) {
/**
- * Filter the contents of the search query variable.
+ * Filters the contents of the search query variable.
*
* @since 2.3.0
*
@@ -2877,16 +3014,16 @@ function get_search_query( $escaped = true ) {
}
/**
- * Display the contents of the search query variable.
+ * Displays the contents of the search query variable.
*
- * The search query string is passed through {@link esc_attr()}
- * to ensure that it is safe for placing in an html attribute.
+ * The search query string is passed through esc_attr() to ensure that it is safe
+ * for placing in an html attribute.
*
* @since 2.1.0
*/
function the_search_query() {
/**
- * Filter the contents of the search query variable for display.
+ * Filters the contents of the search query variable for display.
*
* @since 2.3.0
*
@@ -2922,7 +3059,7 @@ function get_language_attributes( $doctype = 'html' ) {
$output = implode(' ', $attributes);
/**
- * Filter the language attributes for display in the html tag.
+ * Filters the language attributes for display in the html tag.
*
* @since 2.5.0
* @since 4.3.0 Added the `$doctype` parameter.
@@ -2986,7 +3123,7 @@ function language_attributes( $doctype = 'html' ) {
* numbers to either side of current page, but not including current page.
*
* It is possible to add query vars to the link by using the 'add_args' argument
- * and see {@link add_query_arg()} for more information.
+ * and see add_query_arg() for more information.
*
* The 'before_page_number' and 'after_page_number' arguments allow users to
* augment the links themselves. Typically this might be to add context to the
@@ -3110,7 +3247,7 @@ function paginate_links( $args = '' ) {
$link .= $args['add_fragment'];
/**
- * Filter the paginated links for the given archive pages.
+ * Filters the paginated links for the given archive pages.
*
* @since 3.0.0
*
@@ -3272,9 +3409,9 @@ function register_admin_color_schemes() {
}
/**
- * Display the URL of a WordPress admin CSS file.
+ * Displays the URL of a WordPress admin CSS file.
*
- * @see WP_Styles::_css_href and its style_loader_src filter.
+ * @see WP_Styles::_css_href and its {@see 'style_loader_src'} filter.
*
* @since 2.3.0
*
@@ -3290,7 +3427,7 @@ function wp_admin_css_uri( $file = 'wp-admin' ) {
$_file = add_query_arg( 'version', get_bloginfo( 'version' ), $_file );
/**
- * Filter the URI of a WordPress admin CSS file.
+ * Filters the URI of a WordPress admin CSS file.
*
* @since 2.3.0
*
@@ -3304,8 +3441,8 @@ function wp_admin_css_uri( $file = 'wp-admin' ) {
* Enqueues or directly prints a stylesheet link to the specified CSS file.
*
* "Intelligently" decides to enqueue or to print the CSS file. If the
- * 'wp_print_styles' action has *not* yet been called, the CSS file will be
- * enqueued. If the wp_print_styles action *has* been called, the CSS link will
+ * {@see 'wp_print_styles'} action has *not* yet been called, the CSS file will be
+ * enqueued. If the {@see 'wp_print_styles'} action has been called, the CSS link will
* be printed. Printing may be forced by passing true as the $force_echo
* (second) parameter.
*
@@ -3333,7 +3470,7 @@ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) {
}
/**
- * Filter the stylesheet link to the specified CSS file.
+ * Filters the stylesheet link to the specified CSS file.
*
* If the site is set to display right-to-left, the RTL stylesheet link
* will be used instead.
@@ -3369,13 +3506,15 @@ function add_thickbox() {
}
/**
- * Display the XHTML generator that is generated on the wp_head hook.
+ * Displays the XHTML generator that is generated on the wp_head hook.
+ *
+ * See {@see 'wp_head'}.
*
* @since 2.5.0
*/
function wp_generator() {
/**
- * Filter the output of the XHTML generator tag.
+ * Filters the output of the XHTML generator tag.
*
* @since 2.5.0
*
@@ -3388,7 +3527,7 @@ function wp_generator() {
* Display the generator XML or Comment for RSS, ATOM, etc.
*
* Returns the correct generator type for the requested output format. Allows
- * for a plugin to filter generators overall the the_generator filter.
+ * for a plugin to filter generators overall the {@see 'the_generator'} filter.
*
* @since 2.5.0
*
@@ -3396,7 +3535,7 @@ function wp_generator() {
*/
function the_generator( $type ) {
/**
- * Filter the output of the XHTML generator tag for display.
+ * Filters the output of the XHTML generator tag for display.
*
* @since 2.5.0
*
@@ -3412,7 +3551,7 @@ function the_generator( $type ) {
*
* Returns the correct generator type for the requested output format. Allows
* for a plugin to filter generators on an individual basis using the
- * 'get_the_generator_{$type}' filter.
+ * {@see 'get_the_generator_$type'} filter.
*
* @since 2.5.0
*
@@ -3471,13 +3610,13 @@ function get_the_generator( $type = '' ) {
}
/**
- * Filter the HTML for the retrieved generator type.
+ * Filters the HTML for the retrieved generator type.
*
* The dynamic portion of the hook name, `$type`, refers to the generator type.
*
* @since 2.5.0
*
- * @param string $gen The HTML markup output to {@see wp_head()}.
+ * @param string $gen The HTML markup output to wp_head().
* @param string $type The type of generator. Accepts 'html', 'xhtml', 'atom',
* 'rss2', 'rdf', 'comment', 'export'.
*/
diff --git a/wp-includes/http.php b/wp-includes/http.php
index dc75037..130eae3 100644
--- a/wp-includes/http.php
+++ b/wp-includes/http.php
@@ -213,8 +213,9 @@ function wp_remote_head($url, $args = array()) {
* @return array The headers of the response. Empty array if incorrect parameter given.
*/
function wp_remote_retrieve_headers( $response ) {
- if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers']))
+ if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) {
return array();
+ }
return $response['headers'];
}
@@ -229,11 +230,13 @@ function wp_remote_retrieve_headers( $response ) {
* @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist.
*/
function wp_remote_retrieve_header( $response, $header ) {
- if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers']))
+ if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) {
return '';
+ }
- if ( array_key_exists($header, $response['headers']) )
+ if ( isset( $response['headers'][ $header ] ) ) {
return $response['headers'][$header];
+ }
return '';
}
@@ -578,7 +581,7 @@ function wp_http_validate_url( $url ) {
/**
* Whitelists allowed redirect hosts for safe HTTP requests as well.
*
- * Attached to the http_request_host_is_external filter.
+ * Attached to the {@see 'http_request_host_is_external'} filter.
*
* @since 3.6.0
*
@@ -595,7 +598,7 @@ function allowed_http_request_hosts( $is_external, $host ) {
/**
* Whitelists any domain in a multisite installation for safe HTTP requests.
*
- * Attached to the http_request_host_is_external filter.
+ * Attached to the {@see 'http_request_host_is_external'} filter.
*
* @since 3.6.0
*
diff --git a/wp-includes/js/admin-bar.min.js b/wp-includes/js/admin-bar.min.js
index 9417955..b6ef4c1 100644
--- a/wp-includes/js/admin-bar.min.js
+++ b/wp-includes/js/admin-bar.min.js
@@ -1 +1 @@
-"undefined"!=typeof jQuery?("undefined"==typeof jQuery.fn.hoverIntent&&!function(a){a.fn.hoverIntent=function(b,c,d){var e={interval:100,sensitivity:6,timeout:0};e="object"==typeof b?a.extend(e,b):a.isFunction(c)?a.extend(e,{over:b,out:c,selector:d}):a.extend(e,{over:b,out:b,selector:c});var f,g,h,i,j=function(a){f=a.pageX,g=a.pageY},k=function(b,c){return c.hoverIntent_t=clearTimeout(c.hoverIntent_t),Math.sqrt((h-f)*(h-f)+(i-g)*(i-g)) .ab-item").bind("keydown.adminbar",function(c){if(13==c.which){var d=a(c.target),e=d.closest(".ab-sub-wrapper"),f=d.parent().hasClass("hover");c.stopPropagation(),c.preventDefault(),e.length||(e=a("#wpadminbar .quicklinks")),e.find(".menupop").removeClass("hover"),f||d.parent().toggleClass("hover"),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}).each(b),a("#wpadminbar .ab-item").bind("keydown.adminbar",function(c){if(27==c.which){var d=a(c.target);c.stopPropagation(),c.preventDefault(),d.closest(".hover").removeClass("hover").children(".ab-item").focus(),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}),e.click(function(b){("wpadminbar"==b.target.id||"wp-admin-bar-top-secondary"==b.target.id)&&(e.find("li.menupop.hover").removeClass("hover"),a("html, body").animate({scrollTop:0},"fast"),b.preventDefault())}),a(".screen-reader-shortcut").keydown(function(b){var c,d;13==b.which&&(c=a(this).attr("href"),d=navigator.userAgent.toLowerCase(),-1!=d.indexOf("applewebkit")&&c&&"#"==c.charAt(0)&&setTimeout(function(){a(c).focus()},100))}),a("#adminbar-search").on({focus:function(){a("#adminbarsearch").addClass("adminbar-focused")},blur:function(){a("#adminbarsearch").removeClass("adminbar-focused")}}),"sessionStorage"in window&&a("#wp-admin-bar-logout a").click(function(){try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}}),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})):!function(a,b){var c,d=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,function(){return c.call(a,window.event)})},e=new RegExp("\\bhover\\b","g"),f=[],g=new RegExp("\\bselected\\b","g"),h=function(a){for(var b=f.length;b--;)if(f[b]&&a==f[b][1])return f[b][0];return!1},i=function(b){for(var d,i,j,k,l,m,n=[],o=0;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&(n[n.length]=b,i=h(b),i&&clearTimeout(i),b.className=b.className?b.className.replace(e,"")+" hover":"hover",k=b),b=b.parentNode;if(k&&k.parentNode&&(l=k.parentNode,l&&"UL"==l.nodeName.toUpperCase()))for(d=l.childNodes.length;d--;)m=l.childNodes[d],m!=k&&(m.className=m.className?m.className.replace(g,""):"");for(d=f.length;d--;){for(j=!1,o=n.length;o--;)n[o]==f[d][1]&&(j=!0);j||(f[d][1].className=f[d][1].className?f[d][1].className.replace(e,""):"")}},j=function(b){for(;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&!function(a){var b=setTimeout(function(){a.className=a.className?a.className.replace(e,""):""},500);f[f.length]=[b,a]}(b),b=b.parentNode},k=function(b){for(var d,e,f,h=b.target||b.srcElement;;){if(!h||h==a||h==c)return;if(h.id&&"wp-admin-bar-get-shortlink"==h.id)break;h=h.parentNode}for(b.preventDefault&&b.preventDefault(),b.returnValue=!1,-1==h.className.indexOf("selected")&&(h.className+=" selected"),d=0,e=h.childNodes.length;e>d;d++)if(f=h.childNodes[d],f.className&&-1!=f.className.indexOf("shortlink-input")){f.focus(),f.select(),f.onblur=function(){h.className=h.className?h.className.replace(g,""):""};break}return!1},l=function(a){var b,c,d,e,f,g;if(!("wpadminbar"!=a.id&&"wp-admin-bar-top-secondary"!=a.id||(b=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,1>b)))for(g=b>800?130:100,c=Math.min(12,Math.round(b/g)),d=b>800?Math.round(b/30):Math.round(b/20),e=[],f=0;b;)b-=d,0>b&&(b=0),e.push(b),setTimeout(function(){window.scrollTo(0,e.shift())},f*c),f++};d(b,"load",function(){c=a.getElementById("wpadminbar"),a.body&&c&&(a.body.appendChild(c),c.className&&(c.className=c.className.replace(/nojs/,"")),d(c,"mouseover",function(a){i(a.target||a.srcElement)}),d(c,"mouseout",function(a){j(a.target||a.srcElement)}),d(c,"click",k),d(c,"click",function(a){l(a.target||a.srcElement)}),d(document.getElementById("wp-admin-bar-logout"),"click",function(){if("sessionStorage"in window)try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}})),b.location.hash&&b.scrollBy(0,-32),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})}(document,window);
\ No newline at end of file
+"undefined"!=typeof jQuery?("undefined"==typeof jQuery.fn.hoverIntent&&!function(a){a.fn.hoverIntent=function(b,c,d){var e={interval:100,sensitivity:6,timeout:0};e="object"==typeof b?a.extend(e,b):a.isFunction(c)?a.extend(e,{over:b,out:c,selector:d}):a.extend(e,{over:b,out:b,selector:c});var f,g,h,i,j=function(a){f=a.pageX,g=a.pageY},k=function(b,c){return c.hoverIntent_t=clearTimeout(c.hoverIntent_t),Math.sqrt((h-f)*(h-f)+(i-g)*(i-g)) .ab-item").bind("keydown.adminbar",function(c){if(13==c.which){var d=a(c.target),e=d.closest(".ab-sub-wrapper"),f=d.parent().hasClass("hover");c.stopPropagation(),c.preventDefault(),e.length||(e=a("#wpadminbar .quicklinks")),e.find(".menupop").removeClass("hover"),f||d.parent().toggleClass("hover"),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}).each(b),a("#wpadminbar .ab-item").bind("keydown.adminbar",function(c){if(27==c.which){var d=a(c.target);c.stopPropagation(),c.preventDefault(),d.closest(".hover").removeClass("hover").children(".ab-item").focus(),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}),e.click(function(b){"wpadminbar"!=b.target.id&&"wp-admin-bar-top-secondary"!=b.target.id||(e.find("li.menupop.hover").removeClass("hover"),a("html, body").animate({scrollTop:0},"fast"),b.preventDefault())}),a(".screen-reader-shortcut").keydown(function(b){var c,d;13==b.which&&(c=a(this).attr("href"),d=navigator.userAgent.toLowerCase(),d.indexOf("applewebkit")!=-1&&c&&"#"==c.charAt(0)&&setTimeout(function(){a(c).focus()},100))}),a("#adminbar-search").on({focus:function(){a("#adminbarsearch").addClass("adminbar-focused")},blur:function(){a("#adminbarsearch").removeClass("adminbar-focused")}}),"sessionStorage"in window&&a("#wp-admin-bar-logout a").click(function(){try{for(var a in sessionStorage)a.indexOf("wp-autosave-")!=-1&&sessionStorage.removeItem(a)}catch(b){}}),navigator.userAgent&&document.body.className.indexOf("no-font-face")===-1&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})):!function(a,b){var c,d=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,function(){return c.call(a,window.event)})},e=new RegExp("\\bhover\\b","g"),f=[],g=new RegExp("\\bselected\\b","g"),h=function(a){for(var b=f.length;b--;)if(f[b]&&a==f[b][1])return f[b][0];return!1},i=function(b){for(var d,i,j,k,l,m,n=[],o=0;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&(n[n.length]=b,i=h(b),i&&clearTimeout(i),b.className=b.className?b.className.replace(e,"")+" hover":"hover",k=b),b=b.parentNode;if(k&&k.parentNode&&(l=k.parentNode,l&&"UL"==l.nodeName.toUpperCase()))for(d=l.childNodes.length;d--;)m=l.childNodes[d],m!=k&&(m.className=m.className?m.className.replace(g,""):"");for(d=f.length;d--;){for(j=!1,o=n.length;o--;)n[o]==f[d][1]&&(j=!0);j||(f[d][1].className=f[d][1].className?f[d][1].className.replace(e,""):"")}},j=function(b){for(;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&!function(a){var b=setTimeout(function(){a.className=a.className?a.className.replace(e,""):""},500);f[f.length]=[b,a]}(b),b=b.parentNode},k=function(b){for(var d,e,f,h=b.target||b.srcElement;;){if(!h||h==a||h==c)return;if(h.id&&"wp-admin-bar-get-shortlink"==h.id)break;h=h.parentNode}for(b.preventDefault&&b.preventDefault(),b.returnValue=!1,-1==h.className.indexOf("selected")&&(h.className+=" selected"),d=0,e=h.childNodes.length;d800?130:100,c=Math.min(12,Math.round(b/g)),d=b>800?Math.round(b/30):Math.round(b/20),e=[],f=0;b;)b-=d,b<0&&(b=0),e.push(b),setTimeout(function(){window.scrollTo(0,e.shift())},f*c),f++};d(b,"load",function(){c=a.getElementById("wpadminbar"),a.body&&c&&(a.body.appendChild(c),c.className&&(c.className=c.className.replace(/nojs/,"")),d(c,"mouseover",function(a){i(a.target||a.srcElement)}),d(c,"mouseout",function(a){j(a.target||a.srcElement)}),d(c,"click",k),d(c,"click",function(a){l(a.target||a.srcElement)}),d(document.getElementById("wp-admin-bar-logout"),"click",function(){if("sessionStorage"in window)try{for(var a in sessionStorage)a.indexOf("wp-autosave-")!=-1&&sessionStorage.removeItem(a)}catch(b){}})),b.location.hash&&b.scrollBy(0,-32),navigator.userAgent&&document.body.className.indexOf("no-font-face")===-1&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})}(document,window);
\ No newline at end of file
diff --git a/wp-includes/js/autosave.js b/wp-includes/js/autosave.js
index 85d5f84..b5a8c6c 100644
--- a/wp-includes/js/autosave.js
+++ b/wp-includes/js/autosave.js
@@ -7,8 +7,8 @@ window.autosave = function() {
( function( $, window ) {
function autosave() {
var initialCompareString,
- lastTriggerSave = 0,
- $document = $(document);
+ lastTriggerSave = 0,
+ $document = $(document);
/**
* Returns the data saved in both local and remote autosave
@@ -19,11 +19,11 @@ window.autosave = function() {
var post_name, parent_id, data,
time = ( new Date() ).getTime(),
cats = [],
- editor = typeof tinymce !== 'undefined' && tinymce.get('content');
+ editor = getEditor();
// Don't run editor.save() more often than every 3 sec.
// It is resource intensive and might slow down typing in long posts on slow devices.
- if ( editor && ! editor.isHidden() && time - 3000 > lastTriggerSave ) {
+ if ( editor && editor.isDirty() && ! editor.isHidden() && time - 3000 > lastTriggerSave ) {
editor.save();
lastTriggerSave = time;
}
@@ -88,9 +88,13 @@ window.autosave = function() {
$document.trigger( 'autosave-enable-buttons' );
}
+ function getEditor() {
+ return typeof tinymce !== 'undefined' && tinymce.get('content');
+ }
+
// Autosave in localStorage
function autosaveLocal() {
- var restorePostData, undoPostData, blog_id, post_id, hasStorage, intervalTimer,
+ var blog_id, post_id, hasStorage, intervalTimer,
lastCompareString,
isSuspended = false;
@@ -266,7 +270,7 @@ window.autosave = function() {
intervalTimer = window.setInterval( save, 15000 );
$( 'form#post' ).on( 'submit.autosave-local', function() {
- var editor = typeof tinymce !== 'undefined' && tinymce.get('content'),
+ var editor = getEditor(),
post_id = $('#post_ID').val() || 0;
if ( editor && ! editor.isHidden() ) {
@@ -310,7 +314,8 @@ window.autosave = function() {
function checkPost() {
var content, post_title, excerpt, $notice,
postData = getSavedPostData(),
- cookie = wpCookies.get( 'wp-saving-post' );
+ cookie = wpCookies.get( 'wp-saving-post' ),
+ $newerAutosaveNotice = $( '#has-newer-autosave' ).parent( '.notice' );
if ( cookie === post_id + '-saved' ) {
wpCookies.remove( 'wp-saving-post' );
@@ -323,11 +328,6 @@ window.autosave = function() {
return;
}
- // There is a newer autosave. Don't show two "restore" notices at the same time.
- if ( $( '#has-newer-autosave' ).length ) {
- return;
- }
-
content = $( '#content' ).val() || '';
post_title = $( '#title' ).val() || '';
excerpt = $( '#excerpt' ).val() || '';
@@ -338,34 +338,25 @@ window.autosave = function() {
return;
}
- restorePostData = postData;
- undoPostData = {
- content: content,
- post_title: post_title,
- excerpt: excerpt
- };
-
$notice = $( '#local-storage-notice' )
.insertAfter( $( '.wrap h1, .wrap h2' ).first() )
- .addClass( 'notice-warning' )
- .show();
+ .addClass( 'notice-warning' );
- $notice.on( 'click.autosave-local', function( event ) {
- var $target = $( event.target );
+ if ( $newerAutosaveNotice.length ) {
+ // If there is a "server" autosave notice, hide it.
+ // The data in the session storage is either the same or newer.
+ $newerAutosaveNotice.slideUp( 150, function() {
+ $notice.slideDown( 150 );
+ });
+ } else {
+ $notice.slideDown( 200 );
+ }
- if ( $target.hasClass( 'restore-backup' ) ) {
- restorePost( restorePostData );
- $target.parent().hide();
- $(this).find( 'p.undo-restore' ).show();
- $notice.removeClass( 'notice-warning' ).addClass( 'notice-success' );
- } else if ( $target.hasClass( 'undo-restore-backup' ) ) {
- restorePost( undoPostData );
- $target.parent().hide();
- $(this).find( 'p.local-restore' ).show();
- $notice.removeClass( 'notice-success' ).addClass( 'notice-warning' );
- }
-
- event.preventDefault();
+ $notice.find( '.restore-backup' ).on( 'click.autosave-local', function() {
+ restorePost( postData );
+ $notice.fadeTo( 250, 0, function() {
+ $notice.slideUp( 150 );
+ });
});
}
@@ -382,16 +373,25 @@ window.autosave = function() {
}
$( '#excerpt' ).val( postData.excerpt || '' );
- editor = typeof tinymce !== 'undefined' && tinymce.get('content');
+ editor = getEditor();
if ( editor && ! editor.isHidden() && typeof switchEditors !== 'undefined' ) {
+ if ( editor.settings.wpautop && postData.content ) {
+ postData.content = switchEditors.wpautop( postData.content );
+ }
+
// Make sure there's an undo level in the editor
- editor.undoManager.add();
- editor.setContent( postData.content ? switchEditors.wpautop( postData.content ) : '' );
+ editor.undoManager.transact( function() {
+ editor.setContent( postData.content || '' );
+ editor.nodeChanged();
+ });
} else {
// Make sure the Text editor is selected
$( '#content-html' ).click();
- $( '#content' ).val( postData.content );
+ $( '#content' ).focus();
+ // Using document.execCommand() will let the user undo.
+ document.execCommand( 'selectAll' );
+ document.execCommand( 'insertText', false, postData.content || '' );
}
return true;
diff --git a/wp-includes/js/autosave.min.js b/wp-includes/js/autosave.min.js
index 30e2ff7..f4a0165 100644
--- a/wp-includes/js/autosave.min.js
+++ b/wp-includes/js/autosave.min.js
@@ -1 +1 @@
-window.autosave=function(){return!0},function(a,b){function c(){function c(b){var c,d,e,f=(new Date).getTime(),g=[],h="undefined"!=typeof tinymce&&tinymce.get("content");return h&&!h.isHidden()&&f-3e3>j&&(h.save(),j=f),e={post_id:a("#post_ID").val()||0,post_type:a("#post_type").val()||"",post_author:a("#post_author").val()||"",post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""},"local"===b?e:(a('input[id^="in-category-"]:checked').each(function(){g.push(this.value)}),e.catslist=g.join(","),(c=a("#post_name").val())&&(e.post_name=c),(d=a("#parent_id").val())&&(e.parent_id=d),a("#comment_status").prop("checked")&&(e.comment_status="open"),a("#ping_status").prop("checked")&&(e.ping_status="open"),"1"===a("#auto_draft").val()&&(e.auto_draft="1"),e)}function d(b){return"object"==typeof b?(b.post_title||"")+"::"+(b.content||"")+"::"+(b.excerpt||""):(a("#title").val()||"")+"::"+(a("#content").val()||"")+"::"+(a("#excerpt").val()||"")}function e(){k.trigger("autosave-disable-buttons"),setTimeout(f,5e3)}function f(){k.trigger("autosave-enable-buttons")}function g(){function e(){var a=Math.random().toString(),c=!1;try{b.sessionStorage.setItem("wp-test",a),c=b.sessionStorage.getItem("wp-test")===a,b.sessionStorage.removeItem("wp-test")}catch(d){}return w=c,c}function f(){var a=!1;return w&&u&&(a=sessionStorage.getItem("wp-autosave-"+u),a=a?JSON.parse(a):{}),a}function g(a){var b;return w&&u?(b="wp-autosave-"+u,sessionStorage.setItem(b,JSON.stringify(a)),null!==sessionStorage.getItem(b)):!1}function h(){var a=f();return a&&v?a["post_"+v]||!1:!1}function j(a){var b=f();if(!b||!v)return!1;if(a)b["post_"+v]=a;else{if(!b.hasOwnProperty("post_"+v))return!1;delete b["post_"+v]}return g(b)}function l(){z=!0}function m(){z=!1}function n(b){var e,f,g=!1;return z||!w?!1:(b?(e=h()||{},a.extend(e,b)):e=c("local"),f=d(e),"undefined"==typeof y&&(y=i),f===y?!1:(e.save_time=(new Date).getTime(),e.status=a("#post_status").val()||"",g=j(e),g&&(y=f),g))}function o(){v=a("#post_ID").val()||0,a("#wp-content-wrap").hasClass("tmce-active")?k.on("tinymce-editor-init.autosave",function(){b.setTimeout(function(){q()},1500)}):q(),x=b.setInterval(n,15e3),a("form#post").on("submit.autosave-local",function(){var c="undefined"!=typeof tinymce&&tinymce.get("content"),d=a("#post_ID").val()||0;c&&!c.isHidden()?c.on("submit",function(){n({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""})}):n({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""});var e="https:"===b.location.protocol;wpCookies.set("wp-saving-post",d+"-check",86400,!1,!1,e)})}function p(a,b){function c(a){return a.toString().replace(/[\x20\t\r\n\f]+/g,"")}return c(a||"")===c(b||"")}function q(){var b,c,d,e,f=h(),g=wpCookies.get("wp-saving-post");return g===v+"-saved"?(wpCookies.remove("wp-saving-post"),void j(!1)):void(f&&(a("#has-newer-autosave").length||(b=a("#content").val()||"",c=a("#title").val()||"",d=a("#excerpt").val()||"",p(b,f.content)&&p(c,f.post_title)&&p(d,f.excerpt)||(s=f,t={content:b,post_title:c,excerpt:d},e=a("#local-storage-notice").insertAfter(a(".wrap h1, .wrap h2").first()).addClass("notice-warning").show(),e.on("click.autosave-local",function(b){var c=a(b.target);c.hasClass("restore-backup")?(r(s),c.parent().hide(),a(this).find("p.undo-restore").show(),e.removeClass("notice-warning").addClass("notice-success")):c.hasClass("undo-restore-backup")&&(r(t),c.parent().hide(),a(this).find("p.local-restore").show(),e.removeClass("notice-success").addClass("notice-warning")),b.preventDefault()})))))}function r(b){var c;return b?(y=d(b),a("#title").val()!==b.post_title&&a("#title").focus().val(b.post_title||""),a("#excerpt").val(b.excerpt||""),c="undefined"!=typeof tinymce&&tinymce.get("content"),c&&!c.isHidden()&&"undefined"!=typeof switchEditors?(c.undoManager.add(),c.setContent(b.content?switchEditors.wpautop(b.content):"")):(a("#content-html").click(),a("#content").val(b.content)),!0):!1}var s,t,u,v,w,x,y,z=!1;return u="undefined"!=typeof b.autosaveL10n&&b.autosaveL10n.blog_id,e()&&u&&(a("#content").length||a("#excerpt").length)&&k.ready(o),{hasStorage:w,getSavedPostData:h,save:n,suspend:l,resume:m}}function h(){function g(){q=!0,b.clearTimeout(r),r=b.setTimeout(function(){q=!1},1e4)}function h(){v=!0}function j(){v=!1}function l(b){p(),q=!1,t=s,s="",k.trigger("after-autosave",[b]),f(),b.success&&a("#auto_draft").val("")}function m(){u=0,wp.heartbeat.connectNow()}function n(){return d()!==i}function o(){var f,h;return v||q||!b.autosave()?!1:(new Date).getTime()k&&(i.save(),k=f),e={post_id:a("#post_ID").val()||0,post_type:a("#post_type").val()||"",post_author:a("#post_author").val()||"",post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""},"local"===b?e:(a('input[id^="in-category-"]:checked').each(function(){h.push(this.value)}),e.catslist=h.join(","),(c=a("#post_name").val())&&(e.post_name=c),(d=a("#parent_id").val())&&(e.parent_id=d),a("#comment_status").prop("checked")&&(e.comment_status="open"),a("#ping_status").prop("checked")&&(e.ping_status="open"),"1"===a("#auto_draft").val()&&(e.auto_draft="1"),e)}function d(b){return"object"==typeof b?(b.post_title||"")+"::"+(b.content||"")+"::"+(b.excerpt||""):(a("#title").val()||"")+"::"+(a("#content").val()||"")+"::"+(a("#excerpt").val()||"")}function e(){l.trigger("autosave-disable-buttons"),setTimeout(f,5e3)}function f(){l.trigger("autosave-enable-buttons")}function g(){return"undefined"!=typeof tinymce&&tinymce.get("content")}function h(){function e(){var a=Math.random().toString(),c=!1;try{b.sessionStorage.setItem("wp-test",a),c=b.sessionStorage.getItem("wp-test")===a,b.sessionStorage.removeItem("wp-test")}catch(d){}return v=c,c}function f(){var a=!1;return v&&t&&(a=sessionStorage.getItem("wp-autosave-"+t),a=a?JSON.parse(a):{}),a}function h(a){var b;return!(!v||!t)&&(b="wp-autosave-"+t,sessionStorage.setItem(b,JSON.stringify(a)),null!==sessionStorage.getItem(b))}function i(){var a=f();return!(!a||!u)&&(a["post_"+u]||!1)}function k(a){var b=f();if(!b||!u)return!1;if(a)b["post_"+u]=a;else{if(!b.hasOwnProperty("post_"+u))return!1;delete b["post_"+u]}return h(b)}function m(){y=!0}function n(){y=!1}function o(b){var e,f,g=!1;return!(y||!v)&&(b?(e=i()||{},a.extend(e,b)):e=c("local"),f=d(e),"undefined"==typeof x&&(x=j),f!==x&&(e.save_time=(new Date).getTime(),e.status=a("#post_status").val()||"",g=k(e),g&&(x=f),g))}function p(){u=a("#post_ID").val()||0,a("#wp-content-wrap").hasClass("tmce-active")?l.on("tinymce-editor-init.autosave",function(){b.setTimeout(function(){r()},1500)}):r(),w=b.setInterval(o,15e3),a("form#post").on("submit.autosave-local",function(){var c=g(),d=a("#post_ID").val()||0;c&&!c.isHidden()?c.on("submit",function(){o({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""})}):o({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""});var e="https:"===b.location.protocol;wpCookies.set("wp-saving-post",d+"-check",86400,!1,!1,e)})}function q(a,b){function c(a){return a.toString().replace(/[\x20\t\r\n\f]+/g,"")}return c(a||"")===c(b||"")}function r(){var b,c,d,e,f=i(),g=wpCookies.get("wp-saving-post"),h=a("#has-newer-autosave").parent(".notice");return g===u+"-saved"?(wpCookies.remove("wp-saving-post"),void k(!1)):void(f&&(b=a("#content").val()||"",c=a("#title").val()||"",d=a("#excerpt").val()||"",q(b,f.content)&&q(c,f.post_title)&&q(d,f.excerpt)||(e=a("#local-storage-notice").insertAfter(a(".wrap h1, .wrap h2").first()).addClass("notice-warning"),h.length?h.slideUp(150,function(){e.slideDown(150)}):e.slideDown(200),e.find(".restore-backup").on("click.autosave-local",function(){s(f),e.fadeTo(250,0,function(){e.slideUp(150)})}))))}function s(b){var c;return!!b&&(x=d(b),a("#title").val()!==b.post_title&&a("#title").focus().val(b.post_title||""),a("#excerpt").val(b.excerpt||""),c=g(),c&&!c.isHidden()&&"undefined"!=typeof switchEditors?(c.settings.wpautop&&b.content&&(b.content=switchEditors.wpautop(b.content)),c.undoManager.transact(function(){c.setContent(b.content||""),c.nodeChanged()})):(a("#content-html").click(),a("#content").focus(),document.execCommand("selectAll"),document.execCommand("insertText",!1,b.content||"")),!0)}var t,u,v,w,x,y=!1;return t="undefined"!=typeof b.autosaveL10n&&b.autosaveL10n.blog_id,e()&&t&&(a("#content").length||a("#excerpt").length)&&l.ready(p),{hasStorage:v,getSavedPostData:i,save:o,suspend:m,resume:n}}function i(){function g(){q=!0,b.clearTimeout(r),r=b.setTimeout(function(){q=!1},1e4)}function h(){v=!0}function i(){v=!1}function k(b){p(),q=!1,t=s,s="",l.trigger("after-autosave",[b]),f(),b.success&&a("#auto_draft").val("")}function m(){u=0,wp.heartbeat.connectNow()}function n(){return d()!==j}function o(){var f,h;return!(v||q||!b.autosave())&&(!((new Date).getTime()7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(O,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var r=document.body;var n=r.insertBefore(this.iframe,r.firstChild).contentWindow;n.document.open();n.document.close();n.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);M.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!M.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var r=i+t;t=this.decodeFragment(t.replace(U,""));if(this.fragment===t)return;this.fragment=t;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,r)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var n=this.iframe.contentWindow;if(!e.replace){n.document.open();n.document.close()}this._updateHash(n.location,t,e.replace)}}else{return this.location.assign(r)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else{t.hash="#"+e}}});e.history=new M;var q=function(t,e){var r=this;var n;if(t&&i.has(t,"constructor")){n=t.constructor}else{n=function(){return r.apply(this,arguments)}}i.extend(n,r,e);var s=function(){this.constructor=n};s.prototype=r.prototype;n.prototype=new s;if(t)i.extend(n.prototype,t);n.__super__=r.prototype;return n};y.extend=x.extend=$.extend=I.extend=M.extend=q;var F=function(){throw new Error('A "url" property or function must be specified')};var z=function(t,e){var i=e.error;e.error=function(r){if(i)i.call(e.context,t,r,e);t.trigger("error",t,r,e)}};return e});
+(function(t){var e=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,n){e.Backbone=t(e,n,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore"),r;try{r=require("jquery")}catch(n){}t(e,exports,i,r)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}})(function(t,e,i,r){var n=t.Backbone;var s=Array.prototype.slice;e.VERSION="1.3.3";e.$=r;e.noConflict=function(){t.Backbone=n;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=function(t,e,r){switch(t){case 1:return function(){return i[e](this[r])};case 2:return function(t){return i[e](this[r],t)};case 3:return function(t,n){return i[e](this[r],o(t,this),n)};case 4:return function(t,n,s){return i[e](this[r],o(t,this),n,s)};default:return function(){var t=s.call(arguments);t.unshift(this[r]);return i[e].apply(i,t)}}};var h=function(t,e,r){i.each(e,function(e,n){if(i[n])t.prototype[n]=a(e,n,r)})};var o=function(t,e){if(i.isFunction(t))return t;if(i.isObject(t)&&!e._isModel(t))return l(t);if(i.isString(t))return function(e){return e.get(t)};return t};var l=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};var u=e.Events={};var c=/\s+/;var f=function(t,e,r,n,s){var a=0,h;if(r&&typeof r==="object"){if(n!==void 0&&"context"in s&&s.context===void 0)s.context=n;for(h=i.keys(r);athis.length)n=this.length;if(n<0)n+=this.length+1;var s=[];var a=[];var h=[];var o=[];var l={};var u=e.add;var c=e.merge;var f=e.remove;var d=false;var v=this.comparator&&n==null&&e.sort!==false;var g=i.isString(this.comparator)?this.comparator:null;var p,m;for(m=0;m7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(O,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var r=document.body;var n=r.insertBefore(this.iframe,r.firstChild).contentWindow;n.document.open();n.document.close();n.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);N.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!N.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var r=i+t;t=this.decodeFragment(t.replace(U,""));if(this.fragment===t)return;this.fragment=t;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,r)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var n=this.iframe.contentWindow;if(!e.replace){n.document.open();n.document.close()}this._updateHash(n.location,t,e.replace)}}else{return this.location.assign(r)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else{t.hash="#"+e}}});e.history=new N;var q=function(t,e){var r=this;var n;if(t&&i.has(t,"constructor")){n=t.constructor}else{n=function(){return r.apply(this,arguments)}}i.extend(n,r,e);n.prototype=i.create(r.prototype,t);n.prototype.constructor=n;n.__super__=r.prototype;return n};y.extend=x.extend=$.extend=k.extend=N.extend=q;var F=function(){throw new Error('A "url" property or function must be specified')};var B=function(t,e){var i=e.error;e.error=function(r){if(i)i.call(e.context,t,r,e);t.trigger("error",t,r,e)}};return e});
diff --git a/wp-includes/js/colorpicker.min.js b/wp-includes/js/colorpicker.min.js
index eef66c6..4b3b5c0 100644
--- a/wp-includes/js/colorpicker.min.js
+++ b/wp-includes/js/colorpicker.min.js
@@ -1 +1 @@
-function getAnchorPosition(a){var b=new Object,c=0,d=0,e=!1,f=!1,g=!1;if(document.getElementById?e=!0:document.all?f=!0:document.layers&&(g=!0),e&&document.all)c=AnchorPosition_getPageOffsetLeft(document.all[a]),d=AnchorPosition_getPageOffsetTop(document.all[a]);else if(e){var h=document.getElementById(a);c=AnchorPosition_getPageOffsetLeft(h),d=AnchorPosition_getPageOffsetTop(h)}else if(f)c=AnchorPosition_getPageOffsetLeft(document.all[a]),d=AnchorPosition_getPageOffsetTop(document.all[a]);else{if(!g)return b.x=0,b.y=0,b;for(var i=0,j=0;jscreen.availHeight&&(this.y=screen.availHeight-this.height),screen&&screen.availWidth&&this.x+this.width>screen.availWidth&&(this.x=screen.availWidth-this.width);var b=window.opera||document.layers&&!navigator.mimeTypes["*"]||"KDE"==navigator.vendor||document.childNodes&&!document.all&&!navigator.taintEnabled;this.popupWindow=window.open(b?"":"about:blank","window_"+a,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y)}this.refresh()}}function PopupWindow_hidePopup(){null!=this.divName?this.use_gebi?document.getElementById(this.divName).style.visibility="hidden":this.use_css?document.all[this.divName].style.visibility="hidden":this.use_layers&&(document.layers[this.divName].visibility="hidden"):this.popupWindow&&!this.popupWindow.closed&&(this.popupWindow.close(),this.popupWindow=null)}function PopupWindow_isClicked(a){if(null!=this.divName){if(this.use_layers){var b=a.pageX,c=a.pageY,d=document.layers[this.divName];return b>d.left&&bd.top&&c0?(this.type="DIV",this.divName=arguments[0]):this.type="WINDOW",this.use_gebi=!1,this.use_css=!1,this.use_layers=!1,document.getElementById?this.use_gebi=!0:document.all?this.use_css=!0:document.layers?this.use_layers=!0:this.type="WINDOW",this.offsetX=0,this.offsetY=0,this.getXYPosition=PopupWindow_getXYPosition,this.populate=PopupWindow_populate,this.setUrl=PopupWindow_setUrl,this.setWindowProperties=PopupWindow_setWindowProperties,this.refresh=PopupWindow_refresh,this.showPopup=PopupWindow_showPopup,this.hidePopup=PopupWindow_hidePopup,this.setSize=PopupWindow_setSize,this.isClicked=PopupWindow_isClicked,this.autoHide=PopupWindow_autoHide,this.hideIfNotClicked=PopupWindow_hideIfNotClicked}function ColorPicker_writeDiv(){document.writeln('
')}function ColorPicker_show(a){this.showPopup(a)}function ColorPicker_pickColor(a,b){b.hidePopup(),pickColor(a)}function pickColor(a){return null==ColorPicker_targetInput?void alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!"):void(ColorPicker_targetInput.value=a)}function ColorPicker_select(a,b){return"text"!=a.type&&"hidden"!=a.type&&"textarea"!=a.type?(alert("colorpicker.select: Input object passed is not a valid form input object"),void(window.ColorPicker_targetInput=null)):(window.ColorPicker_targetInput=a,void this.show(b))}function ColorPicker_highlightColor(a){var b=arguments.length>1?arguments[1]:window.document,c=b.getElementById("colorPickerSelectedColor");c.style.backgroundColor=a,c=b.getElementById("colorPickerSelectedColorValue"),c.innerHTML=a}function ColorPicker(){var a=!1;if(0==arguments.length)var b="colorPickerDiv";else if("window"==arguments[0]){var b="";a=!0}else var b=arguments[0];if(""!=b)var c=new PopupWindow(b);else{var c=new PopupWindow;c.setSize(225,250)}c.currentValue="#FFFFFF",c.writeDiv=ColorPicker_writeDiv,c.highlightColor=ColorPicker_highlightColor,c.show=ColorPicker_show,c.select=ColorPicker_select;var d=new Array("#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099","#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099","#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF","#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F","#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000","#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399","#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399","#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF","#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F","#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00","#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699","#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699","#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699","#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F","#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F","#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F","#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999","#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999","#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999","#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF","#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F","#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000","#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99","#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99","#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF","#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F","#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00","#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99","#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99","#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F","#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F","#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F","#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666","#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000","#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000","#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999","#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF","#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66","#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00","#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000","#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099","#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF","#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF","#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC","#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000","#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900","#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33","#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF","#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF","#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F","#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F","#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F","#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000"),e=d.length,f=72,g="",h=a?"window.opener.":"";a&&(g+="Select Color",g+=""),g+="
",a&&(g+=""),c.populate(g+"\n"),c.offsetY=25,c.autoHide(),c}ColorPicker_targetInput=null;
\ No newline at end of file
+function getAnchorPosition(a){var b=new Object,c=0,d=0,e=!1,f=!1,g=!1;if(document.getElementById?e=!0:document.all?f=!0:document.layers&&(g=!0),e&&document.all)c=AnchorPosition_getPageOffsetLeft(document.all[a]),d=AnchorPosition_getPageOffsetTop(document.all[a]);else if(e){var h=document.getElementById(a);c=AnchorPosition_getPageOffsetLeft(h),d=AnchorPosition_getPageOffsetTop(h)}else if(f)c=AnchorPosition_getPageOffsetLeft(document.all[a]),d=AnchorPosition_getPageOffsetTop(document.all[a]);else{if(!g)return b.x=0,b.y=0,b;for(var i=0,j=0;jscreen.availHeight&&(this.y=screen.availHeight-this.height),screen&&screen.availWidth&&this.x+this.width>screen.availWidth&&(this.x=screen.availWidth-this.width);var b=window.opera||document.layers&&!navigator.mimeTypes["*"]||"KDE"==navigator.vendor||document.childNodes&&!document.all&&!navigator.taintEnabled;this.popupWindow=window.open(b?"":"about:blank","window_"+a,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y)}this.refresh()}}function PopupWindow_hidePopup(){null!=this.divName?this.use_gebi?document.getElementById(this.divName).style.visibility="hidden":this.use_css?document.all[this.divName].style.visibility="hidden":this.use_layers&&(document.layers[this.divName].visibility="hidden"):this.popupWindow&&!this.popupWindow.closed&&(this.popupWindow.close(),this.popupWindow=null)}function PopupWindow_isClicked(a){if(null!=this.divName){if(this.use_layers){var b=a.pageX,c=a.pageY,d=document.layers[this.divName];return b>d.left&&bd.top&&c0?(this.type="DIV",this.divName=arguments[0]):this.type="WINDOW",this.use_gebi=!1,this.use_css=!1,this.use_layers=!1,document.getElementById?this.use_gebi=!0:document.all?this.use_css=!0:document.layers?this.use_layers=!0:this.type="WINDOW",this.offsetX=0,this.offsetY=0,this.getXYPosition=PopupWindow_getXYPosition,this.populate=PopupWindow_populate,this.setUrl=PopupWindow_setUrl,this.setWindowProperties=PopupWindow_setWindowProperties,this.refresh=PopupWindow_refresh,this.showPopup=PopupWindow_showPopup,this.hidePopup=PopupWindow_hidePopup,this.setSize=PopupWindow_setSize,this.isClicked=PopupWindow_isClicked,this.autoHide=PopupWindow_autoHide,this.hideIfNotClicked=PopupWindow_hideIfNotClicked}function ColorPicker_writeDiv(){document.writeln('
')}function ColorPicker_show(a){this.showPopup(a)}function ColorPicker_pickColor(a,b){b.hidePopup(),pickColor(a)}function pickColor(a){return null==ColorPicker_targetInput?void alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!"):void(ColorPicker_targetInput.value=a)}function ColorPicker_select(a,b){return"text"!=a.type&&"hidden"!=a.type&&"textarea"!=a.type?(alert("colorpicker.select: Input object passed is not a valid form input object"),void(window.ColorPicker_targetInput=null)):(window.ColorPicker_targetInput=a,void this.show(b))}function ColorPicker_highlightColor(a){var b=arguments.length>1?arguments[1]:window.document,c=b.getElementById("colorPickerSelectedColor");c.style.backgroundColor=a,c=b.getElementById("colorPickerSelectedColorValue"),c.innerHTML=a}function ColorPicker(){var a=!1;if(0==arguments.length)var b="colorPickerDiv";else if("window"==arguments[0]){var b="";a=!0}else var b=arguments[0];if(""!=b)var c=new PopupWindow(b);else{var c=new PopupWindow;c.setSize(225,250)}c.currentValue="#FFFFFF",c.writeDiv=ColorPicker_writeDiv,c.highlightColor=ColorPicker_highlightColor,c.show=ColorPicker_show,c.select=ColorPicker_select;var d=new Array("#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099","#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099","#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF","#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F","#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000","#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399","#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399","#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF","#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F","#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00","#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699","#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699","#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699","#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F","#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F","#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F","#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999","#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999","#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999","#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF","#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F","#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000","#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99","#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99","#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF","#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F","#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00","#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99","#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99","#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F","#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F","#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F","#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666","#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000","#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000","#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999","#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF","#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66","#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00","#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000","#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099","#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF","#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF","#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC","#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000","#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900","#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33","#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF","#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF","#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF","#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F","#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F","#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F","#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000"),e=d.length,f=72,g="",h=a?"window.opener.":"";a&&(g+="Select Color",g+=""),g+="