text:
__group__,ticket,summary,owner,component,_version,priority,severity,milestone,type,_status,workflow,_created,modified,_description,_reporter Future Releases,21977,"Allow 0, NULL and empty string values for 'parent'.",,XML-RPC,,normal,normal,Future Release,defect (bug),new,dev-feedback,2012-09-23T18:28:04Z,2014-01-29T09:02:19Z,"We must allow 0, NULL and empty string values for 'parent' in wp_newTerm and wp_editTerm",sam2kb Future Releases,12939,Counterpart to content_save_pre hook not called when getting post content via API,josephscott,XML-RPC,2.9.2,normal,normal,Awaiting Review,defect (bug),reopened,dev-feedback,2010-04-09T13:53:57Z,2015-03-03T21:49:46Z,"When a post is submitted either through the web editor interface or from an API call to newPost or editPost, the content of the post is inevitably passed through the content_save_pre filter. And when a post is opened for editing in the web editor, the content is passed through filters such as the_editor_content and content_edit_pre. However, when a post is fetched for editing via XMLRPC API calls such as getPost or getRecentPosts, the content_edit_pre filter is never reached. This leads to a situation where whatever massaging of the content that a plugin may peform on the way into the database is not reversed on the way back out, for clients of the API. A concrete example of this problem is with the popular Syntax Highlighter Evolved: http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/ This plugin performs encoding of the post content before it is stored in the database, and it counts on being able to decode that content by adding filters to hooks such as the_editor_content. However, none of these filters are reached via the API, leading to ""corrupted content"" when users try to edit posts from API clients such as the iPhone WordPress app, or my desktop editor, MarsEdit. (My previous bug report #10802 exhibits the same symptoms of this bug, but this is a different cause). In summary: 1. WordPress needs to establish a clear, baseline hooks for massaging content before it is saved to the database, and for un-massaging the content on the way out of the database. Currently there seems to be uncertainty about which hooks need to be overridden and under what circumstances. It seems to me that content_save_pre and content_edit_pre are probably good candidates for this. 2. Whatever hooks are established as the guarantees need to be applied once and only once in both the web-based editing scenario, and in the API editing scenario. I think that having a well documented pair of hooks for this purpose that works identically in the web editing and API editing cases will do a lot to ensure correct behavior when plugins are installed that massage content, and will make it easy for plugin developers to ""do the right thing"" without relying on hooks that are specific only to the web editor, or to the API. ",redsweater Future Releases,14452,Duplicate check for comments: Inappropriate errorhandling for xmlrpc,,XML-RPC,3.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-07-29T08:44:34Z,2014-11-24T12:32:00Z,The duplicate check for comments just dies in case a dulicate is detected(see wp-includes/comment.php around line 550). This ends up with a html page delivered in any cases. When accessing through xmlrpc this leads to the problem that this html page is send back to the xmlrpc client instead of a proper xmlrpc formated message.,mrutz Future Releases,16980,Empty Values are ignored by class-ixr.php,,XML-RPC,3.1,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2011-03-27T12:34:47Z,2014-10-10T02:57:36Z,"I tried to fix the following bug #10599 Found out when you send and empty value via xmlrpc it converts it to null value. Say you send and array of arguments for mw_editpost, set {{{ $content_struct[mt_keywords] = ''; }}} IXR client passes a null value instead of an empty value. In mw_post method consider this statement {{{ $tags_input = isset( $content_struct[mt_keywords] ) ? $content_struct[mt_keywords] : null; }}} Even if you send an empty value this statement fails because {{{ $content_struct[mt_keywords] }}} is set to null by IXR client.",nprasath002 Future Releases,24408,HTTPd Error Log: body.xml:1: parser error : Document labelled UTF-16 but has UTF-8 content,,XML-RPC,3.5.1,normal,normal,Awaiting Review,defect (bug),new,close,2013-05-24T03:10:11Z,2013-11-22T06:20:44Z,"I run a few pt_BR blogs and I regularly see ""body.xml:1: parser error : Document labelled UTF-16 but has UTF-8 content"" in the Apache error log I finally found a clue why this happens: (because) ""...é and á characters which are not valid UTF-8 according to Xerces. I can't send the text as UTF-16 because XML-RPC doesn't allow it – it only allows USASCII. So I think I have to find any non USASCII characters and convert them to their XML Hex equivalent."" (from http://tersesystems.com/2003/04/29/xml-rpc-encoding-of-utf-16) So the proper handling seems to be ""find any non USASCII characters and convert them to their XML Hex equivalent.""",crashnet Future Releases,10764,"XML- RPC, blogger_editPost, Publish Status not working",josephscott,XML-RPC,,normal,normal,Future Release,defect (bug),new,dev-feedback,2009-09-10T00:58:09Z,2012-06-23T20:39:22Z,"In the blogger_editPost function in xmlrpc.php is not working properly. Currently you cannot change publish status. It looks like we are missing a line of code. {{{ $post_status = ($publish) ? 'publish' : 'draft'; }}} When I inserted this line into the function before the {{{ $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); }}} I was able to gain control of the publish status. ",bobby_drk Future Releases,20070,Deprecate Blogger XML-RPC Methods,,XML-RPC,3.3.1,normal,minor,Awaiting Review,enhancement,new,dev-feedback,2012-02-18T18:32:26Z,2013-07-28T21:06:30Z,"The XML-RPC API supports the legacy Blogger API methods, but these methods have apparently not been very well tested or maintained. Given that the `wp.*` XML-RPC namespace now covers everything that the Blogger API does, I suggest the blogger methods be officially deprecated with an eye towards removing them in a future version. At the very least, the MetaWeblog API should be used by clients instead, as it was explicitly designed to enhance and supersede the Blogger API.",maxcutler Future Releases,21398,Live preview of new post/page via XML-RPC for mobile clients.,,XML-RPC,,normal,normal,Future Release,enhancement,new,dev-feedback,2012-07-27T10:13:47Z,2015-05-08T23:25:51Z,"We'd like to have the possibilty to load the 'live preview' for a post/page you're writing on a mobile client. (New post not already ""synched"" with the server, or post edited within the mobile app). The only solution that I can see at the moment is the following: - Upload the post/page to the server with the status set to 'Draft'. - Load the permalink of the post. - Open the post in a webview by using the WP login form and the redirect_to parameter. ",daniloercoli Future Releases,22497,Post type should be able to show on mobile apps,,XML-RPC,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-11-18T18:48:58Z,2015-05-08T08:25:18Z,"Currently the mobile apps only show Post and Pages. Part of the reason is that the apps can't know if the post type is worth showing in the apps since it's heavily based on several meta-boxes. I think this is a nice add-on for developers to make that decision. The patch is really simple and is just adding a extra parameter to register post type.",markoheijnen Future Releases,18731,The XML-RPC Endpoint filename is hardcoded in the code (aka: my Host Blocks XML-RPC Access!),,XML-RPC,3.2,normal,normal,Future Release,enhancement,new,dev-feedback,2011-09-21T10:56:26Z,2014-06-01T13:11:22Z,"It's impossible to rename the file 'xmlrpc.php' to something different (for eg when your hosting provider blocks the access to the xmlrpc.php file) since the prefix ""xmlrpc.php"" is hardcoded within the src code. You can rename the file but the XML-RPC call wp.getUsersBlog always returns the hardcoded URL. Same issue for the pingback link and the EditURI link. We pubblished a plugin that should help users for the time being: http://wordpress.org/extend/plugins/rename-xml-rpc/",daniloercoli Future Releases,6430,WordPress 2.5 xmlrpc should return image thumbnail URLs in wp.uploadFile,jonquark*,XML-RPC,2.5,normal,normal,Future Release,enhancement,accepted,dev-feedback,2008-03-28T05:51:57Z,2012-06-23T19:59:51Z,"The xmlrpc call for wp.uploadFile (aliased to mw_newMediaObject) currently returns the URL of the uploaded file only. In WordPress 2.5, thumbnail files are automatically created. The xmlrpc API should provide a way to get the URLs of the thumbnail files, preferably in the returned hash from the wp.uploadFile call. That is, wp.uploadFile currently returns url = ""http://myhost/wp/wp-content/uploads/2008/03/myImage.jpg"". In addition, it should return ""thumbnailSmallUrl = ..."" and ""thumbnailMediumUrl = ..."". (I'm not sure if this would break MetaWeblog compatibility.) Background: WordPress 2.5 now automatically creates thumbnail images for uploaded image files according to the (maximum) sizes specified in the Miscellaneous settings page. When resizing, the aspect ratio is maintained, and the filenames are named for the exact size of the image. For example, if I upload: dsc-0151.jpg Using the default thumbnail settings of 150x150 and 300x300, these files will be created: dsc-0151-300x199.jpg dsc-0151-150x150.jpg Note that the first filename for the medium thumbnail is called ""300x199"" not ""300x300"". It's thus difficult to guess the new thumbnail filename for the default settings. Since these settings are user configurable, it's currently impossible for an xmlrpc client to guess the URLs of the thumbnails. ",mlossos Future Releases,23866,Wordpress xmlrpc wp_getPosts filter for slug,,XML-RPC,3.4,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2013-03-26T20:09:31Z,2013-03-26T22:29:43Z,"When using the Wordpress xmlrpc, it is sometimes very useful to get posts based off of slugs rather than post id. A use case for this would be synchronizing or migrating two Wordpress sites with the same posts, but with different databases and post ID's. ",SunWaves Future Releases,25406,XMLRPC wp_getPosts $filter argument should support more values,,XML-RPC,3.8,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2013-09-24T09:08:03Z,2014-03-04T23:19:14Z,"Although ""see get_posts() for more on $filter values"" is written in the doc, it actually supports 'post_type', 'post_status', 'number', 'offset', 'orderby', and 'order' only, and there is one hidden value 's' that didn't mention in the doc. Currently, the $filter argument is handled by function wp_getPosts like this: {{{ $query = array(); if ( isset( $filter['offset'] ) ) $query['offset'] = absint( $filter['offset'] ); .... wp_get_recent_posts( $query ); }}} I think it'd be better if you can use get_posts() instead and simply pass $filter as its argument. just my 2 cents though. ",wordpressplugindeveloper Future Releases,23950,Company recognition,,WordPress.org site,,normal,minor,WordPress.org,feature request,new,dev-feedback,2013-04-05T15:13:24Z,2013-06-06T16:08:29Z,"My company, and many others, have a policy of sponsoring WordPress community contribution, core and otherwise, by strongly encouraging employees to participate during paid company hours. I want to open a discussion on how this company contribution could be recognised, while not allowing ""corporates"" to take over the credits page on each release. * Would greater recognition encourage your company to foster contribution? * Should companies contributing employee time to WordPress, particularly core contributions, be recognised? * How should companies be recognised? * What are the pros and cons for the WordPress project in allowing this kind of recognition? This follows a [https://twitter.com/jenmylo/status/320144575266160640 Twitter conversation] re showing company names in the WordPress credits page, and Nacin's suggestion to open this discussion.",simonwheatley Future Releases,12342,New widget option after calling register_widget creating empty widget,azaozz,Widgets,2.9.2,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-02-23T00:36:39Z,2014-10-09T23:15:25Z,"After I register a new widget class that has never been registered before, navigate to the widgets.php admin page and allow the option to be created automatically. The option value looks like this as serialized data: {{{ a:2:{i:2;a:0:{}s:12:""_multiwidget"";i:1;} }}} As you can see there is an empty widget in there for some reason. Basically the unserialized option value looks like the following as an array: {{{ array( '2' => array(), _multiwidget => 1 ); }}} This is odd behavior since the first multi number has always started at 2, but with that previous array in there it starts at 3, and randomly which is what irks me. i can't seem to find when it happens or a pattern, so naturally this feels like a bug. As this does not seem to break anything with the core functionality of WordPress, I would say this is normal priority. What this does do is pose many questions for those of us that dive deep into the Widget API, where our plugins and the functionality of them are dependent on how these things work. My widget plugin is quite large, and I need to know if I can depend on the first multi number of a widget when the class is first registered. If this is not a bug, and normal functionality, I apologize, and would like to ask for a heads up on the subject. Thank You, Jim Isaacs",jimisaacs Future Releases,19846,"Specify 'primary' sidebar, so widgets land in correct sidebar when changing themes",,Widgets,3.3.1,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2012-01-16T21:49:42Z,2013-08-23T03:29:21Z,"With the improvements to widget handling in 3.3, the widgets in a previous theme's sidebar are transferred to your current theme's sidebar. But there's no way to specify which sidebar should receive them. For example, when you activate the Genesis theme it has three widget areas: - Header Right - Primary Sidebar - Secondary Sidebar If you install a fresh copy of WP and then activate Genesis, the Header Right widget area is populated with the 6 default widgets ( http://twitpic.com/8618x5 ). It's definitely not ideal for new users unfamiliar with this. It would be great if there were some way to specify a primary sidebar when registering it, and that's the one the default widgets flow into. {{{ register_sidebar( array( 'name' => 'Primary Sidebar', 'id' => 'primary-sidebar', 'primary' => true ); register_sidebar( array( 'name' => 'Secondary Sidebar', 'id' => 'secondary-sidebar' ); // Default: 'primary' => false }}} There might be better ways to handle this, but I think it should be done in WP core. If it's up to the themes to solve, we'll have to use solutions like this: https://gist.github.com/1623202",billerickson Future Releases,18446,Widget removes fields w/ default HTML on initial save in IE8 and 9,,Widgets,3.2.1,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2011-08-16T15:51:02Z,2015-01-13T13:39:34Z,"Weird problem, testd in IE8/9, Chrome, and Firefox. If you have a widget, with HTML in the default value, IE8/9 will remove the field entirely. However, if you then paste the HTML back into the field and save, it works fine. This ONLY happens after the initial drag/drop then save of the widget. It even happens if you drag/drop the widget, change the field and click save. Example Plugin: http://wordpress.org/extend/plugins/ft-calendar/ Widget: Upcoming Events Widget The Event Template (event_template) is set by default to: {{{ %TITLE% }}} The event_template source for the Available Widget is: {{{ }}} The event_template source for the widget after it is dragged to a widget area is: {{{ }}} The source for the widget after it is first saved is: {{{ }}} I setup a test to output $new_instance and $old_instance during the ""update"" process. Step 1: Moving widget from Available Widgets to Widget Area (in IE): {{{ NEW INSTANCE: Array ( [title] => [date] => [number_of] => 1 [date_types] => Month [limit] => 0 [timeformat] => g:i a [dateformat] => jS [date_template] => %DATE% [monthformat] => F Y [month_template] => %MONTH% ) OLD INSTANCE: Array ( ) }}} Step 2: Saving widget in Widget Area: {{{ NEW INSTANCE: Array ( [title] => [date] => [number_of] => 1 [date_types] => Month [limit] => 0 [timeformat] => g:i a [dateformat] => jS [date_template] => %DATE% [monthformat] => F Y [month_template] => %MONTH% ) OLD INSTANCE: Array ( [title] => [show_rss_feed] => off [show_ical_feed] => off [date] => [span] => +1 Month [number_of] => 1 [date_types] => Month [calendars] => [limit] => 0 [dateformat] => jS [timeformat] => g:i a [monthformat] => F Y [event_template] => [date_template] => %DATE% [month_template] => %MONTH% [hide_duplicates] => ) }}} Step 3: Pasting HTML code back into Event Template and saving Widget: {{{ NEW INSTANCE: Array ( [title] => [date] => [number_of] => 1 [date_types] => Month [limit] => 0 [timeformat] => g:i a [dateformat] => jS [date_template] => %DATE% [monthformat] => F Y [month_template] => %MONTH% [event_template] => %TITLE% (%TIME%) ) OLD INSTANCE: Array ( [title] => [show_rss_feed] => off [show_ical_feed] => off [date] => [span] => +1 Month [number_of] => 1 [date_types] => Month [calendars] => [limit] => 0 [dateformat] => jS [timeformat] => g:i a [monthformat] => F Y [event_template] => [date_template] => %DATE% [month_template] => %MONTH% [hide_duplicates] => ) }}} Here is a screenr showing the problem not working in IE9 and working in Chrome: http://www.screenr.com/mkhs ",layotte Future Releases,24283,is_active_widget() incorrect logic,,Widgets,,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2013-05-08T07:07:41Z,2013-10-27T18:40:53Z,"`is_active_widget()` only returns 'true' only if widget used inside sidebar. But there is a provision to use widget directly using `the_widget()` function. I believe there is a need of alter the logic of just checking inside sidebars.",valllabh Future Releases,32470,Abstracting the Widget Classes,,Widgets,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2015-05-23T03:42:13Z,2015-07-06T19:50:11Z,"Starting a discussion on the best way to abstract out the functionality of WP_Widget and the built in widgets in default-widget.php. Related #23012 ",welcher Future Releases,23008,Add a Hook To Hide Inactive Widgets,,Widgets,3.5,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-12-19T19:59:12Z,2015-05-12T08:24:39Z,"Hello, This is my first feature request so hopefully I'm going through the process correctly. Onto the request... Adding a hook to remove or hide the Inactive Widgets sidebar on the WordPress Admin Widgets page would be very useful for developers who don't use the area and want to be able to hide it for better UX. If this is approved I would love to submit a patch. :)",BFTrick Future Releases,25419,Add icon support for widgets on the admin page and customize screens,,Widgets,3.9,normal,minor,Future Release,enhancement,new,dev-feedback,2013-09-25T17:05:07Z,2014-08-18T16:22:43Z,"With the incorporation of live widget previews (widget customizer), an available widget browser is displayed which lists all widgets along with a dashicon for each. These icons should be incorporated into the widgets admin page now, as well.",westonruter Future Releases,20788,Add widget instance argument to widget_links_args filter,,Widgets,3.3.2,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-05-30T09:07:13Z,2012-09-13T09:25:07Z,"Using the `widget_links_args` filter (used in the default Links Widget class) as it is right now is a bit useless because one does not have access to the widget instance that applies the filter. Widget instance may contain custom variables set by custom fields that may have been added to the widget form by plugins or themes using other filters. Being able to access widget instance from within the filter function gives developers lots of possibilities to customize the widget. My suggestion is simple: add `$instance` argument to the `widget_links_args` filter, like this (wp-includes/default-widget.php line 113): {{{ wp_list_bookmarks(apply_filters('widget_links_args', array( 'title_before' => $before_title, 'title_after' => $after_title, 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => $show_images, 'show_description' => $show_description, 'show_name' => $show_name, 'show_rating' => $show_rating, 'category' => $category, 'class' => 'linkcat widget' ), $instance )); }}}",ragulka Future Releases,24910,Adding a class field to the text widget,,Widgets,,normal,trivial,Awaiting Review,enhancement,new,dev-feedback,2013-08-01T13:01:08Z,2013-08-05T16:19:44Z,"The text widget is often used as a catch-all way to enter arbitrary HTML into widget areas. I think it would benefit from a HTML class entry field, which would allow theme designers/developers to apply custom styling at the
' . esc_html__( 'Remove featured image' ) . ''; } } return $content; } add_filter( 'admin_post_thumbnail_html', 'change_thumbnail_size', 10, 2 ); }}} Note this line: {{{ #!php set_post_format() if ( 'standard' == $format || !in_array( $format, array_keys( get_post_format_slugs() ) ) ) // ~/wp-includes/posts.php -> _post_format_request() $slugs = get_post_format_slugs(); if ( isset( $slugs[ $qvs['post_format'] ] ) ) $qvs['post_format'] = 'post-format-' . $slugs[ $qvs['post_format'] ]; // ~/wp-includes/theme.php -> add_theme_support() switch ( $feature ) { case 'post-formats' : if ( is_array( $args[0] ) ) $args[0] = array_intersect( $args[0], array_keys( get_post_format_slugs() ) ); break; }}} So in every case it would've been enough to simply call `get_post_format_strings()`. Do we really need this function?",F J Kaiser Future Releases,27425,Templates For Posts Formats,,Post Formats,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-03-15T18:16:18Z,2014-09-01T12:37:50Z,"If I opt to use Custom Post Templates, then I can easily put a custom post template by putting a file named single-[name of the custom post], but that same feature is not available for the post formats. I love the post format feature in WordPress, and people just don't want to use that for some reasons, but this would really attract some of the audience to use the post formats. For example, a post with Audio format will first look for single-audio.php or single-audioformat.php or anything cuz it single-audio.php may effect the Audio Custom post type. What do you guys think of this idea?",hardeepasrani Next Release,17817,do_action/apply_filters/etc. recursion on same filter kills underlying call,nacin,Plugins,2.2,normal,normal,4.3,defect (bug),assigned,needs-docs,2011-06-16T18:04:04Z,2015-07-05T22:55:59Z,"Affects @wp-includes/plugin.php: do_action, do_action_ref_array, apply_filters, apply_filters_ref_array, _wp_call_all_hook When calling a specific hook from a function that was called through that same hook, the remaining hooked functions from the first iteration will be discarded.[[BR]] This is due to the handling of the array of registered functions using internal array pointers instead of a more robust approach. In my example, this problem arose when I tried to programmatically delete a menu in reaction to the removal of a category. I hooked into the delete_term action to do so, upon which another function hooked into delete_term would no longer fire.[[BR]] The obvious workaround is to adjust the priorities accordingly, but it shouldn't be necessary. The current implementation as in apply_filters is: {{{ reset( $wp_filter[ $tag ] ); if ( empty($args) ) $args = func_get_args(); do { foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ){ $args[1] = $value; $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args'])); } } while ( next($wp_filter[$tag]) !== false ); }}} Using the following method instead, both iterations would develop properly: {{{ if ( empty($args) ) $args = func_get_args(); foreach ( $wp_filter[$tag] as $filters ) foreach( (array) $filters as $the_ ) if ( !is_null($the_['function']) ){ $args[1] = $value; $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args'])); } }}}",kernfel Future Releases,21172,Adding the first filter/action in an earlier priority during a later priority causes the earlier priority to run (last),,Plugins,3.4,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2012-07-05T23:30:54Z,2015-05-09T00:23:39Z,"During testing of #21169, it occurred to me that [http://core.trac.wordpress.org/ticket/5338#comment:1] might present a problem with each rather than next/current, but that turns out not to be the case. Instead, this exposed a different bug: If you add a new filter at priority 9, when priority 9 did not previously have any filters, during the priority 10 execution, the priority 9 filter will run (!) after all other priorities (since the filters are not resorted after each priority). (Generally, if you add an earlier priority that did not previously have any filters during a later priority...) The attached unit test demonstrates this behavior.",devesine Future Releases,25733,Cannot activate a plugin with a plus (+) symbol in the plugin name,,Plugins,3.8,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2013-10-27T17:01:33Z,2013-11-24T21:41:25Z,"I created a plugin having ""+"" in filename (allowed in windows) and found an error to activate the plugin. After searching a lot, it seems that the problem is in .php, you can find how this problem was reported in drupal community and their thoughts here: [https://drupal.org/node/615418] To repeat this bug you just need to rename a plugin with ""+"" symbol in the filename and try to activate. The activation url becomes: {{{http://localhost/wordpress/wp-admin/plugins.php?action=activateplugin=hello+dolly%2Fhello.php&_wpnonce=XXXXXX}}} I tried to replace the {{{+}}} symbol in query string with %2B (its unicode value), this activated the plugin but also said: ''A fatal error occured, the plugin cannot be activate''. ---- I messed up the process to repeat, so writing again: 1. Rename a folder with + character in its filename 2. Try to activate 3. An error will occur, = '''First observation of error''' 4. Now replace the + symbol with %2B and try again 5. The plugin will be activated but in the status it will say it was not activated and an error occured = '''Second observation of error''' ---- In my opinion, although it might be an issue with the programming language, but wordpress can obviously inform coders about this.",godhulii_1985 Future Releases,14789,Inconsistency in 'all' hook invocation,,Plugins,3.0.1,normal,normal,Awaiting Review,defect (bug),reviewing,dev-feedback,2010-09-07T01:41:33Z,2014-01-19T17:48:27Z,"The 'all' hook (catchall hook for any hook name) is getting inconsistently called depending on how the concrete hook is being invoked: by apply_filters, apply_filters_ref_array, do_action or do_action_ref_array. In the simple cases (apply_filters, do_action), the hook will get all parameters passed, in the ..._ref_array cases, the hook will get only two parameters passed in which the first parameter is the name of the hook (a.k.a. tag) and the second parameter is an array of all other parameters. Every 'all' hook-function-callbacks should be called in the same way regardless whether which of the four invocation functions have been used on that pointcut. Additionally all four routines share a lot of the same code which could benefit of a refactoring.",hakre Future Releases,28994,Install plugin by upload file not check file type,,Plugins,3.9.1,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2014-07-23T05:08:46Z,2014-07-25T04:43:03Z,"Upload installs of plugins not check file type. If hacker bruteforce or get admin level access, they can run php script on my site. To reproduce: 1. Upload a php file via Plugins->Add New->Upload after upload it ask ftp login detail. please leave it and do 2. 2. Use browser goto http://mysite/wp-content/uploads/[CURRENT YEAR]/[CURRENT MONTH]/filename.php",mix5003 Future Releases,24050,"Plugin Editor doesn't show all plugin files, only 64",,Plugins,,normal,normal,Awaiting Review,defect (bug),reopened,dev-feedback,2013-04-11T18:27:17Z,2014-07-29T21:37:28Z,"Plugin Editor (plugin-editor.php) does not allow viewing or editing of all the files of larger plugins, such as [http://wordpress.org/extend/plugins/events-manager/ Events Manager]. Under the Plugin Files header there is a list of only 64 files. The plugin has 165 .php files and many more .txt, .js and .css files. All editable plugin files should be shown in this list.",Daedalon Future Releases,29539,Plugin viewer not displaying video tutorials.,,Plugins,4.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2014-09-05T16:19:32Z,2015-03-06T16:30:51Z,"In the WordPress 4.0 plugin page viewer, my video tutorials for my plugins are not displaying. [[Image(http://www.redeemerdanceacademy.ca/wp-content/uploads/2014/09/Ticket.png)]]",kidsguide Future Releases,27188,deactivated_plugin behaves improperly,,Plugins,2.9,normal,normal,Future Release,defect (bug),new,dev-feedback,2014-02-23T05:36:00Z,2014-10-26T22:11:43Z,"Currently, if someone were to hook into `deactivated_plugin`, one should expect that the `$plugin` actually be deactivated. So if, for example, I hook into it with the following code, deactivating Addthis, I don't get the expected behavior. {{{ add_action( 'deactivated_plugin', 'dtat_deactivate_self', 10, 2 ); /** * Deactivate ourself if Premise is deactivated. */ function dtat_deactivate_self( $plugin, $network_deactivating ) { if ( 'addthis/addthis_social_widget.php' == $plugin ) { die( 'Addthis: ' . print_r( is_plugin_active( $plugin ), 1 ) ); } } }}} The plugin still shows that it is active. So if I hook in here to check if plugin has been deactivated, then it fails. Instead, the `deactivated_plugin` hook should appear after the `update_option` call, which is where the plugin is actually deactivated. OR, the docs are wrong and should be updated. Attached is a sample addthis plugin extension that deactivates after Addthis is deactivated by being forced to use `update_option_active_plugins` and `update_option_active_sitewide_plugins`. See [https://gist.github.com/wpsmith/26c2e07370ee8b4c3e3f Github Gist sample plugin] for [http://wordpress.org/plugins/addthis/ Addthis].",wpsmith Future Releases,30875,enforce integers in add_filter priority,,Plugins,4.1,normal,normal,Awaiting Review,defect (bug),new,close,2014-12-31T22:48:18Z,2015-01-02T03:28:53Z,"The docs say that add_filter should use int values, but there is nothing enforcing this. Currently the following is perfectly valid and works as you'd expect an array to sort keys. add_action('wp_head', 'wrong1', '1'); add_action('wp_head', 'wrong2', '1.7'); add_action('wp_head', 'wrong3', '1.5'); add_action('wp_head', 'wrong4', 'mickeymouse'); add_action('wp_head', 'wrong5', 'donaldduck'); http://cloudup.com/cfqa31pltEE I've attached a patch that simply returns false, because if you simply typecast to int, the function who is doing it wrong, will get priority. Props jorbin for clearly understanding integers.",drrobotnik Future Releases,28226,menu_page_url does not return correct URL on network admin,,Plugins,3.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2014-05-12T18:54:57Z,2015-03-30T11:22:54Z,the `menu_page_url` function calls `admin_url` to build the URL returned. it should check for network admin first and use `network_admin_url` if present,norcross Future Releases,30662,"verify if $the_['function'] is not an empty string """"",,Plugins,,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2014-12-10T18:22:41Z,2014-12-12T02:02:42Z,"Fix for the error on line 214 because `$the_['function']` was an empty string `""""`",kidsguide Future Releases,30114,"Add ""Review"" link into the plugin_row_meta",,Plugins,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-10-26T22:27:17Z,2014-12-10T19:26:19Z,"Add link to ""Review"" page on the wordpress.org into the plugin_row_meta. [[Image(https://www.evernote.com/shard/s21/sh/278c4b04-a941-446d-a49d-c64858fb7b9c/50e98462d41b995cdc70dc425c281c3b/deep/0/Plugins---test---WordPress.png)]]",miyauchi Future Releases,21488,Add Default Callback Functions for add_settings_field(),,Plugins,,normal,normal,Future Release,enhancement,reopened,dev-feedback,2012-08-05T23:22:00Z,2014-02-02T07:53:24Z,"By default, when creating options in plugins and themes, every developer is required to create custom callback functions for rendering their option's HTML. The HTML for most options is nothing more than a standard INPUT field, a SELECT field, TEXTAREA field, etc, so there's really no reason there shouldn't be default callback options in place. For example, if I have a plugin that registers one text field option in the General settings page, it really doesn't make sense that I should be forced to create a callback function, especially not when probably 99% of all text fields are outputted in exactly the same way: {{{
View your site or Log in'), $url, $url . 'wp-login.php' ); ?>}}} Where $url is http://basesite.com/fakechildpath and the login page looks like http://basesite.com/fakechildpath/wp-login.php which will fail, given the requirements placed on the login page (to keep out spambots!) Not having the ability to do this is forcing me to modify WP Core, which will just get clobbered the next time I update WordPress. Thoughts? I went ahead and created the following patch off of SVN (attached): {{{ Index: wp-activate.php =================================================================== --- wp-activate.php (revision 26845) +++ wp-activate.php (working copy) @@ -106,7 +106,7 @@ } } else { extract($result); - $url = get_blogaddress_by_id( (int) $blog_id); + $url = get_site_url( (int) $blog_id); $user = get_userdata( (int) $user_id); ?> @@ -117,7 +117,7 @@
View your site or Log in'), $url, $url . 'wp-login.php' ); ?>+
View your site or Log in'), $url, get_site_url( (int) $blog_id, 'wp-login.php') ); ?>
$message\n""; } }}} Living in misc.php, this is clearly not the most loved function in WordPress, but beyond its lack of documentation and arguments it also actually doesn't make sense when combined with the nature of WP_Error, and I'd argue that it should be a first-class citizen of the WP_Error API. === Deal with the input as WP_Error class by default === For one thing its argument is named $message, which is a misnomer since it also supports complex WP_Error objects. I think it should be called $error and it should attempt to handle the error object in as much detail as possible. If this function is given a string instead of an error_object it should just show the text with the default formatting. === Move it into the class defintion === The function logic should also be moved to be inside WP_Error as ::show_message() as well as maybe adding a ::show_messages() to differentiate between forcing the first message in the object and showing any relevant messages. The original function can be kept as a shell for the class method. === Support $code and $data better === The updated function should allow $code values to be specified to show only messages related to a specific error $code (from WP_Error::add()) as well as some kind of option specifying whether the contents of the $data value for the results should be displayed. === Add support for 'types' of errors for display purposes === To really have valuable visual cues linked with error display the system needs to be adapted to handle error types like 'error', 'updated' and something green like 'success'. Having this be part of hte API would increase the likelihood of people using the system because it will make it easier to quickly add visual errors to a plugin. IMHO the easiest way to achieve this would be to link 'types' with CSS classes expected to exist in wp-admin. 'updated' and 'error' classes already exist, yellow and red respectively, and can be a starting point. This way marking an error as 'error' or 'updated' automatically controls the color it will be when show_messages() is run. This would probably require modifying the WP_Error::wp_error() and WP_Error::add() methods to accept a 4th argument, but would be a great step forward. === Use nice formatting === I think the formatting should be the same as the 'settings updated' message from after you save a settings page. It is malleable and stands out in the admin: {{{
) tags around the comment and for multi-line comments line breaks (
) are added after every line. This should not happen in HTML comments. This ticket is similar to #712 which was closed with wontfix. I would like to know why this isn't seen as an issue? It prevents the addition of RDF and other metadata, not to mention just plain old HTML comments in posts.",gord Future Releases,27350,Invalid HTML Output,,Formatting,3.8,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2014-03-11T08:19:48Z,2014-11-18T16:47:17Z,"Paste into editor's Text tab: {{{
Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!}}} View the post (source) and you get: {{{
Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!}}} Because I (incorrectly) entered an uppercase closing tag, wpautop() thinks there is no closing tag so adds a , which then often renders as a double
tag. Close if this is not a bug, though I thought it may be good to do some sanitizing or something on uppercase tags.
Future Releases,12134,Add image dimensions to smiley img element,nacin,Formatting,3.0,normal,normal,Future Release,enhancement,reviewing,dev-feedback,2010-02-05T02:55:19Z,2014-03-31T00:54:24Z,All smileys are 15x15. Add dimensions to the img element to avoid a double paint by web browsers during page load.,niallkennedy
Future Releases,26868,"Function 'make_clickable()' doesn't make hyperlinks from explicit URLs using the `mailto:`, `tel:` and other schemes that do not start with `//`",,Formatting,3.8,normal,normal,Future Release,enhancement,new,needs-unit-tests,2014-01-18T16:00:14Z,2014-01-27T16:57:47Z,"Function `make_clickable()` tries to recognise URLs and convert these into clickable hyperlinks. The function is by default configured as a filter for comment text.
Unfortunately, the function assumes that all explicitly declared URLs begin with the string `//` after the scheme and colon parts which is not the case for the `mailto:`, `tel:` and many other schemes. Such URLs could usefully be made clickable, especially for use on smartphones and tablets.
This also leads to inconsistencies between explicitly and implicitly declared URLs. For example, the string `email@example.com` is converted into a clickable hyperlink whilst the string `mailto:firstname.lastname@example.com` is not.
By contrast, the TinyMCE post editor correctly and automatically makes both implicit and explicit `mailto:` links clickable but does nothing with `tel:`.
For reference, the syntax of URLs is defined by http://tools.ietf.org/html/std66, the `mailto:` scheme by http://tools.ietf.org/html/rfc6068 and that for `tel:` by http://tools.ietf.org/html/rfc3966.
As #16892 has illustrated, parsing URLs can be hard. The use of `wp_allowed_protocols()` may help in detecting which strings we wish to make clickable.
Found whilst testing #22946.",mdgl
Future Releases,19100,Introduce esc_color(),,Formatting,,normal,normal,Future Release,enhancement,new,dev-feedback,2011-11-01T12:16:14Z,2015-04-30T22:41:51Z,"Currently there is no way to escape a color in hexadecimal notation before printing it to a block of css or saving to the database. Many themes like to introduce functionality, whether it be core-supported or completely custom, to change the color of various parts of the templates. I believe that a function such as `esc_color()` would promote best practices while ensuring that unintended values do not get stored as colors and thus echoed in css blocks potentially breaking display.",mfields
Future Releases,27583,Move color sanitize function to wp-includes/formatting.php,,Formatting,3.4,normal,normal,Future Release,enhancement,new,dev-feedback,2014-03-29T18:47:31Z,2015-05-21T17:21:31Z,"{{{sanitize_hex_color()}}}, {{{sanitize_hex_color_no_hash()}}}, and {{{maybe_hash_hex_color()}}} are excellent functions for sanitizing color values. Unfortunately, they are defined in wp-includes/class-wp-customize-manager.php which is only included when the customizer is initialized. I recommend that the functions be moved to wp-includes/formatting.php, where other similar functions are located, so that they can be used everywhere in WordPress.
As an example, if you use a color input for adding a color option in a theme or plugin, you should be properly sanitizing/escaping the value when output in the HTML. Having these three functions available makes this process easy and consistent. Additionally, it provides a level of consistency between projects as different developers will be using the same function for sanitizing data.",tollmanz
Future Releases,26759,New Generic Sanitize Functions for Core,,Formatting,3.8,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-01-02T17:54:48Z,2014-03-21T12:24:41Z,"Core currently supplies a number of sanitize functions:
They all sanitize by usage, not by data type.
As such, I (and I suspect others) wind up using these to escape things they weren't initially meant for -- for the sake of brevity, and it's just quicker and leads to tidier code.
I believe it could result in better and simpler sanitizing if we were to include sanitize-by-format functions in core. For example,
wp_sanitize_numeric( $raw ); // [\d]
wp_sanitize_numeric_float( $raw ); // [\d\.,] allowing both commas and periods as decimal indicator and thousands seperator
wp_sanitize_hex( $raw ); // [\da-f] case-insensitive
wp_sanitize_alphanumeric( $raw ); // [\da-z] case-insensitive
wp_sanitize_letters( $raw ); // [a-z] case-insensitive
wp_sanitize( $raw, $regex ); // uses passed in regex to determine what to strip.
The specific functions to use are up for discussion. I'm just hoping to make it simpler for users to sanitize data by expected type.
As a side note, this will let folks use `wp_sanitize_numeric()` to sanitize integers larger than `PHP_INT_MAX` -- which tumblr and twitter IDs often happen to be for imports and feeds and the like (as casting to `(int)` isn't a good idea).",georgestephanis
Future Releases,29807,add support for picture element and srcset attribute on img in wp_kses,,Formatting,,normal,normal,Future Release,enhancement,new,dev-feedback,2014-09-30T12:39:10Z,2015-05-28T19:11:04Z,"Related to #28993 - ( srcset attribute is stripped when switching from text to visual tab in the editor)
If support for srcset attribute and picture element (and source element) is to be added to tinyMCE, they should also be allowed in wp_kses. ",mattheu
Future Releases,20771,esc_url() instead of esc_html() in wp_nonce_url(),SergeyBiryukov,Formatting,3.4,normal,normal,Future Release,enhancement,reopened,dev-feedback,2012-05-29T06:21:37Z,2015-05-24T20:49:53Z,"The `wp_nonce_url()` function currently uses `esc_html()` in its output, which doesn't really seem to be the appropriate escaping function since it's generating a URL.
Attached patch changes the output to use `esc_url()`",jkudish
Future Releases,29717,"wp_check_invalid_utf8 - pcre tricks and failsafes, +mb_convert_encoding, iconv fix, performance",,Formatting,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-09-20T17:18:13Z,2015-03-04T03:10:01Z,"Used in core in these 4 functions.
* esc_attr()
* esc_js()
* esc_html()
* sanitize_text_field()
It's the first function to execute for all 4, and especially for sanitize_text_field it gets called quite a bit and is pretty important.
It's purpose is to check a string for invalid utf. It utilizes preg_match with the '/u' modifier to parse both the pattern and subject for utf. PCRE automatically checks both the pattern and subject for invalid utf, upon which it will exit with an error code/constant.
The changes here: Normally pcre is compiled with utf support. It can also be compiled to disallow utf support, and it can be compiled without utf support. If utf is compiled and enabled the '/u' modifier for preg_match is available which turns on the automatic utf validation.
For older dists or those with utf support turned off at compile, there is a trick to enable the same functionality as the '/u' provides.
In order process UTF-8 strings, you must build PCRE to include UTF-8
support in the code, and, in addition, you must call pcre_compile()
with the PCRE_UTF8 option flag, or the pattern must start with the
sequence (*UTF8). When either of these is the case, both the pattern
and any subject strings that are matched against it are treated as
UTF-8 strings instead of strings of 1-byte characters.
So the first change to this function was to allow a fallback to that pattern option trick in case '/u' wasnt supported.
1. `@preg_match( '//u', '' ) !== false`
2. `@preg_match( '/(*UTF8)/', '' ) !== false`
3. Fallback to a regex that doesn't require UTF support, instead of using pcre utf validation it searches for it
I also wanted it to have better performance, especially due to its use in those 4 core functions I use often. I benchmarked it pretty thoroughly to try and gain more speed. This patch is about 10-20% faster.
Many gains were from refactoring the logic and control structures, chaining within if statements using bools, and utilizing the static variables to the fullest. This is especially crucial since this function gets called repeatedly. I also gained some cycles by replacing an in_array() check with a `stripos`.
One of the bigger gains came from replacing the `strlen( $string ) == 0` that ran on every run with. Since the $string variable was already casted to a string, that should always work and keep things a little cheaper.
$string = (string) $string;
// if string length is 0 (faster than strlen) return empty
if ( ! isset( $string[0] ) )
return '';
The final change was to the 2nd parameters $strip, which if true is supposed to strip the invalid utf out of the string and return the valid. In core nowhere is that parameter being used (yet), which explains the deprecated looking iconv. Also added a fallback to use mb_convert_encoding in case iconv is missing.
// try to use iconv if exists
if ( function_exists( 'iconv' ) )
return @iconv( 'utf-8', 'utf-8//ignore', $string );
// otherwise try to use mb_convert_encoding, setting the substitue_character to none to mimic strip
if ( function_exists( 'mb_convert_encoding' ) ) {
@ini_set( 'mbstring.substitute_character', 'none' );
return @mb_convert_encoding( $string, 'utf-8', 'utf-8' );
Here are some of the test strings I used, I also used the utf-8-test file at http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt. I did testing on 4.0 using php 5.6, 5.4, 5.3, and 5.4. I verified the output and the strip feature as well. For all tests I had php error_reporting set to the max:
ini_set( 'error_reporting', 2147483647 );
$valid_utf = array(
""\xc3\xb1"", // 'Valid 2 Octet Sequence'
""\xe2\x82\xa1"", // 'Valid 3 Octet Sequence' =>
""\xf0\x90\x8c\xbc"", // 'Valid 4 Octet Sequence' =>
""\xf8\xa1\xa1\xa1\xa1"", //'Valid 5 Octet Sequence (but not Unicode!)' =>
""\xfc\xa1\xa1\xa1\xa1\xa1"", //'Valid 6 Octet Sequence (but not Unicode!)' =>
""Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn"", // valid four octet id
'Iñtërnâtiônàlizætiøn', // valid UTF-8 string
""\xc3\xb1"", // valid two octet id
""Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn"", // valid three octet id
$invalid_utf = array(
""\xc3\x28"", //'Invalid 2 Octet Sequence' =>
""\xa0\xa1"", //'Invalid Sequence Identifier' =>
""\xe2\x28\xa1"", //'Invalid 3 Octet Sequence (in 2nd Octet)' =>
""\xe2\x82\x28"", //'Invalid 3 Octet Sequence (in 3rd Octet)' =>
""\xf0\x28\x8c\xbc"", //'Invalid 4 Octet Sequence (in 2nd Octet)' =>
""\xf0\x90\x28\xbc"", // 'Invalid 4 Octet Sequence (in 3rd Octet)' =>
""\xf0\x28\x8c\x28"", //'Invalid 4 Octet Sequence (in 4th Octet)' =>
chr(0xE3) . chr(0x80) . chr(0x22), // Invalid malformed because 0x22 is not a valid second trailing byte following the leading byte 0xE3. http://www.unicode.org/reports/tr36/
chr(0xF8) . chr(0x80) . chr(0x80) . chr(0x80) . chr(0x80), // Invalid UTF-8, overlong 5 byte encoding.
chr(0xD0) . chr(0x01), // High code-point without trailing characters.
chr(0xC0) . chr(0x80), // Overlong encoding of code point 0
chr(0xF8) . chr(0x80) . chr(0x80) . chr(0x80) . chr(0x80), // Overlong encoding of 5 byte encoding
chr(0xFC) . chr(0x80) . chr(0x80) . chr(0x80) . chr(0x80) . chr(0x80), // Overlong encoding of 6 byte encoding
chr(0xD0) . chr(0x01), // High code-point without trailing characters
""Iñtërnâtiôn\xe9àlizætiøn"", // invalid UTF-8 string
""Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn"", // invalid six octet sequence
""Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn"", // invalid four octet sequence
""Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn"", // invalid two octet sequence
""this is an invalid char '\xe9' here"", // invalid ASCII string
""Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn"", // invalid id between two and three
""Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn"", // invalid five octet sequence
""Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn"", // invalid three octet sequence third
""Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn"", // invalid three octet sequence second
Notes and more info:
In order process UTF-8 strings, you must build PCRE to include UTF-8
support in the code, and, in addition, you must call pcre_compile()
with the PCRE_UTF8 option flag, or the pattern must start with the
sequence (*UTF8). When either of these is the case, both the pattern
and any subject strings that are matched against it are treated as
UTF-8 strings instead of strings of 1-byte characters.
UTF-8 was devised in September 1992 by Ken Thompson, guided by design
criteria specified by Rob Pike, with the objective of defining a UCS
transformation format usable in the Plan9 operating system in a non-
disruptive manner.
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
A UTF-8 string is a sequence of octets representing a sequence of UCS
characters. An octet sequence is valid UTF-8 only if it matches the
following syntax, which is derived from the rules for encoding UTF-8
and is expressed in the ABNF of [RFC2234].
UTF8-octets = *( UTF8-char )
UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1 = %x00-7F
UTF8-2 = %xC2-DF UTF8-tail
UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
%xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
%xF4 %x80-8F 2( UTF8-tail )
UTF8-tail = %x80-BF
* http://www.pcre.org/pcre.txt
* http://us1.php.net/manual/en/pcre.constants.php
* http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
* http://en.wikipedia.org/wiki/Unicode
* http://unicode.org/faq/utf_bom.html
* http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf
* http://www.pcre.org/pcre.txt
* http://tools.ietf.org/rfc/rfc3629.txt
* http://www.unicode.org/faq/utf_bom.html
* http://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
* http://www.unicode.org/reports/tr36/
* http://tools.ietf.org/rfc/rfc3629.txt
Related Tickets:
* https://core.trac.wordpress.org/ticket/11175
* https://core.trac.wordpress.org/ticket/28786
Future Releases,19643,Allow array for $extra_fields in request_filesystem_credentials,dd32,Filesystem API,3.0,normal,minor,Awaiting Review,defect (bug),reviewing,dev-feedback,2011-12-22T07:47:38Z,2015-01-15T00:29:54Z,The current implementation for passing extra fields through request_filesystem_credentials() does not allow for an array of data to be passed. I came across this issue when trying to process a bulk installation of plugins with my plugin installation class. My patch fixes this from what I can tell and doesn't break anything that I can see from my testing.,griffinjt
Future Releases,16400,Add hook to delete_plugins() on successful delete,,Filesystem API,3.0.4,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2011-01-28T20:16:18Z,2013-08-15T23:51:10Z,"Add an action or filter to the end of /wp-admin/includes/plugin.php delete_plugins()'s processing when the write is successful.
The use case is for managing a Wordpress install on an SVN-controlled server. Whenever the CMS changes a file's contents (particularly in the wp-content folder) I need to be able to trigger an svn commit.
See also Ticket #16399 ",scottconnerly
Future Releases,19879,Better caching for get_dirsize,,Filesystem API,3.3.1,normal,normal,Future Release,enhancement,new,dev-feedback,2012-01-23T15:42:59Z,2014-01-24T05:39:52Z,"In a multisite install, when trying to determine whether a site has exceeded its storage quota, WordPress will scan through a blog's upload directory and sum up the file sizes, by running {{{filesize}}} against each one. With a large number of files, this can significantly slow down the upload process or certain portions of the Dashboard.
{{{get_dirsize}}} has transient caching in place but this is a single cache entry for all folders. It might be better if WordPress has a separate cache entry for each folder and was invalidated based on context so that get_dirsize does not need to be run constantly on older, unchanged directories as frequently.",batmoo
Future Releases,21403,"Introduce wp_scandir, remove opendir / closedir code",,Filesystem API,3.0,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-07-28T08:57:20Z,2015-05-08T07:59:02Z,"There is {{{@opendir}}} code all over the place that is not standardized. On top of that, there is plenty of code that is duplicated and could be condensed into one handy function. Plus, in all of the places we are using {{{opendir()}}}, we really want to be using {{{scandir()}}}.
I have created a master function in {{{load.php}}} called {{{wp_scandir()}}} that does the basics:
* scans a directory for files / subdirectories
* filters list by extension(s)
* optionally returns ONLY files
This cleans up code in many places.",wonderboymusic
Future Releases,15610,Comments on attachments don't appear in site-wide comments RSS feed,,Feeds,3.1,normal,minor,Future Release,defect (bug),new,dev-feedback,2010-11-29T21:05:37Z,2014-12-06T19:42:19Z,"Tested against r16950.
Comments that are entered against an attachment do not appear in the site-wide comments RSS feed (e.g., http://sitename.com/comments/feed/).
To test:
1. Add an attachment of any kind (usually image), then View the attachment.
2. Post a comment on the attachment page.
3. Check the site's comments RSS feed - the comment will not appear.",markel
Future Releases,13066,Last-Modified headers for individual comment feeds are incorrect,jgci*,Feeds,3.0,low,normal,Future Release,defect (bug),accepted,dev-feedback,2010-04-21T07:32:34Z,2015-04-22T21:10:46Z,"The WP::send_headers function currently uses get_lastcommentmodified() to set the Last-Modified header for all comment feeds. This is a problem when used for individual post comment feeds. The function gets the last modified comment across all blog posts. That means that every time a comment is posted anywhere, the Last-Modified header for ALL comment feeds is refreshed. Issues:
1. This is technically incorrect, since only the global comment feed and one specific post's comment feed have changed with the last comment (not all possible comment feeds); and
2. It means that If-Modified-Since requests for other post comment feeds will not receive a 304 response when they should do (since their content hasn't changed). On blogs with many posts and many comment feeds, this will have a large impact on bandwidth because lots of requests will receive 200 responses where 304's would have done, just because a comment was posted on some other post.
If I've understood the flow correctly, $wp_query hasn't been fully set up at the time this function is called, so changing this behaviour would require some change in the flow of things (e.g., the handling of last modified headers for feeds moves into the do_feed() function). But doing so would mean that Last-Modified headers are correct/meaningful and that many more 304 responses can be served.
Any thoughts?",solarissmoke
Future Releases,13049,WordPress should not generate feeds for 404 pages,,Feeds,3.0,low,normal,Future Release,defect (bug),reopened,dev-feedback,2010-04-19T11:32:20Z,2015-03-20T16:54:29Z,"Say I try to visit: `http://my.blog.tld/non-existent-slug/`, (where non-existent-slug is not a valid slug) I get a the normal 404 template.
However, if I try to visit `http://my.blog.tld/non-existent-slug/feed/`, then the response is a bit weird. A 404 response header is sent but the content is nonetheless sent through the feed template. And so you get something like this:
got lower: '; var_dump($meta); } $meta = get_post_meta ($post->ID, '_ALLDAY'); if ($meta ) { echo '
got upper: '; var_dump($meta); } update_post_meta (21, '_allday','Tried to update lowercase'); $meta = get_post_meta ($post->ID, '_allday'); if ($meta ) { echo '
got lower: '; var_dump($meta); } else { echo '
Tried to get lower but no go'; } $meta = get_post_meta ($post->ID, '_ALLDAY'); if ($meta ) { echo '
Still have upper: '; var_dump($meta); } }}} Output of above: got upper: array(1) { [0]=> string(14) ""tis the upper."" } Tried to get lower but no go Still have upper: array(1) { [0]=> string(25) ""Tried to update lowercase"" } ",anmari Future Releases,12257,wpdb Scales Badly Due to Unnecessary Copies of All Query Results,,Database,,normal,critical,Future Release,defect (bug),assigned,dev-feedback,2010-02-17T03:08:06Z,2015-02-19T07:43:55Z,"While working on #11726, I encountered a reproducible crash in wpdb::query() The following code causes memory exhaustion on large result sets: {{{ while ( $row = @mysql_fetch_object($this->result) ) { $this->last_result[$num_rows] = $row; $num_rows++; } }}} The memory exhaustion message is error-controlled, causing a white screen of death even in debug mode. I searched wp-db.php for references to $this->last_result, and I found no justification for these object reference copies. $this->last_result '''should''' be maintained as a MySQL resource and properly optimized using the MySQL client layer instead of this PHP nonsense. Tagging for dev-feedback to discuss which Milestone is appropriate.",miqrogroove Future Releases,11717,Access to automatic database repair/optimize with admin rights,,Database,2.9.1,normal,normal,Future Release,enhancement,assigned,dev-feedback,2010-01-05T07:35:10Z,2014-07-11T13:22:14Z,"Hi, I read somewhere that the reason for using a constant as enabler for the automatic repairing/optimizing database functionality was, that some people are not able to access their back-end in case certain tables are broken. Anyway, as db optimization (and not only repairing) is also included in ''/wp-admin/maint/repair.php'', it would be helpful, if we could avoid setting the constant and in addition grant users with the admin role the right to access the functionality. I've added the necessary two lines and attached a patch to this ticket. - Hopefully this will make it into core, because it would really ease access and increase usability. My Best, Berny",neoxx Future Releases,15499,Add an index for get_lastpostmodified query,,Database,3.0.1,normal,normal,Future Release,enhancement,new,dev-feedback,2010-11-19T18:20:31Z,2015-02-15T15:07:40Z,"I had a friend (Jools Wills) look over a WordPress site recently, to get a fresh view on what might be optimised, and he noticed a query which might benefit from an additional index on ```WP_Posts```. The query ```SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_modified_gmt DESC LIMIT 1``` in ```get_lastpostmodified``` is run for last modified date in GMT, and currently doesn't use an index. This SQL is run whenever certain types of feed are requested as far as I can see. We added ```CREATE INDEX type_status_modified ON wp_posts (post_type, post_status, post_modified_gmt);``` and ```CREATE INDEX type_status_modified_no_id ON wp_posts (post_type, post_status, post_date_gmt);``` and the query runs a lot faster now. The following timings were taken running the first query (```post_modified_gmt```) on a 36,362 row posts table. Note that it doesn't use filesort after the index has been added. ''Before:'' {{{ mysql> EXPLAIN SELECT post_modified_gmt FROM slgr_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_modified_gmt DESC LIMIT 1; +----+-------------+------------+------+------------------+------------------+---------+-------------+-------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+------+------------------+------------------+---------+-------------+-------+-----------------------------+ | 1 | SIMPLE | slgr_posts | ref | type_status_date | type_status_date | 124 | const,const | 24718 | Using where; Using filesort | +----+-------------+------------+------+------------------+------------------+---------+-------------+-------+-----------------------------+ 1 row in set (0.03 sec) }}} * 0.21290683746338ms * 0.25690102577209ms * 0.230553150177ms * 0.2274341583252ms * 0.23083996772766ms ''After:'' {{{ mysql> EXPLAIN SELECT post_modified_gmt FROM slgr_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_modified_gmt DESC LIMIT 1; +----+-------------+------------+------+---------------------------------------+----------------------+---------+-------------+-------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+------+---------------------------------------+----------------------+---------+-------------+-------+-------------+ | 1 | SIMPLE | slgr_posts | ref | type_status_date,type_status_modified | type_status_modified | 124 | const,const | 24718 | Using where | +----+-------------+------------+------+---------------------------------------+----------------------+---------+-------------+-------+-------------+ 1 row in set (0.00 sec) }}} * 0.00082707405090332ms * 0.00072288513183594ms * 0.00074386596679688ms * 0.00066494941711426ms * 0.00066208839416504ms In ```get_lastpostmodified``` both these queries are run, so the total savings in my case on a quiet server are nearly 0.5 seconds... worth having, I reckon. I've not created a patch for schema changes before, but I think the only place the change would need to go would be ```scheme.php```? Suggested patch attached.",simonwheatley Future Releases,18315,Add an index to the GUID column in the posts table,,Database,3.2.1,normal,normal,Future Release,enhancement,reopened,dev-feedback,2011-08-02T04:31:01Z,2014-07-28T15:33:46Z,"Running queries on the GUID column in the posts table is slow because the column is not indexed. The attached patch adds an index. Note, this affects ticket #18286 - I will update that ticket with appropriate patches to reflect this request.",alexkingorg Future Releases,29710,"Add hooks to wpdb's insert(), update(), delete() and similar methods",,Database,2.5,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-09-19T13:52:35Z,2015-05-29T00:23:22Z,"The `wpdb` class currently offers a `query` filter in its `query()` method which supplies ''unstructured'' data to its handlers (a string with an SQL query). In our plugin we need to work with ''structured'' data provided to the `insert()`, `update()` and similar methods. It would be great if these methods provided hooks both before and after the actual work happens. For instance, the `insert()` method would become: {{{ function insert( $table, $data, $format = null ) { do_action( 'db_before_insert', $table, $data, $format ); $result = $this->_insert_replace_helper( $table, $data, $format, 'INSERT' ); do_action( 'db_after_insert', $table, $data, $format, $result ); return $result; } }}} ",borekb Future Releases,25559,Enhance prepare method to better support SQL IN operator,,Database,3.8,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2013-10-10T19:47:36Z,2013-12-18T23:24:48Z,"When querying the database for rows that have fields that match any of several values, you typically use the IN operator. For example: {{{ $wpdb->prepare(""select a from b where c in (%d, %d, %d, %d)"", $values); }}} I propose that the sprintf-like formatting allowed by the prepare method be extended to additionally accept markers such as ""%#3s"", which would be expanded to ""%s, %s, %s"". So, the previous example could be rewritten as: {{{ $wpdb->prepare(""select a from b where c in (%#4d)"", $values); }}} To be more clear, the syntax I'm proposing is a ""%"", followed by a ""#"", followed by a 1 or more digit number specifying how many times to repeat the marker, followed by the type of the marker (d, s, or f). Other markers would continue to work as usual. The other part of this proposal is that the requirements for the 2nd and all following parameters would be relaxed, so that the user could pass single values, arrays of values, or some combination of the above, and the arrays would be flattened into a single array of values. For example, the following calls to prepare would be equivalent: {{{ $wpdb->prepare( $query, 1, 2, 3, 4, 5 ); $wpdb->prepare( $query, array( 1, 2, 3, 4, 5, ) ); $wpdb->prepare( $query, 1, array( 2, 3, ), 4, array(5,) ); // or even $wpdb->prepare( $query, array( 1, array( 2, ), 3, ), 4, 5 ); }}} The reason I am making this proposal is that, while I do try to avoid raw SQL whenever practical, I often find myself forced to resort to it, and when I do, it is not uncommon for me to have to use the IN operator. So far, I've had to build my format string via a loop, which usually adds a placeholder for each item in an array. It's not a very complex bit of code, but because, at least in my experience, this situation is not super uncommon, it would be nice if the prepare method could make this a bit easier. I have created a draft version of a patch which will add the above functionality. Comments and questions are appreciated.",cannona Future Releases,28625,Enhancement: Add constants to support SSL connections for mysqli,,Database,4.0,normal,normal,Future Release,enhancement,new,dev-feedback,2014-06-24T22:39:12Z,2015-03-25T09:12:58Z,"In order to support SSL'ed MySQL connections with the `mysqli_*` functions introduced in WordPress 3.9 / PHP 5.5 `mysqli_ssl_set()` must be called to set the path to the SSL certs and keys to be used by the MySQL client before `mysqli_real_connect()` is called. We should add the following optional constants to allow for users to configure secure connections to the database. * `MYSQL_SSL_KEY` * `MYSQL_SSL_CERT` * `MYSQL_SSL_CA` * `MYSQL_SSL_CA_PATH` * `MYSQL_SSL_CIPHER` In addition this should only be set if the feature flag `MYSQLI_CLIENT_SSL` is set for the existing `MYSQL_CLIENT_FLAGS` constant.",hypertextranch Future Releases,881,Lengthen password field for protected posts,Nazgul,Database,,normal,normal,Future Release,enhancement,reopened,dev-feedback,2005-02-15T04:31:00Z,2015-05-19T01:07:36Z,"You know, if you lengthen the database column size to 32 and then just md5() it, users essentially would have unlimited password length for a post. However, since I take it that the ability to actually see the password that you input is enjoyed in wordpress, increasing the max length to 50 or so would be greatly appreciated. It's just that 20 is so short...",ScytheBlade1 Future Releases,22884,What if I delete wp_posts table from database.,,Database,3.5,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-12-12T12:48:24Z,2015-01-25T10:41:33Z,"I am not a experienced or mature programmer but I have seen it While I was playing with database of WordPress. I have deleted wp_posts table in database in WordPress - 3.5(beta). It looks normal on other pages at admin side but when i open single post it shows post-new.php and when hit save, it shows ""wp_error"" with this message ""You are not allowed to edit this post."" That's OK. I was expecting error but not this type of error. It seems WordPress doesn't know that its most important table has gone away and that's why admin may not know( well for a while). I think its not good. well I don't know its issue or it is way it behaves with database and its normal but I think WordPress should know what exactly happened. when I have updated WordPress with stable 3.5 it has updated but database is still same which is normal. Should we( can we )track tables( some of tables which are important ) by PHP ?",mukkundthanki Future Releases,10883,db-error.php not used for all DB failures,,Database,2.8.4,normal,normal,Future Release,enhancement,assigned,dev-feedback,2009-10-01T02:45:28Z,2014-07-11T13:22:14Z,"db-error.php (the optional custom DB error message file to be placed in wp-content) does not get included all the time. Sometimes wp-db.php will use its {{{bail()}}} method to spit out its own message. This code needs to be there too: {{{ if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) { require_once( WP_CONTENT_DIR . '/db-error.php' ); die(); } }}}",markjaquith Future Releases,20634,dbDelta is unforgiving about field declarations,,Database,1.5,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2012-05-08T03:27:05Z,2015-05-09T00:52:34Z,"the variable type is case sensitive: int(22) != INT(22) the mysql type BOOL or BOOLEAN comes back from the db as tinyint(1): tinyint(1) != BOOLEAN Not a huge issue, just annoying. Makes dbDelta fire off unnecessary sql. ",SidHarrell Future Releases,26114,Auto prepare utilities for wp-db.php,,Database,3.7,normal,normal,Awaiting Review,feature request,new,dev-feedback,2013-11-19T16:55:47Z,2013-12-01T13:08:21Z,"This is a feature I've adapted from my kissMySQL class that I use on non-WordPress projects that use a database. It's a handful of non-intrusive utility methods to add to the wpdb class. Simply put, I personally find it tedious writing this: {{{ $wpdb->get_results( $wpdb->prepare( $query, $args... ) ); }}} I'd prefer to write this: {{{ $wpdb->get_results( $query, $args... ); }}} The idea is any additional arguments are taken to be values to be escaped and inserted into the query. It also intelligently detects and shifts/pops off the $object argument if it's the first or last one passed in the list. So I could easily do this: {{{ $wpdb->get_results( $query, ARRAY_A, $args... ); // is equal too this $wpdb->get_results( $wpdb->prepare( $query, $args... ), ARRAY_A ); }}} Now, my patch however simply adds alternate methods that alias to the proper ones after doing the auto preparation. The only real downside is that you can't pass x/y args to the get_var/row/col methods. My solution would be to add methods like get_var_x_y and get_row_y, but obviously this would be too drastic an API change. This patch adds the following new methods (naming schemes leave something to be desired): - auto_prepare() - get_var_prepared() - get_row_prepared() - get_col_prepared() - get_results_prepared() This patch also adds a few lines to wpdb::query() so it can use the auto_prepare method, should multiple arguments be passed to it. Since query() only takes one argument, it seemed safe to modify it directly rather than create a query_prepared() method. In addition, I've had to make some changes to the values of the $object constant values; I've appended a random string to the end so as to greatly minimize the chance of confusion between what a prepare argument and an object format constant. I'd like feedback on this handling in particular if possible; pretty sure I'm missing a better way to do this. I've tested this and as expected it doesn't appear to cause any problems. More testing will be needed of course; I'm applying it to a number of my installs to see if anything breaks, but so far so good.",dougwollison Next Release,32814,Custom Menu Widget should show newly added menus in Customizer,adamsilverstein,Customize,trunk,high,normal,4.3,defect (bug),assigned,dev-feedback,2015-06-28T13:33:32Z,2015-07-06T23:43:09Z,"In the customizer, if you create a new menu it will not be available in the custom menu widget until you save the menu. A nice enhancement would be to allow you to assign newly created menus here. Steps to reproduce: 1. Create a new menu in the Customizer 2. DON'T Save & Publish 3. Navigate to Widgets in Customizer 4. Add a Custom Menu widget 5. Dropdown for menu selection will not include the new menu ",adamsilverstein Future Releases,32637,"Customizer should default to returning to the front page, not the themes page",,Customize,4.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2015-06-13T18:56:35Z,2015-06-29T03:47:52Z,"When closing the Customizer without a `url` or `return` param set, the user should be taken to the front page of the site rather than the themes admin page or the dashboard (for users who can't switch themes). This is based on several changes with the Customizer over the past several releases, and most generally because we'd like to emphasize the connection between the Customizer and the frontend rather than the admin. Note that most users will probably end up in the Customizer with a url or return param but that's not always the case. With this changed users should still theoretically go back to the themes admin if they opened the Customizer from there. See the `$return` var in lines 29 and 32 of `wp-admin/customize.php`.",celloexpressions Future Releases,16919,style.css can sometimes conflict with custom background image,,Customize,3.1,normal,normal,Future Release,defect (bug),new,dev-feedback,2011-03-21T21:54:10Z,2014-02-02T07:59:48Z,"Steps to repeat: 1. Theme with the following body style (or something similar): {{{ body { background: url(images/texture.jpg) #fff; } }}} 2. Use `add_custom_background();` in functions.php 3. Select custom bg color, but no custom bg image. 4. View site. Custom bg color shows under the default background image, looks strange. No way to eliminate the use of textured or patterned background without editing style.css. Intended result would be that if no bg image is chosen, none is needed. Attached patch should address this.",nathanrice Future Releases,18959,Allow choosing multiple header images,,Customize,3.3,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2011-10-15T21:32:15Z,2015-01-17T22:15:07Z,"Please, see small screenshot :) [[Image(http://trueimages.ru/img/0f/5b/b7cf5f11a2786fc804521503268.png)]] Description: This is the theme TwentyEleven. I want choose multiple header images, (for example 4,5,6), but i cannot. Only random or only one. Thanks.",wikicms Future Releases,32689,Customizer Menus: turn checkbox back to a plus sign if an item is added and deleted in the same session,,Customize,trunk,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2015-06-17T22:47:11Z,2015-06-30T01:55:53Z,"When you add a menu item, the `+` icon becomes a checkbox icon as soon as the menu item is added, but that checkbox does not turn back into a plus sign symbol if the item is then removed via quick-delete. Should it? [[Image(https://cloud.githubusercontent.com/assets/1119271/8168865/e4381f88-1373-11e5-8c31-6bda930c52a2.png)]] Example screencast: [https://cloudup.com/cqdfbxIeq9R 22s] ^Tested with WordPress 4.3-alpha-32784 and Menu Customizer plugin 0.6-20150615 on Firefox 38.0.5 on Mac OSX 10.10.3.^ /hat tip for the original report from Anthony Hortin at https://wordpress.org/support/topic/confusing-label-on-added-menu-items?replies=2 Moved from https://github.com/voldemortensen/menu-customizer/issues/117",designsimply Future Releases,32771,Customizer Menus: visual focus highlight on menu item arrows is distracting,,Customize,trunk,normal,minor,Awaiting Review,enhancement,new,close,2015-06-23T22:11:06Z,2015-06-30T01:51:57Z,"After you open and close an existing menu item, the focus stays and the arrow looks highlighted. The highlight looks distracting to me. Is there a way to keep the focus for accessibility but get rid of the visual highlight? Sighted users probably don't need it to stay highlighted like that. This is a nitpick. :) [[Image(https://cldup.com/aQFGgbkfJJ.png)]] ^Seen at http://whatisinfinity.com/wp-admin/customize.php?url=http%3A%2F%2Fwhatisinfinity.com%2Fwp-admin%2F using Chrome 43.0.2357 on Windows 7.^ Found during user testing.",designsimply Future Releases,31021,Introduce discrete capability for managing custom background and header,,Customize,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2015-01-15T07:18:54Z,2015-05-04T18:32:56Z,"As with Customizer (#28605), management of nav menus (#29213), and managing widgets (#31020), the management of the Custom Header and Custom Background currently requires `edit_theme_options` capability, a capability associated with administrators which grants the power to make many wide sweeping changes. There should be a discrete capability `manage_custom_header` and `manage_custom_background` which is inherited for anyone who has `edit_theme_options` by default.",westonruter Future Releases,18623,Allow themes to pre-register multiple custom backgrounds,,Customize,3.3,normal,minor,Future Release,feature request,new,dev-feedback,2011-09-08T21:53:35Z,2015-05-24T01:34:13Z,We currently have the ability to register multiple header images and to randomly cycle through them or allow users to select one and stick with it. Is there anything that would prevent a similar implementation for custom backgrounds?,zamoose Future Releases,20537,Don't spawn cron requests for suspended blogs,,Cron API,3.3.1,normal,normal,Future Release,defect (bug),new,dev-feedback,2012-04-24T20:40:19Z,2015-03-08T21:57:58Z," {{{ }}} For multisite, spawning cron requests is wasteful and unnecessary. wp_cron()/spawn_cron()/wp-cron.php should check the blog's status and bail if the blog is suspended.",ryan Future Releases,8923,cron timeout is too short,,Cron API,,normal,normal,Future Release,defect (bug),reopened,dev-feedback,2009-01-22T23:50:57Z,2015-01-19T08:06:09Z,"Many users have reported that 2.7 cron sometimes fails to publish future post. And it is further reported that it depends on the number of jobs on the cron queue - when the queue is too long, it will miss some. I believe this is because we set the timeout value too short: wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false)); When making a request to wp-cron.php, it won't return until all cron jobs are executed. And 0.01 is just too short time span. It doesn't hurt to give it sufficent time, such as 10 minutes. It will return as long as the mature crons are fired up and executed (in most cases, it's going to be at most a few seconds ). ",hailin Future Releases,11800,doubled execution of cron jobs,westi,Cron API,2.9.1,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-01-07T11:17:53Z,2014-10-10T05:03:20Z,"Hi, as I've already mentioned in ticket #11505 , cron-jobs occasionally get executed twice (e.g. daily backup arrives two times). I've changed the code according to the patch attachment:ticket:11505:ticket-11505-stop-gap.patch (which derives from [http://wpengineer.com/ping-problem/]) after my comment:ticket:11505:49 and had no doubles within this time period. This week I've upgraded to WP 2.9.1 and since then backups arrive two, sometimes three times, again. Looking at the changes from 2.9 to 2.9.1, I have no other explanation for this behavior. - Maybe we should consider having a closer look again on this patch attachment:ticket:11505:ticket-11505-stop-gap.patch . Greetz, Berny",neoxx Future Releases,15148,Cron Storage Abstraction,,Cron API,,normal,major,Future Release,enhancement,new,dev-feedback,2010-10-19T04:04:00Z,2015-02-10T07:40:30Z,Abstract cron storage to allow pluggable storage schemes.,ryan Future Releases,23133,Display a warning in the admin if cron tasks fail due to blocked HTTP requests,,Cron API,3.5,normal,major,Future Release,enhancement,new,dev-feedback,2013-01-07T08:33:05Z,2014-11-25T04:42:42Z,"I recently upgraded my very simple WP site to 3.5 where the following was in use: Theme: Twenty Eleven Plugins: None Activated I have been completely unable to submit a post for publishing in a future date, when the time occurs, I get a ""missed schedule"" message. The schedule entry in cron is as follows: {{{ Next due (GMT/UTC): Jan 4, 2013 @ 11:28 (1357298880) Schedule: One-off event Hook: publish_future_post Arguments: [0]: 358 }}} Increasing the timeout value in cron.php has made no difference. I will need to remain on a lower release until this is fixed or a diagnosis ""kit"" is made available. I am not using any software other that WP produced at this point and feel that the lack of wp-cron documentation and support in the public domain leaves alot of people clocking many hours googling in desperation... Make a difference in 2013 and get 3.5 development priorities to de-mystify the methods of fixing wp-cron please :o)",prb22public@… Future Releases,32656,Add hooks to allow hijacking cron implementation,rmccue,Cron API,,normal,normal,Awaiting Review,feature request,assigned,dev-feedback,2015-06-16T05:22:13Z,2015-06-19T15:05:32Z,"Right now, it's partially possible to hijack wp-cron via the `schedule_event` filter. However, there's a couple of problems with it. === Cannot Skip Default Behaviour === It's not possible to change the default behaviour of wp-cron safely. If you filter on `schedule_event` and return an empty value, the cron function (`wp_schedule_event` etc that was originally called) will return false immediately. While this ''does'' cancel the default behaviour, it causes the function to return false rather than the default `null`. In well-written plugins, this will cause them to think the event wasn't scheduled or an error occurred. === Inconsistent Usage === While `wp_schedule_event` and `wp_schedule_single_event` both call out to `schedule_event`, the other functions (`wp_reschedule_event`, `wp_unschedule_event`, `wp_clear_scheduled_hook`, `wp_next_scheduled`) don't. This means that you need to filter at a very low level (`pre_option_cron`) to be able to catch these, at which point you may be missing the data needed to work out what changed. == Proposal == I'd like to introduce a few new hooks here: * `pre_schedule_event` to run at the top of `wp_schedule_event` and `wp_schedule_single_event` * `pre_reschedule_event` to run at the top of `wp_reschedule_event` * `unschedule_event` to run at the top of `wp_unschedule_event` * `clear_scheduled_hook` to run at the top of `wp_clear_scheduled_hook` * `next_scheduled` to run at the top of `wp_next_scheduled` These would all take `false` as their first parameter/filterable value, and act in the same way as `pre_option_{$option}` -- that is, you can return a non-false value, and the function would return that immediately. This would make the entire system pluggable, and allow swapping out the pseudo-cron for a real jobs system much more easily.",rmccue Next Release,29974,Focus handle at wrong place when you click reply,jorbin,Comments,2.7,normal,normal,4.3,defect (bug),assigned,dev-feedback,2014-10-15T06:48:42Z,2015-06-28T21:56:41Z,"This looks like a WordPress issue. If you are logged in, and in any comment, you click reply, the textarea gets the focus handle. This is fine. But when you are logged out, and click reply, it again goes to the textarea. I think this should go to Name field. In desktop, this might not be a big issue but in mobile, this is a huge one. You get to the focus where you are prompted with keyboard. Once you fill in the comment and click Done, and Submit (which is usual behaviour), you get to the error page. You will have to come back, scroll to the comment and fill in the name and email again. Since the focus handle (cursor) goes to the Comment field, the Name and Email hides up in the browser view of the mobile and users will not know you have to scroll up and add those fields before you can submit without errors.",nhuja Future Releases,30909,Allow passing ID for comment_form container and title,,Comments,,normal,normal,Future Release,defect (bug),new,dev-feedback,2015-01-05T13:01:56Z,2015-06-19T19:15:56Z,"Right now, there's a `div` hardcoded with `#respond` and a `h3` hardcoded with `reply-title`. These make it hard for the comment form to be used on archive pages, as they assume the comment form is only ever output on single pages. (There are other IDs output in the form, however these are controllable through `id_form` and `id_submit`)",rmccue Future Releases,32851,Comment e-mail address of registered user not updated when user's e-mail address is changed,,Comments,,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2015-07-01T05:13:01Z,2015-07-02T17:59:18Z,"when i have register on blog and i have add 4 comment on different post. Now 2'nd day i have change my email address on my profile. now any one comment's reply is email gone my old email address which is not change after profile update on comments. i have fix this issue on one member please review it 2 link for more info. i hope u will understand me. [https://wordpress.org/support/topic/update-old-comments-with-new-registered-user-email-address?replies=6] [https://wordpress.org/support/topic/development-bump] now i have fix this bug using this one code {{{ function user_profile_update($user_id) { $commentarr = array(); global $wpdb; if( !current_user_can( 'edit_user', $user_id ) ){ return false; } if(isset($_POST['email'])): echo $email = esc_attr($_POST['email']); $wpdb->query(""UPDATE $wpdb->comments SET comment_author_email='$email' WHERE user_id=$user_id""); endif; } add_action('personal_options_update','my_profile_update', 10,2); add_action('profile_update', 'user_profile_update', 10,2); }}} ",ravipatel Future Releases,12363,Comment permalink wrong when only listing one comment type,,Comments,3.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-02-24T14:31:51Z,2014-10-08T20:22:35Z,"If you pass the `type` parameter to `wp_list_comments()` (for example, to show comments only and no pings), then comment permalinks can easily use the wrong page number as they expect there to be pings included. This is apparent after leaving a comment and WordPress attempts to redirect back to your new comment. At first I was thinking you could tell WordPress that you're filtering to a type and it could compensate when determining the page number, but then I realized perhaps it'd just be better for `wp_list_comments()` to check if there were 0 comments returned for the query and if so, see if there are any of that type of comment available. If so, then we know we're on too high of a page number and can instead display the highest existing page. Then again this introduces SEO issues. Ideas on what to do are welcome.",Viper007Bond Future Releases,24799,Default comment form title and div id attributes prevent multiple use of comment form on a page,,Comments,3.0,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2013-07-18T20:08:39Z,2013-10-07T12:59:28Z,"The current trunk implementation of the comment form will cause issues with multiple comment forms on a page due to using non-unique id attributes in the html. Most of this can be fixed using filters or parameters fed to the comment_form() function, except for the id attribute of the h3 title and the parent div. The non-unique ids of these twho html tags prevent us from reusing the comment form multiple times on a page without issues. The easiest, backwards compatible, solution seems to me is adding two optional variables to the array of parameters supplied to comment_form(). A better solution in my opinion, but which would take more time & testing, is to make sure all id attributes in the default comment form are unique by default. This can be done using the post-id (of the post on which the comment replies) in the id attribute to prepend or append the id with the unique post-id. ",BjornW Future Releases,8973,Function get_page_of_comment() returns incorrect page numbers,,Comments,2.7,normal,normal,Future Release,defect (bug),reopened,dev-feedback,2009-01-27T16:54:40Z,2012-06-17T22:37:09Z,"The function get_page_of_comment(), defined in /wp-includes/comment.php for WordPress 2.7, returns wildly incorrect results in cases where the database includes spam trackbacks or pingbacks. The reason is that the DB query on line 595 does not include ""comment_approved = 1"" and therefore incorrectly counts unapproved trackback and pingback spam (not to mention non-spam comments in moderation). As far as I can tell from browsing my DB, although spam comments have their comment_type changed to 'spam' in the database, trackbacks and pingbacks still retain their original comment_type. As a newbie to the WordPress Trac, I'm afraid I don't know how to provide a diff, but the full correct query is as follows: $oldercoms = $wpdb->get_var( $wpdb->prepare( ""SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 1 AND comment_post_ID = %d AND comment_parent = 0 AND comment_date_gmt < '%s'"" . $comtypewhere, $comment->comment_post_ID, $comment->comment_date_gmt ) ); The upshot is that without the above fix, comment URLs in several places (e.g., RSS feeds) may point to non-existent pages. All the best, Greg ",GregMulhauser Future Releases,12480,Moderated comments don't show blank links,,Comments,3.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-03-02T18:29:09Z,2014-10-09T23:48:39Z,"Comments caught in moderation won't show the blank links inserted into them unless you edit them. A comment with html code like will not show that link on the moderation page.",donncha Future Releases,10790,"No feedback given to commenter when ""Name"" field empty",,Comments,2.8.4,normal,normal,Future Release,defect (bug),new,dev-feedback,2009-09-15T17:43:44Z,2014-07-31T18:30:09Z,"On my installation, name and email are not required to post a comment. I must approve every comment before it appears. If a user chooses to give their name anyway, then after they post their comment, they get a screen that says ""Blah says:"" and below that ""Your comment is awaiting moderation."" This is expected behavior. However, if the user does not give their name, then they do not get any sort of confirmation that their comment was sent. It is sent successfully, but the user should have confirmation, otherwise they will likely try more than once before giving up in frustration. I have tested this bug using Firefox 3.0, with and without JS enabled, and Internet Explorer 6.",WK1 Future Releases,11248,Paged wp_list_comments() should always output something,,Comments,2.9,normal,normal,Future Release,defect (bug),new,dev-feedback,2009-11-24T06:00:23Z,2015-06-19T11:31:07Z,"Enable comment paging on your blog and visit `http://yourblog.com/a/single/post/comment-page-999999/`. Note no comments will be displayed. There's situations where the comment form will redirect you back to the wrong page (for example if you mess with the type parameter and exclude pings). The Walker should detect if there's no comments to be displayed on the requested page and if that's the case, then display the latest page that actually has comments.",Viper007Bond Future Releases,23939,Wrong capability check in wp_ajax_replyto_comment,,Comments,3.1,normal,normal,Future Release,defect (bug),new,dev-feedback,2013-04-04T18:39:21Z,2015-07-05T18:48:39Z,"The wp_ajax_replyto_comment function in the wp-admin/includes/ajax-actions.php checks the ""edit-post"" capability instead of the ""edit-comment"" capability. Attached a tested patch. ",fgauthier Future Releases,28314,cancel_comment_reply_link() is unflexible - respond_id & post check,,Comments,3.9.1,normal,major,Awaiting Review,defect (bug),new,dev-feedback,2014-05-20T13:03:57Z,2015-06-05T18:07:45Z,"There are two found problems with the function {{{ cancel_comment_reply_link() }}} 1. You cannot define a custom respond id like #respond-POSTID. The respond id (#respond) is hardcoded. So the anchor is not working anymore, if you use a custom respond_id in your theme. 2. If you include the comments on the blogs page (loop) you have comment areas as much as posts. Now you answer to a comment of a specific comment (for example: http://example.com/blog/?replytocom=210#respond-821). This is working fine, just that the cancel_comment_reply_link() is going active for all posts and shows a cancel message under each comment area. It should check for the specific comment area/post and return the message just for the affected comment area/post. If you want I can create a patch for this two bugs :-) Best regards, Ninos",Ninos Ego Future Releases,11566,clean_comment_cache() does not clean $GLOBALS['comment'],,Comments,2.9,normal,normal,Future Release,defect (bug),new,dev-feedback,2009-12-22T21:18:23Z,2014-10-10T03:12:22Z,"I am trying to add links to comment list, which will allow to delete comments directly without need to move them to trash first (and with trash enabled). For posts/pages I found working workaround: hook `trashed_post` and `call wp_delete_post()` again from. Unfortunately similar approach for comments does work. As I checked, `wp_trash_comment()` calls `get_comment()`. The latter function implements simple comments cache using `$GLOBALS['comment']`. When you change comment status to `trash`, `wp_set_comment_status()` clears cache by calling `clean_comment_cache()`, but it leaves that global set. As a result my workaround does not work. I think that `clean_comment_cache()` should clear that global too.",sirzooro Future Releases,13939,get_page_of_comment returns wrong page number when changing threading level,,Comments,3.0,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-06-17T07:58:01Z,2014-10-09T23:56:51Z,"Initial discussion settings: * Enable threaded comments 2 levels deep * 5 top-level comments per page, first page by default * Older comments at top of each page If I have comments on a post like: '''cpage 1''' * comment-1 * comment-2 * comment-3 * comment-4 * comment-5 * comment-6 {{{ $page = get_page_of_comment(6); // returns 1 which is the correct page }}} If I modify the initial discussion settings by disabling threading (e.g. changing the threading level to 1), the comments change to: '''cpage 1''' * comment-1 * comment-2 * comment-3 * comment-4 * comment-5 '''cpage 2''' * comment-6 {{{ $page = get_page_of_comment(6); // returns 1 which is incorrect }}} This function doesn't follow the same algorithm as what is used to display the comments This can potentially happen whenever you decrease the threading level from x to x-n",laceous Future Releases,11734,trackback_rdf() for IDN (xn--) Domains produces invalid HTML,,Comments,3.1,normal,normal,Future Release,defect (bug),new,dev-feedback,2010-01-06T01:10:55Z,2014-01-20T04:38:22Z,"Hello The trackback_rdf() function from wp-includes/comment-template.php wraps the ""
'; print_r( $columnshidden ); echo ''; } add_action('all_admin_notices', 'echo_current_user_manageedit_pagecolumnshidden'); }}} **Output for the broken tables :** {{{ Array ( [0] => cb [1] => title [2] => [3] => ) }}} ---------- After determining that `cb` & `title` were in fact added to the `$meta_value`you need to fix the table. This will do the trick: {{{ function delete_current_user_manageedit_pagecolumnshidden() { $user_id = get_current_user_id(); $meta_key = 'manageedit-pagecolumnshidden'; if( get_user_meta($user_id, $meta_key) ) delete_user_meta( $user_id, $meta_key ); } add_action ('admin_init', 'delete_current_user_manageedit_pagecolumnshidden'); }}} ''Side-Notes:'' *`columnshidden` appears [`wp_ajax_hidden_columns()`][1] & [`get_hidden_columns()`][2] *client-side functionality appears to be here in [`common.js`][3] which checks for the [hidden table headers][4] ---------- Similar issues with the screen options can be recreated for different situations that have nothing to do with the tables. **Recreate similar issue on nav-menus.php** 1. Go to http://example.com/wp-admin/nav-menus.php 2. Uncheck all the fields in the *""Show advanced menu properties""* Screen-Options tab 3. Add the screen options filter to hide them from display: `add_filter('screen_options_show_screen', 'remove_screen_options_tab');` 4. Reload http://example.com/wp-admin/nav-menus.php All of the hidden advanced menu properties will now be broken and are all visible even though they were unchecked. I'm not sure if this is the same issue, but it appears that overall screen options have a high change of not working properly ---------- ---------- **Other-Notes** These issues of broken tables might also have to do with the same functionality problem of how screen options update/render: http://wordpress.stackexchange.com/questions/31154/wp-list-table-custom-quick-edit-box-post-meta-data-missing-and-columns-change http://wordpress.stackexchange.com/questions/123182/custom-admin-column-disappearing-when-using-quick-edit?lq=1 http://wordpress.stackexchange.com/questions/144361/wordpress-admin-wp-table-list-show-incorrectly #21016 [1]: https://github.com/WordPress/WordPress/blob/448275cce483138f53ccfa586b2d28b7fe8b0785/wp-admin/includes/screen.php#L55 [2]: https://github.com/WordPress/WordPress/blob/270a57075c290736387b6551670fde34fb3f1851/wp-admin/includes/ajax-actions.php#L1307 [3]: https://github.com/WordPress/WordPress/blob/448275cce483138f53ccfa586b2d28b7fe8b0785/wp-admin/js/common.js#L29 [4]: https://github.com/WordPress/WordPress/blob/448275cce483138f53ccfa586b2d28b7fe8b0785/wp-admin/includes/screen.php#L17 [5]: http://codex.wordpress.org/Plugin_API/Filter_Reference/manage_$post_type_posts_columns",codecandid Future Releases,16345,Some submit buttons shouldn't have names,,Administration,3.1,normal,normal,Future Release,defect (bug),reopened,dev-feedback,2011-01-22T18:24:30Z,2014-01-03T19:24:40Z,"Technically a regression due to the submit_button implementation. What happens instead is the URL gets polluted. Noticed especially after we moved back to GET on a bunch of screens. In these cases, we just need the form to be sent. Don't need the context info.",nacin Future Releases,23316,Top level admin sidebar menu items with conflicting positions bury one another,,Administration,3.5.1,normal,major,Awaiting Review,defect (bug),new,dev-feedback,2013-01-29T21:07:27Z,2014-04-22T19:49:32Z,"I have now seen two separate instances where a top level admin sidebar menu item wasn't showing up when another Plugin or Theme was activated. In the most recent case, using WP 3.5.1. my Plugin was creating a top level menu item with no position specified (blank, default). When I activated my client's Theme, our Plugin sidebar item disappeared and in place came the Theme Options item. I set our Plugin to use position 70, and it came back in place of the Users top level menu item. In the earlier case, I had a custom post type that was requesting position 20. Whenever I activated Gravity Forms, my custom post type menu item was disappearing. This was with WordPress v3.5 According to the codex page: ""''WARNING: if two menu items use the same position attribute, one of the items may be overwritten so that only one item displays! Risk of conflict can be reduced by using decimal instead of integer values, e.g. 63.3 instead of 63 (Note: Use quotes in code, IE '63.3').''"" This seems like a bug to me. Why should items be allowed to completely overwrite one another? Shouldn't they just fall in line, albeit randomly when two conflict? I can see tons of problems with Themes and Plugins killing one another's top level menu items, and the user not understanding what's going on when they loose something unexpectedly.",beautomated Future Releases,27851,Underscored text overflow on hover,,Administration,3.9,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2014-04-17T06:47:46Z,2015-04-30T20:36:46Z,"[[Image(http://i.hizliresim.com/zRmaX4.png)]] As you see on image, text overflow with CSS hover. ",burakkaptan Future Releases,25048,file_exists check in menu-header.php causes issue with backend menu on an IIS server,,Administration,3.5,normal,major,Awaiting Review,defect (bug),new,dev-feedback,2013-08-15T04:00:55Z,2014-01-27T03:46:07Z,"On line 153 of menu-header.php (based on 3.6 branch), a file_exists check wreaks havok on IIS powered servers. Let's say $sub_file is either a full url to the intended page, or a admin.php page slug, both valid values for that varible. In an Apache server, the file_exists, returns false, and WordPress continues along, making the link, which works fine. On Windows IIS servers, however, the file_exists, when fails, indirectly throws a PHP warning. A good number of Windows based servers use an open_basedir restriction to prevent people from accessing areas they aren't supposed to be in. So, when the filepath inside that file_exists is outside what the user is supposed to be able to access, where the menu item would be, is a PHP warning. A suggested fix would be to make sure $sub_file is a file (ending in a .php) before running a file_exists check on it. Issue first detected in 3.5, but probably exists earlier than that (didn't check)",chriscct7 Future Releases,30300,setUserSetting js function only removes first unwanted character,,Administration,2.7,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2014-11-09T17:08:15Z,2014-12-04T14:36:26Z,"The function comments of the function setUserSetting in `wp-includes/js/utils.js` says the following: ""Both name and value must be only ASCII letters, numbers or underscore (...)"". The function removes the unwanted characters with the js `replace` function, in the current code, it only removes the first occurrence of an unwanted character. This is solved by adding the `g` modifier to the replace regex. See the attached patch. How to reproduce: * Open your browsers console while you are logged in to your WordPress installation. * Run the following command: `setUserSetting('test--', 'bad-value-')` (note that the - character is not allowed) * The console will return `""test-""` (not `""test""` as expected). * Run `getUserSetting('test-')`. * The console returns `""badvalue-""` (not `""badvalue""` as expected). * You may want to delete the setting by executing `deleteUserSetting('test-')`. ",TV productions Future Releases,25616,Add a content length filter to wp_dashboard_recent_drafts(),,Administration,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2013-10-17T01:41:34Z,2014-01-26T17:12:37Z,It would be nice to be able to change the length of the recent drafts content via a filter. The fixed value of 10 is too short for character count based users.,tenpura Future Releases,25070,Add filter to use do_accordion_sections for post metaboxes,,Administration,3.6,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2013-08-18T15:44:46Z,2013-11-13T10:19:33Z,"It'd be really cool to be able to use the new do_accordion_sections to render post metaboxes. Adding a filter to allow devs to do that, will also make easier to render custom styles (tabs or whatever). Attached patch is a really quick proof of concept. ",MZAWeb Future Releases,31696,"Better select, multi-select, and autocomplete/suggestion inputs in the admin",,Administration,4.1,normal,normal,Future Release,enhancement,new,dev-feedback,2015-03-19T16:47:15Z,2015-05-25T19:10:50Z,"I know this has been brought up before, but can't find the original ticket. That said, a few months ago Helen brought up a potential integration of the Select2 library but, due to licensing issues, we were unable to proceed with it at the time ([https://github.com/select2/select2/issues/2468 GH issue]). The licensing issue has now been resolved and, since I've been unable to find the original ticket, I'm opening a new one along with a preliminary patch to add Select2 to core. At the moment, this patch is based on a new CSS class (select2) being added to any select field that should implement the Select2 library. I've added it to the select fields on the Settings->General page as an example, but didn't want to implement it system-wide until the community had a chance to speak up RE: where does/doesn't Select2 belong, or should it actually be implemented everywhere. The language and timezone fields seemed an obvious choice given their inherent size, but things like the emoji field under Settings->Reading that have a finite number of options seem less obvious. Discuss!",section214 Future Releases,19691,Cannot modify admin messages for /wp-admin/edit.php,,Administration,3.3,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2011-12-30T02:10:01Z,2015-05-14T16:47:57Z,"The admin console messages output on line `264` of WordPress 3.3's file `/wp-admin/edit.php` are not filterable. This causes problems when added row actions need to HTTP GET from to WordPress to modify a post and then display an appropriate message complete with a revert link ''(like the ""Trash"" link does.)'' An example use-case could be for a custom post type used for both quotes and invoices where a row action might be ''""Convert Quote to Invoice""'' where you'd want a message and link displayed at the top of the admin after similar to this: - ''Quote #{$post_id} converted to Invoice. __Revert__'' Currently the only way to accomplish this is to pick hooks before and after the messages are output and use PHP's output buffering; clearly not a ''""best practice""'' approach. In order to address this I'm proposing an '''`'admin_messages'`''' filter hook to run just before the messages are output: {{{ $messages = apply_filters( 'admin_messages', $messages ); }}} However, since messages are output in numerous locations in the WordPress admin it seemed best to add the hook in every location where messages are output, which is what my patch does. Thus a hook can look at `$pagenow` or `get_current_screen()` to decide it is needs to do anything. Also while searching for places in the admin code that echo messages I found `$messages` are sometimes an array of HTML where the entire array is echoed and other times the $messages are an array with an index passed via `$_GET` and only one message will be displayed. For those cases I created another hook '''`'admin_message'`''' ''(note that this hook name is singular)'': {{{ $message = apply_filters( 'admin_message', $message, $messages, $_GET['message'] ); }}} I really only found a specific need for `/wp-admin/edit.php` today, but it seemed that it would be better for consistency if all messages were made hook filterable. That's why I created a larger patch when all my use-case needs is one new line. Looking forward to your feedback. ",mikeschinkel Future Releases,30177,Eliminate deprecated pointers,,Administration,,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-10-29T17:19:33Z,2014-10-30T04:04:26Z,"While working on #30158 @nacin suggested that we eliminate the now irrelevant pointers (anything before 3.9). Initially I followed the existing convention: blanking, but leaving, the internal pointer method. @nacin also mentioned that we should eventually removing those blanked methods and that they were only left behind because we hadn't considered the full ramifications of straight removing them. I spent a few brain cycles on exactly that these past several hours and below are my findings. **Option The First:** We can completely remove these methods with no negative impact whatsoever. Reason: The pointer class is Final and cannot be extended (so there are no inheritance concerns) and these static methods themselves are completely useless in isolation. There is no reasonable explanation for a person ever calling these methods directly, and calling remove_action() on them does not depend on their existence, either. **Option The Second:** We remove the methods and register a new `get_deprecated_pointers()` method to be used in tandem with a `__callStatic()` magic method in order to inform the fringiest fringe-case developer that they've done something abhorrently wrong (in the most polite way possible). My vote is for Option 1 because I can't fathom a world in which someone would have a productive reason to statically call one of these pointer methods in isolation. Option 2 gives us a new list to maintain fairly unnecessarily and succeeds in adding more lines of code than it removes. I've provided patches for each option so all that is left is for someone else to weigh in with their opinions. @jjj likes option 2 @aaroncampbell likes option 1",rzen Future Releases,26978,"In the admin area, the WP menu to the left links to index.php for the dashboard",,Administration,3.8,normal,normal,Awaiting Review,enhancement,new,dev-feedback,2014-01-31T18:03:48Z,2014-03-21T12:37:47Z,"It goes `