` and the specific postmeta for `_thumbnail_id` removed from postmeta and re-created on each import.
Problems with my suggestion that I've considered
* Re-importing (w|c)ould create duplicate media. As the post has to exist for post-meta to be added. Maybe using the basename function we could check for existing media, maybe it's an edge case... I think this is unlikely to be a large problem and it potentially empowers less technical users.
* Some plugins would see no benefit as they use either custom metadata keys or multiple attached images (like WooCommerce). I'd suggest this could be mitigated by adding a filter of an array of strings that on import / export treats a list of fields as keys to treat as thumbnails)
",LewisCowles
Tickets with Patches,14584,HTML entities in category and tag elements,,Export,2.1,normal,normal,,defect (bug),reopened,has-patch,2010-08-11T05:47:13Z,2020-07-06T10:53:49Z,"The script wp-admin/includes/export.php creates CDATA blocks for category and tag data which contain HTML entities. Normally, these characters should appear un-encoded in the CDATA blocks, see #4321.
I suspect this problem may have been considered at some point, but currently the line in question is commented out : http://core.trac.wordpress.org/browser/trunk/wp-admin/includes/export.php?rev=9148#L102
The solution, I think, would be to replace that comment with html_entity_decode($str) ",lavamind
Tickets Awaiting Review,37848,Form fields misaligned on export.php,,Export,5.2.1,normal,normal,Awaiting Review,enhancement,new,has-patch,2016-08-27T10:57:16Z,2019-06-17T13:54:31Z,"On the export page, all the form fields are misaligned.
Refer attached screenshots for a better view.",adhun
Tickets Awaiting Review,48180,extend export with filter for join and where clause,,Export,5.2.3,normal,normal,Awaiting Review,enhancement,new,,2019-09-30T10:29:31Z,2019-09-30T11:37:29Z,"In attachment I send a patch to add two lines for filters to change external the join and where clause to make it possible to export only the right posts.
**I hope your can take it into the core.**
Background: I have an user defined post type ""bp-blog"", which extends the default blog with buddypress group functionality. Therefor I save the buddy press group id in postmeta.
Now I want export only the ""bp-blog"" posts for a specific group. Without the filter I cannot modify the request query and all ""bp-blog"" posts are exported.
Here my usage of the the new filter:
{{{#!php
postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)"";
return $join;
}
}}}
and
{{{#!php
parent == 0 || isset( $cats[$cat->parent] ) )
$cats[$cat->term_id] = $cat;
else
$categories[] = $cat;
}
}}}
Similar to #20635 but different.",westi
Tickets Awaiting Review,52470,Exported WXR contains terms twice,,Export,,normal,normal,Awaiting Review,defect (bug),new,has-patch,2021-02-08T16:31:25Z,2023-08-04T12:32:58Z,"How to reproduce: after a fresh WordPress install (no active plugins) go make a WXR export file. If you open the WRX file you'll notice the Uncategorized appears twice: the first time as `wp:category` element, the second as a `wp:term`.
The `wp:category` comes from https://github.com/WordPress/WordPress/blob/5.6.1/wp-admin/includes/export.php#L158, the `wp:term` from https://github.com/WordPress/WordPress/blob/5.6.1/wp-admin/includes/export.php#L162-L167. With the setup described (no plugins) the only registered taxonomies are the builtin ones, therefore `$custom_taxonomies` contains an empty array. When `get_terms()` receives an empty array as the `taxonomies` param it will return all terms, of every taxonomy.
This also means that if there are other taxonomies registered the issue doesn't show up.
This is a regression: on WordPress 4.4 it doesn't happen.
A `git bisect` pointed to https://github.com/WordPress/WordPress/commit/3f7441d674d304a8ad0912831aa9685cdc8bff93 as the culprit.
The commit states that it maintains backwards compatibility, but it does not in case an empty array is passed as `taxonomy` param.",karl94
Tickets with Patches,27048,Export: Allow multiple post types to be selected,,Export,3.8,normal,normal,,enhancement,new,needs-unit-tests,2014-02-07T09:39:39Z,2022-05-18T16:49:01Z,"The export tool currently only allows for all post types to be exported, or for only one to be exported. I propose fixing this so that the selection is made via checkboxes and any number of post types can be exported. This will be beneficial in many use cases.",hlashbrooke
Tickets Awaiting Review,48366,Export valid paragraphs HTML with wpautop applied,,Export,,normal,normal,Awaiting Review,enhancement,new,,2019-10-18T12:26:13Z,2021-05-25T18:23:11Z,"WordPress exports post content mostly as is from database. It runs through `the_content_export` filter, which does not by default have any of the typical `the_content` filters added.
The most visible impact is that `wpautop()` is not applied and paragraphs have no `` tags around them.
Effectively this makes exported content corrupted for systems other than WordPress itself.
In spirit of ""own your data"" I suggest this is reconsidered, in favor of exporting valid platform-agnostic HTML markup.
From a quick look on implementation levels it seems just adding `wpautop()` might not be sufficient due to a special blocks-related logic in WP 5+ ? Or can that be ignored for export purposes?",Rarst
Unpatched Enhancements,32130,Export tool should manage users,,Export,3.1,normal,normal,,enhancement,new,,2015-04-25T10:26:12Z,2020-07-06T14:50:40Z,"I'm migrating a site from a server to another with the export/import tool.
Users are not imported but new users are created, consequently users informations (including password) are lost.
Export tool shoud export/import users as well as pages, articles, ...",jerome.martin
Tickets Awaiting Review,57166,Export theme,,Export,6.0.1,normal,normal,Awaiting Review,defect (bug),new,,2022-11-21T13:17:02Z,2022-11-21T13:17:02Z,"When I export Twenty Twenty Two from the FSE there is an error in the link to font files. The path to the files ought to point to a relative file path, but this is what I get:
{{{
{
""fontDisplay"": ""fallback"",
""fontFamily"": ""Source Serif Pro"",
""fontStretch"": ""normal"",
""fontStyle"": ""italic"",
""fontWeight"": ""200 900"",
""origin"": ""gutenberg_wp_webfonts_api"",
""provider"": ""local"",
""src"": [
""**http://localhost:8888/wpux/wp-content/themes/twentytwentytwo/**assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2""
]
}
],
}}}
",perthykjaerjensen
Unpatched Enhancements,28375,export posts/pages query,chriscct7,Export,3.1,normal,normal,,enhancement,assigned,,2014-05-27T14:11:42Z,2019-06-04T19:45:51Z,"In wp-admin/includes/export.php on line 75 the following check has been done:
{{{
if ( 'post' == $args['content'] || 'page' == $args['content'] ) {
}
}}}
This can be removed so the check can be done foreach post?
",alcowink
Tickets with Patches,29621,Export post title with markup,,Export,,normal,normal,,defect (bug),new,has-patch,2014-09-11T08:04:25Z,2019-06-04T19:46:25Z,"The Theme Unit Test data includes a post [http://wpthemetestdata.wordpress.com/2013/01/05/markup-title-with-markup/ Title With Markup]. However, the current exporter filters the post titles with `the_title_rss`, which has `strip_tags` hooked to it, so it always needs fixing up after importing.
The content and excerpt blocks of the export are uniquely filtered with `the_content_export` and `the_excerpt_export`, and **not** `the_content_rss` and `the_excerpt_rss`.
Attached is a patch which changes the exporter from using `the_title_rss` to a new `the_title_export` filter, and wraps the output in CDATA tags, as per content and export blocks.
Advantages:
* Unique filter for handling post titles during export.
* Fixes stripped tags issue.
* Filter name that is consistent with other filters in that context.
* Use of `wxr_cdata()` for consistency with other blocks of output in that context.
Disadvantage:
* Backwards-incompatibility - applying a filter to `the_title_rss` thinking it would also apply to exports would no longer work.
There are no [https://core.trac.wordpress.org/browser/trunk/tests/phpunit/tests/export un-skipped unit tests] in place for testing the exporter so I've not included any here.",GaryJ
Candidates for Closure,55764,Export of menus,,Export,,normal,normal,Awaiting Review,feature request,new,reporter-feedback,2022-05-18T09:12:39Z,2022-05-19T08:22:54Z,"It will be time saving a lot if WordPress allows export of menus.
",martiniwebb
Tickets with Patches,7813,export function does not preserve encoding,tott,Export,2.7,normal,minor,Future Release,defect (bug),new,has-patch,2008-09-30T20:07:25Z,2019-03-15T00:31:35Z,"when exporting strings are always converted to utf-8 while header and encoding is set to encoding used in blog.
this causes trouble when importing later.",tott
Tickets Needing Feedback,36818,Export filter for post meta,,Export,,normal,normal,,enhancement,new,dev-feedback,2016-05-11T20:00:14Z,2019-06-04T19:58:11Z,"It would be handy if we had a filter for modifying post meta before it is written to an export file.
Our plugin stores serialized arrays in post meta that get corrupted from time to time during the export/import process. The attached patch/filter would allow us to store the data differently in an export file to prevent that from happening. ",justinbusa
Tickets with Patches,28146,Export Filter for Post IDs,,Export,2.1,normal,normal,,enhancement,assigned,has-patch,2014-05-06T10:47:48Z,2019-06-04T19:45:46Z,"I know there is an action hook '''export_wp''' we can use to create our own export function for custom post queries.
The idea is to apply filters for the $post_ids at wp-admin\includes\export.php line 87
{{{
$post_ids = $wpdb->get_col( ""SELECT ID FROM {$wpdb->posts} $join WHERE $where"" );
}}}
to
{{{
$post_ids = apply_filters( 'export_post_ids', $wpdb->get_col( ""SELECT ID FROM {$wpdb->posts} $join WHERE $where"" ) );
}}}
so we can do custom post queries to generate the post id(s).
",zourbuth
Candidates for Closure,56907,Export Child theme produces corrupt zip file,,Export,6.0.3,normal,normal,Awaiting Review,defect (bug),new,reporter-feedback,2022-10-25T22:42:50Z,2022-10-27T02:59:48Z,"Export of a theme from the Site Editor with any year theme from WordPress including twentytwentytwo, produces a working zip file.
However if you have a child theme of any year theme from WordPress including twentytwentytwo, produces a corrupt zip file.
The error reported by ZipRepair.net is:
Your .zip file had the following issue:
End of Central Directory record could not be found.
All files were recovered from the corrupt zip by ZipRepair.net
This corrupt zip file occurs without any changes to the child theme from the parent theme and without any plugins active. Only the child functions.php and style.css exist.",meushar
Unpatched Enhancements,31084,Export capabilities should allow the current user to export their own posts,,Export,,normal,normal,,enhancement,new,,2015-01-21T09:30:53Z,2019-06-04T19:47:38Z,"Currently, exporting is restricted to users with the 'export' capability (Admins, Network Admins), which effectively locks Editors, Authors, and Contributors out of the the process. I am proposing that an implicit capability in the exporter be created whereby users without the 'export' capability can choose to export their own posts.
The functionality to select a single user's posts for exporting is already built-in for those with the capability, so there is no underlying exporter code that needs to change. Front-facing modifications would include adding a message to the Export screen for non-Admins explaining that they can only download their own posts, specifying the proper single-user form parameters by default, and a few checks on the back-end to avoid any forgery.
Functionally, this enhancement would free users to own and control their content, and may help prevent site owners from holding their contributors' content hostage.",rileypaulsen
Tickets Awaiting Review,34798,Export Bug,,Export,,normal,normal,Awaiting Review,defect (bug),new,dev-feedback,2015-11-27T05:00:43Z,2017-10-03T07:52:59Z,"
We found a bug in export process that prevents post data changes going to actual export.
In wp\wp-admin\includes\export.php L416 you select all matching posts from DB, having $posts array of stdClass objects as result. Then you call setup_postdata for every post, that goes to wp\wo-includes\query.php setup_postdata which calls $wp_query->setup_postdata after passing the $post.
In function setup_postdata L4754 you check instance of the $post which will always be stdClass and create a new $post object. It breaks the reference link original $post from export.php so all changes in function setup_postdata will not be reflected to original object.
A possible fix would be converting $post object to WP_Post before calling setup_postdata in expost.php Please see patch attached
",eugenekireev
Tickets Needing Feedback,22435,Export API,,Export,,normal,normal,Future Release,enhancement,new,dev-feedback,2012-11-13T16:41:55Z,2017-12-13T21:26:06Z,"From experience and from tickets (#19864, #19307, #17379) it's evident that we need to update the export API.
High level goals:
* To be usable from different parts of the code. From the web backend, from a CLI script, from an async job.
* To allow more control of the output format – serve over HTTP, write a single XML file to disk, split it and write many smaller XML files, write a big zip with many XML files, etc.
* To allow exporting the data without querying all the posts at once, so that we can fit the exports to memory.
* Keep {{{export_wp()}}} for backwards compatibility without the need to keep all (even any) of its code.
Here's my idea for the part of the API 99% of the developers touching export would use and be happy:
{{{
#!php
'2011-10-10', 'post_type' => 'event', … ) );
backup( $export->get_xml() ); // string
$export->export_to_xml_file( 'mom.xml' );
send_to_mom_to_import( 'mom.xml');
$export->serve_xml(); // with all the headers and stuff
$export->export_to_xml_files( '/files/exports-for-my-awesome-website/', 'export-%02d.wxr.xml', 5 * MB_IN_BYTES );
}}}
Before I dive into implementation details (in the comments, not to pollute the ticket), I'd like to hear what use cases for extending this code you have in mind and where should we draw the line. Adding more output writers? Adding custom export data? Adding formats different from WXR?
",nbachiyski
Tickets Awaiting Review,56118,Exception to escapement: Exported or imported data,,Export,,normal,major,Awaiting Review,feature request,new,needs-docs,2022-07-01T02:21:19Z,2022-07-01T02:21:19Z,"JSON data echoed for download as in https://plugins.trac.wordpress.org/browser/anrghg/tags/1.3.1/admin/includes/export.php?rev=2749921#L327 cannot be escaped using `wp_kses()`. I’m opening this ticket for documentation purposes.
`wp_kses()` calls `wp_kses_split()`, that calls `_wp_kses_split_callback()`, that calls `wp_kses_split2()` (https://docs.classicpress.net/reference/functions/_wp_kses_split_callback/). And the first thing `wp_kses_split2()` does is to “fix” the data by calling `wp_kses_stripslashes()`, that strips backslashes from in front of double quotes (https://docs.classicpress.net/reference/functions/wp_kses_split2/ and https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/) and thus breaks JSON.
Anyway, cxported data is expected to truly mirror the existing data, so there seems to be no way to escape anything here when echoing for download.
The same holds true when importing data as in https://plugins.trac.wordpress.org/browser/anrghg/tags/1.3.1/admin/includes/import.php?rev=2749921#L362
For PHPCS, such instances need to be whitelisted and I’m held accountable for linking to relevant documentation acknowledging the exceptions.",anrghg
Tickets Awaiting Review,59716,Deprecated messages exporting post meta with meta_value null from PHP 8.1,,Export,,normal,normal,Awaiting Review,defect (bug),new,,2023-10-24T13:55:00Z,2023-10-30T18:20:11Z,"Today I attempted to export some products from one database to import into another.
I encountered several Deprecated messages emanating from code within `wxr_cdata()`
It appears that the export code doesn't specifically cater for meta data with null values.
Prior to PHP 8.1 the null values were treated as empty strings.
There are several plugins that are ''guilty'' of producing post meta data containing nulls. Two of them are in the top 12 plugins by total downloads: All-In-One-SEO-Pack and WooCommerce.
=== Actual output
Here's the exported post meta for WooCommerce's `_stock` field.
{{{
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in C:\apache\htdocs\gardenvista\wp-includes\formatting.php on line 885
Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in C:\apache\htdocs\gardenvista\wp-admin\includes\export.php on line 207
}}}
Both of these Deprecated messages can be avoided by a simple change as the first line of `wxr_cdata()`
{{{
if ( null === $str ) {
$str = '';
}
}}}
=== Expected output:
- The export should complete without producing the Deprecated message output in the post meta value.
- Null values should continue to be treated as empty strings
=== Environment:
- PHP 8.1.23 or PHP 8.2.10
- WordPress 6.4-RC1
- Plugins: WooCommerce and/or All-In-One-SEO
",bobbingwide
Tickets Awaiting Review,60545,Default XML exporter is failing to export block templates.,,Export,6.4.3,normal,major,Awaiting Review,defect (bug),assigned,has-patch,2024-02-15T05:31:05Z,2024-02-15T05:33:48Z,"When attempting to export XML through the **""Tools > Exports""** menu with the selection **""Choose what to export > All,""** the process does not include the export of created templates.
",heymehedi
Tickets Awaiting Review,57451,Cross Site Request Forgery on Admin of any wordpress site to export files,,Export,,normal,minor,Awaiting Review,defect (bug),new,,2023-01-12T13:13:23Z,2023-03-20T04:34:24Z,"[Marked as No Impact By WordPress Hackerone Team]
Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they’re currently authenticated. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker’s choosing
Steps To Reproduce:
1. Login to WordPress Backend as an Admin
2. Go-to Tools > Export > Select what to export
3. Select the Data you want to export. Capture this request using a web-proxy like BurpSuite
4. Since this is a GET request, Copy the URL to which request is made.
5. Send this URL to another admin or user with equal rights.
6. When he clicks on the URL, he shall download the file automatically.
The endpoint vulnerable:
`http:///wp-admin/export.php?download=true&content=all&cat=0&post_author=2&post_start_date=0&post_end_date=0&post_status=0&page_author=0&page_start_date=0&page_end_date=0&page_status=0&attachment_start_date=0&attachment_end_date=0&submit=Download+Export+File`
Recommendations
Enforce CSRF protection like wpNonce Token for file export endpoint.
Impact
Unauthorised File Download on an administrator's PC
An attacker can write a script which sends 100s of GET requests at once to the endpoint, and share the script to another user, and when he downloads 100 files at once, it shall also consume his disk space",f41z4n
Tickets with Patches,43978,Avoid flickering on the Tools / Export page,birgire,Export,,normal,normal,Future Release,defect (bug),assigned,has-patch,2018-05-05T20:15:13Z,2020-02-20T16:03:49Z,"The export filters are hidden by default on the Tools / Export page.
But it's only hidden with Javascript in {{{wp-admin/export.php}}}:
{{{
jQuery(document).ready(function($){
var form = $('#export-filters'),
filters = form.find('.export-filters');
filters.hide();
}}}
The filters can therefore be visible for a short time, before they are hidden.
Here the {{{filters.hide()}}} will add a {{{display:none;}}} inline styling to the corresponding filters.
We can avoid this flickering with CSS, something like:
{{{
#export-filters .export-filters {
display: none;
}
}}}
",birgire
Unpatched Enhancements,33461,Allow filtering of meta_value in exporter,,Export,,normal,normal,,enhancement,new,,2015-08-20T08:46:22Z,2020-07-02T15:50:40Z,"Hi,
There are some filters in the exporter code that allow developers to modify the exported XML data
according to their needs. One filter that is missing is the ability to filter the
{{{
meta_value
}}}
field. This can be very helpful ie. to filter out urls or any other data that's being stored there. I'm attaching a patch to be applied to the core.
",newkind
Tickets Needing Feedback,55762,All export xml files have same name,,Export,,normal,normal,Future Release,enhancement,new,dev-feedback,2022-05-18T09:09:58Z,2022-06-07T14:38:53Z,"All download export files, whether posts or pages give the same file name. Its difficult to manage if you have several of them because unlike a picture or a word file that you can open and see the contents, a user cannot see the content of the xml file until they upload into a WordPress panel. Loading the wrong file means one needs to clean up and then go back to look for the right file. I suggest each xml download from the Export panel bear the unique name of the file. ",martiniwebb
Tickets Awaiting Review,32433,Add registered image sizes in WXR export file,,Export,,normal,normal,Awaiting Review,defect (bug),new,has-patch,2015-05-18T21:26:41Z,2018-07-17T08:15:01Z,"When a WordPress site is exported, attachments are also exported (though only the original image url). If a user then imports that into a new WordPress install, images will be generated for all registered image sizes on the new blog.
If however, the exported site was running different image sizes, it will potentially have references to those images in post content (e.g. `image-322x422.png`); however, `322x422` is not a registered image size on the new site. This will produce 404 images in the new post content.
This was acknowledged (though I don't think addressed) in #16984:
> A problem that might arise is if there are different image size settings on the export and import sites. So an exported post might contain an image img-200x200.jpg but the import site hasn't generated the appropriate size. For the first patch I'm ignoring this and saying that it's up to the user to ensure the settings are consistent. Potential future fixes include importing options or generating the extra sizes on the fly
The user will typically not have control over image sizes either way (as they have to be registered in code) - also the recipient of a WXR file does not know the image sizes on the exported site.
It therefore seems logical to include image sizes somewhere in the WXR file, so importers (the WordPress importer or otherwise) know what image sizes to generate for all existing attachments.",joehoyle
Tickets Awaiting Review,39298,Add filters for the exporter,,Export,,normal,normal,Awaiting Review,enhancement,new,,2016-12-15T15:25:36Z,2019-03-15T01:06:47Z,"I think being able to enhance the exporter with plugins would be very helpful. If there was a filter for the export options where custom export queries could be made to possibly return the $post_ids to be exported I think that would be a great addition because I recently had to edit the core export file to build a custom export query. I noticed one plugin attempted this but resorted to completely replacing the export.php file.
",stormrockwell
Tickets Needing Feedback,34414,Add extra item fields to exported WXR file,,Export,4.4,normal,normal,Future Release,feature request,new,close,2015-10-23T12:01:43Z,2022-07-15T16:24:54Z,"Hello
I am one of WPML developers. WPML is plugin which allows user to make multilingual sites, set language information to posts etc.
Straight to the point: we want to make it available to add to exported posts/pages an information about their language. Language information is stored in our own tables, so we cannot use existing WXR - elements like those for taxonomies or custom fields.
It would be perfect if before closing
tag would be executed hookable action which will echo those additional elements, coming from plugins such our.
I am attaching proposed patch.
Example of usage:
{{{
add_action('wxr_export_item_extra_fields', 'here_wxr_export_item_extra_fields');
function here_wxr_export_item_extra_fields($post) {
echo """";
}
}}}
",kkarpieszuk
Unpatched Enhancements,19864,Abstract export_wp() for use by CLI scripts,,Export,3.3.1,normal,normal,,enhancement,reopened,,2012-01-20T18:16:17Z,2019-06-04T19:43:40Z,"Need to be able to execute an export from the PHP CLI for the purpose of running cron / maintenance scripts that write out exports.
This would include writing additional hooks that allow the arguments to be pulled from the cli as well as hooks that allow the output to redirected from the output buffer to a file.
Related ticket: #19863, extra hooks for manipulating content and arguments of an export",scottconnerly
Unpatched Bugs,35927,_wp_attachment_metadata meta_value wrong type in export,,Export,4.4.2,normal,normal,,defect (bug),new,dev-feedback,2016-02-23T20:50:59Z,2019-10-24T06:06:09Z,"this if from an export using wp 4.4.2, the particular post is from Dec 2010.
{{{
}}}
every width and height value is a string but should be an int!
{{{
s:5:""width"";s:3:""150"";s:6:""height"";s:3:""150"";
}}}
should be
{{{
s:5:""width"";i:150;s:6:""height"";i:150;
}}}
if i edit it manually, the import works.
could you provide database migration or something in the next update to fix the values?
this don't happen with newer articles.",davidak
Tickets Awaiting Review,50013,"[Feature Request] Tools: Export: Post, Categories: All - but exclude these",,Export,,normal,normal,Awaiting Review,feature request,new,,2020-04-26T09:22:54Z,2020-04-26T09:22:54Z,"When exporting Posts, you can select which post categories you want to export. My FR is about a inverse selection - export all but the selected categories. Means having category A, B, C, D, I want to export all but A.
This could be made with an additional checkmark defining it is a inverse selection.",mmattel01
Tickets Awaiting Review,30170,"""Start Date""/""End Date"" are confusing in the exporter",,Export,,normal,normal,Awaiting Review,enhancement,new,has-patch,2014-10-29T11:40:47Z,2017-07-22T04:03:42Z,"I've been running a lot of post exports lately, and for some reason I'm constantly screwing up ""Start Date"" vs ""End Date"" when selecting an export range.
The ''right'' way is Start Date == Older Date, and End Date == Newer Date. But, because my memory is pathetic (at best), I constantly forget this and end up downloading empty exports.
I think there are a few potential fixes:
1) Change the wording, to something like ""Start Date (Older)"" and ""End Date (Newer)"", or different text entirely
2) Use some JS to alert the user/prevent the download if they chose a more recent month as the Start Date
3) Try to guess the user's intentions and download the export even if they screw up the order
(Or perhaps some combination of the three.)",chrisvanpatten