WordPress Plugin: Mass Page Maker

As of February 24, 2013, there is a new version of this plugin that I will be updating. Called Mass Page Maker Pro, it has new features like a customizable CSV format and improved web UI, but costs money.

This older, free version will continue to be available. If you’ve gotten any value from the plugin before, please consider purchasing the full version to get all future updates.

UPDATE — March 19, 2013
After a conversation with the WordPress plugin repository staff, it looks like the updated free version of this plugin will not be listed in the directory, making this the only place to download it. I will continue to provide the last free full featured version for download, but cannot support it.

Ever had the need to create multiple pages or posts and dreaded the idea of doing it manually?

Mass Page Maker is an admin panel that gives you the ability to create as many pages or posts as you like in a matter of seconds. It can create posts and pages that are customized with every aspect of a regular WordPress page.

It is a more human-readable way for users to insert new posts, compared to the native WordPress XML importer.

If you need to import data to WordPress and it seems like this plugin can almost do the job, send me an email with what how you’d like the plugin to be different. I can work with you to develop a customized version, but I must change for the service: $25/hour with a minimum charge of $50.

Tested most recently with WordPress 3.3.1. Please send feedback via the contact page or post a comment.

Table of Contents


Mass Page Maker is compatible with WordPress’ locale system. If you are interested in translating for your locale, please comment below or email w [at] wesg [dot] ca. If you’re particularly ambitious, translate the .PO file in the plugin download and send back to that address.
Current Translations

Thanks for helping to translate!

Download v2.7 of Mass Page Maker


  • Fill out the fields in the admin panel according to what your needs are. If you include [+], the plugin automatically inserts the incremented data.
  • As of version 2.7, the web interface inserts posts with the same data. If you want unique pages, please use a CSV file.
  • Entering a post date in the future will result in the post being published at that time.
  • Use a CSV (comma separated value) file to insert a large number of customized pages.
  • The plugin can handle nearly all the regular WordPress options.

If the name of your post is New Page [+] and you want 5 pages written, the resulting pages will be

New Page 1
New Page 2
New Page 3
New Page 4
New Page 5

Custom fields example:
To add two new fields to your new posts, use semicolons.

phone; address --> 123 456 7890; 123 fake st

This results in each new post having both of those fields associated with it.

Using CSV files

The plugin supports importing CSV files to add multiple posts very quickly. While being more powerful when entering pages, it is also more complicated. You must follow a specific format when building files.

Please view the sample file before adding your own. Be advised that while the sample file will work, it contains mostly irrelevant data to a blog.

The CSV file must have exactly 15 columns. Any columns that aren’t used must be included, but kept blank (ie. “”).

When using Excel to create CSV files, be sure to check the use of quotation marks before uploading the file to the plugin. Excel has a tendency to get confused when fields of text use quotation marks inside.

Format to follow
Each line in a CSV file follows a pattern separated by commas that turns the file into a makeshift database. The MPM CSV follows this pattern:

  • Page title
    Regular post title value
  • Page publishing date (in the timezone of your WordPress installation)
    Must follow the format YYYY-MM-DD HH:MM:SS. The seconds are optional. The plugin will verify the format before inserting the file.
  • Post content (commas and quotation marks must be escaped using the \\ character)
    Escape the quotations and apostrophes with the backslash character.
  • Post excerpt (same restrictions as content)
  • Post category
    The category title.
  • Post parent
    The page ID of the parent post (only valid on pages). Default should be 0.
  • Page template
    The PHP file in your template directory you want to use (ie. contact.php). “Default” is the default template.
  • Post status
    One of the following list: publish, draft, private.
  • Post type
    Either post or page.
  • Comment status
    Open or closed.
  • Ping status
    Open or closed.
  • Custom key
    Post meta field (doesn’t have to previously exist). Separate different fields with semicolons — be sure to surround the field in quotations (ie. “field 1; field 2”) Can be empty.
  • Custom key value
    Corresponding post meta value. Separate different values with semicolons (ie. “value 1; value 2”) Can be empty.
  • Tags
    Enter tags separated by commas Can be empty.
  • Post password
    The post password Can be empty.

Escaping characters
To clarify some of the questions coming in, here is an overview of how to escape characters when using CSV. Inside the sample file, you’ll note that fields are either surrounded by quotation marks or not. When fields are surrounded by quotation marks, any extra quotation marks inside the text must be escaped (ex.1) and when there are no quotation marks, all commas need to be escaped (ex.2). The latest version of the plugin appears to import Excel .CSV files correctly, so that is a good way to format everything correctly. Be sure that lines are deleted, and not only blank (otherwise they include useless lines).

, “Sample field with \” inside the text”, , Sample field\, with comma escaped,
, “Sample field with improper ” inside the text”, , Sample field, with comma improperly escaped,

Caution: This plugin is extremely powerful. A slip of the mouse can cause your blog to insert many more pages than you intended, which can take a lot of time to delete. Read the options carefully before inserting pages.


  1. Copy the folder mass-page-maker to your WordPress plugin folder (usually wp-content/plugins).
  2. Open the WordPress Admin Panel and activate the plugin.
  3. Navigate to your Option panel, where you will see the plugin’s interface.


What is the purpose of this plugin?
Mass Page Maker automates the task of making pages or posts that are similar to each other. This can be a very time consuming process that can now be done in a matter of seconds.

What options are available?
In the interface panel, you have the ability to customize the page insertion.
You can change:

  • Number of pages
  • Starting number of page
  • Post/Page title
  • Post/Page content
  • Post/Page status (published or draft)
  • Post/Page type
  • Post/Page category
  • Page parents
  • Page excerpts
  • Specific page dates
  • Time interval between pages
  • Page template
  • Page visibility/password

How many pages can I enter at once?
This will depend on the hardware of your server and your patience. Using a modest development server, I have been able to insert 2500+ pages in around 1 minute.


Click for a larger view.


v2.7 — March 10, 2012
* Major overhaul for WP 3.3.1
* Uses WordPress native functions
* Provides immediate progress feedback during CSV import

v2.6.7 — July 19, 2010
* Rewritten for WP 3.0
* Improved the reliability of the CSV and web interface
* Fixed tags in CSVs

v2.6.6 — December 17, 2009
* Added support for page orders
* Improved handling of escaped characters in CSV and web interface
* Various other bug fixes

v2.6.4 — August 20, 2009
* Repaired category support

v2.6.3 — August 10, 2009
* Cleaned page insertion problem
* Repaired template issues

v2.6.2 — August 9, 2009
* Fixed quotation handling

v2.6.1 — August 9, 2009
* Improved quotation handling
* Added page visibility options

v2.6 — July 23, 2009
* Fixed WP 2.8.x compatibility

v2.5.9 — July 22, 2009
* Added troubleshooting information

v2.5.8 — June 28, 2009
* Improved support for WP 2.8
* Added tag support
* Better compatibility with CSV files

v2.5.7 — May 17, 2009
* Added better compatibility and feedback with CSV files

v2.5.6 — April 30, 2009
* Added placeholder support
* Added better troubleshooting feedback for CSV files

v.2.5.5 — April 6, 2009
* fixed increment tag in page content and excerpt

v2.5.4 — March 21, 2009
* Made custom field work in each way
* Add German translation

v2.5.3 — March 18, 2009
* Added custom field support

v2.5.2 — March 15, 2009
* Finally fixed future posting cron errors

v2.5.1 — March 14, 2009
* Corrected some type wrong in v2.5

v2.5 — March 14, 2009
* Corrected cron behaviour with future posts
* Added page template option
* Add CSV file imports

v2.1 — February 8, 2009
* fixed what should have worked in 2.0

v2.0 — February 6, 2009
* Overhauled date and time system
* Added page excerpt data
* Added ability to insert posts in the future or the past

v1.5 — January 18, 2009
* Added ability to create pages with different content

v1.5 — January 18, 2009
* Added ability to create pages with different content

v1.4 — January 6, 2009
* Updated for WordPress 2.7
* Completed localization capability

v1.3 — November 1, 2008
* Enabled page parents
* Made the plugin compatible with WordPress internationalization

v1.2 — September 2, 2008
* Enabled adding categories to posts
* Optimized code

v1.1.1 — July 28, 2008
* Cleaned up code and readme file

v1.1 — June 19, 2008
* Added support for multiple page titles
* Built fault tolerance in
* Added new ways to enter pages faster
* Posts and pages can how have comments and pings that are open or closed

v1.0 –– June 18, 2008
* Initial release

View all plugins

For those looking for a solution to proper Excel usage with the CSV feature, Adam, of http://beernews.org/ offers this suggestion:

For any people using only Excel to alter CSV files and get errors when uploading, I think I have your fix.

1) Download the original CSV sample file here and right-click to open the file w/ notepad. Keep it open.

2) Right-click the sample again but open with Excel. Save in Excel. Right-click to open w/ Notepad again. See a difference (i.e. extra quotations all over the place?)

3) Excel puts double quotations around cells (aka fields) where there is a quotation by default but there is a workaround. Go to http://www.mcgimpsey.com/excel/textfiles.html

4) Scroll down to the heading ‘Text files with no modification’ and copy that code underneath.

5) Open that sample csv file back up in Excel

6) Click on Visual Basic Editor in Excel (I think you need to click on Macros in 2003 version or Developer tab in 2007 version)

7) Right-click sheet 1, click on insert module and paste the big code into the large white text box that opens up.

8) Click back to Excel view and click Run Macro. Choose the one that says ‘Text no modification’ and click run.

9) Check the directory on your local machine where you saved the sample file and look for test.txt. Open in notepad, save the file as a CSV file. But do you notice there are no more double quotes everywhere??

10) Upload new CSV file…seems like a pain, but this honestly takes about 2 minutes to do once you’ve learned it. 30 min learning curve.

Tagged with: , , ,
281 comments on “WordPress Plugin: Mass Page Maker
  1. grow taller says:

    It’s a cool plugin, love it!

  2. aos says:

    Hello! I like this script a lot- but there is a problem for me,

    the category never applies to the posts. I select the category i want from the dropdown menu, and it says that all the posts have been added, but they all go straight to the “uncategorized” category- then I have to manually set them to the right category(which takes a long time!). Please try to fix this issue, or tell me what i’m doing wrong. I appreciate it a lot! Thanks 🙂

  3. wesg says:

    @aos: Thank you for the comment. I have found the problem, and will be issuing an update shortly.

  4. William says:

    I am using WP 2.8.4 and your mass page plugin 2.6.4.

    The first time I used it yesterday it worked fine. Today when I used it all the pages had a date of December 31, 1969.

    Any ideas of what could be causing the glitch. It does not matter is I use a past, present or future date. Results are the same. When I go to edit one of the posts. It shows todays date and time but on entering the edit fields it shows the bad date.

    If I use quick edit it shows the bad date. I love what your plugin can do. I just have this one problem now.

  5. Keith says:

    I tried using the CSV creator and I get the “There was a problem adding the posts. An email has been sent” error. No email is ever recieved. What is the issue do you think?

    Here is what was created;

    "Anchorage", 2009-09-07 00:00:00:00, "[phpbay],, “6723”, “”, “35220|100”[/phpbay]", "", uncategorized, Alaska, default, publish, page, open, open, "", "", "ATV for sale in Anchorage Alaska", "

  6. Akira says:

    Hi Wesg!

    Thank you x 100000 for such a great plugin! it’s the only of its kind and a great help!

    Although I have an issue.
    I am making a page for 900 pictures of a children’s art contest, and was wondering the following:

    1. can the be used in the custom fields?
    each custom field for the posts would need a different image link in this page.

    2. I can’t seem to make the csv recognize an html code showing the picture of the kid.
    is there a sample csv that I can see putting an html code in it?
    I tried putting the / mark before each” but not working.

    Here’s the page I am working on

    Thank you for your great work and sorry to bother you with such a question from a noob.

  7. Akira says:

    oops seems that the [italic HTML] wasn’t read on my question no.1

    1. can the [italic HTML] be used in the custom fields?
    each custom field for the posts would need a different image link in this page.

  8. wesg says:

    I took your text, and have edited it to work with the latest version. The only problem was that you did not escape the quotations in the content section.

    "Anchorage", 2009-09-07 00:00:00:00, "[phpbay], \"6723\", \"\", \"35220|100\"[/phpbay]", "", uncategorized, none, default, publish, page, open, open, "", "", "ATV for sale in Anchorage Alaska", ""

  9. GT says:

    Using a CSV file with columns exactly as follows, I get “The page parent is in an incorrect form. Check line 2”

    Line 2 is

    WorkbenchS, 2009-09-13 18:57:35, “”, “”, “”, Stocks, “Full Width”, publish, page, open, open, “”, “”, “”, “”

    As you can see, item 6 is Stocks, and Stocks exists. I can enter the stupid thing (a page called “WorkbenchS” under Stocks) by hand.

    At the end of the day, unless you’re adding a hundred pages, the plugin is a waste of time. I could have added the 30 I need (nested under 4 primary heading, and with a depth of 3) through the Pages tab faster than with the plugin.

    Cheers, but ‘delete’.


  10. wesg says:

    @GT: Thanks for your opinion. As mentioned in the CSV description, the page parent field is the Page ID, not the title (I may look at adding that feature in the future). That is why you saw the incorrect format error.

  11. Ryan says:

    Hello, great plugin, I’ve been using it for months without any issues. However since the latest update I have not been able to use the CSV uploader. I continue to get the following error –
    Fatal error: Cannot use object of type WP_Error as array in [file location] on line 264.

    Any idea what is keeping this from working now?


  12. Ryan says:

    Hi, I was trying different things with the plugin and for some reason I was able to get this to work when I create the CSV and set the page type option to a Page instead of a Post.

    I went back and changed that option to a post and received that same error. I also tried using your sample file and I received the same error when loading the sample as a post but changing that to a page allowed me to create the page.


  13. Sam says:

    I’ve used the plugin to create about 5000 pages. Works great except now I cannot access the Pages section in order to edit individual pages. This is clearly related to the number of pages in the site but I do not know how to fix it. I can get to other areas but as soon as I need to pull up the pages to view or edit, I get a 500 Internal Server error. Help!!

  14. Sam says:

    Sorry, typo. Actually have about 18,000 pages. Loaded them in 5000 page blocks

  15. sam says:

    I’d like to insert a lot of data into the Content field. What is the max number of characters?

    Being able to put html, rss feeds, etc… would be great.

  16. Elena says:

    A first – a very uswfull plugin – thanks !
    One question: Can i use WP-Code (post_title) in the content area?

    Thanks in advance ….

  17. Wes, thanks for the latest update, at least the csv import is working at a basic level. I was wondering how to add a post when I want to have it be a part of a parent and a child category ?

    I tried “Parent\, Child” and “Parent\,Child” to no avail….

  18. gyi tsakalakis says:


    Having same problem with posts. Did you ever resolve?


  19. gyi tsakalakis says:


    Having same problem with thousands of pages. Did you solve this?


  20. Chris says:

    Wesg. Great Plugin! However, when posting an img tag the escape doesnt work – ie This doesn’t work??? Any ideas?

  21. Rasmus says:

    A very handy plugin – very useful.
    The documentation does not however show how you insert a unique url to each page. How is this handled?

  22. Sx says:

    The pages added through mass page maker is showing up “Not found”?

  23. damn says:

    Damn, I was looking so forward to using this! I got the information to import; however, when I look at the page I get a 404 error. Looking at the page posts in admin, everything looks fine and if I press the update button without making any changes then the page will work, so I hope that really narrows down finding the problem. Thanks!

  24. wesg says:

    Thank you everyone for the comments. I will be looking at each of the issues for the next version. Right now I have other things to work on, but will release an update as soon as I have time.

  25. Cole says:

    What a great plugin. I am running into two problems with WP 2.8.6. Using the copy/paste method (not CSV), the page is created but I get this error

    “There was a problem updating the category counts.”

    It’s also isn’t adding the custom fields I specify.

  26. This is clearly related to the number of pages in the site but I do not know how to fix it. I can get to other areas but as soon as I need to pull up the pages to view or edit, I get a 500 Internal Server error. Help!!

  27. TheToolWiz says:

    This is a great tool. But I find myself frequently needing to basically copy groups of pages from one WP site to others.

    Any chance you can come up with a way to import the XML data that WP itself exports? Or come up with a way to export pages in a WP installation as .CSV files?

  28. Achim says:

    I have the same problem as Cole with WP 2.86: “There was a problem updating the category counts.”

    Custom fields and template are not added.

  29. wesg says:

    As mentioned in my previous comment, I will be looking in depth at all of these issues when I have some time in the coming weeks. School exams, you see.

  30. Trunkneck says:

    If this works for me you will be getting a small $50.oo X-Mass present from me. Thank you for all your effort.

  31. wesg says:

    @Trunkneck: If it doesn’t work, I”ll help you fix it 😀

  32. Paneg says:

    Importing Your sample csv file returns this error on WP 2.8.6:
    The csv file is not properly formatted or has nonescaped characters. Check line 1. 43 columns

  33. Jim says:

    Great support by deleting my question to the bug. Thank you!

  34. Bjørn says:

    Thansk for the plugin – tripled my site performance

  35. I’ve just found your AWESOME plugin. Thank you, from the bottom of my heart! Donation coming!

    I’m also getting the “problem updating the category counts” as the above posters, but I think I know why…at least in my case.

    In my testing I’ve been adding 3 pages through the admin area (not csv). When filling out the fields, I am NOT choosing a “Page Category” because I am adding pages, not posts and the dropdown is listing post categories which of course, do not apply to pages.

    When I do this, I get the error and my pages are still added. If I choose a category here, the error goes away and my pages are still added.

  36. wesg says:

    @Adam W. Warner: Thank you for your comment. This week I’m looking at improving fault tolerance of the plugin and making changes that users have requested. You should see a new version in the coming days.

  37. Hagan says:

    “RestaurantName: Plate 1”,2009-01-01 11:30:00,”TEXT RESTAURANT ADDRESSADDRESS PHONE “,””,93 Plates,none,default,draft,post,open,open,””,””,”NYC\, review\,restaurant\, foodie, New York\, food”””

    I have been working on this one all morning and don’t know why it isn’t working. I feel like I escaped everyting properly. it either gives me a “not formatted properly” or a “the post status can be public, draft etc”

    And my post isn’t spam . . .

  38. Bjarne says:

    Where can i donate?

  39. wesg says:

    @Bjarne: There is a PayPal button in the plugin admin panel, and on this webpage. The direct link to the position is http://www.wesg.ca/2008/06/wordpress-plugin-mass-page-maker/#donations

  40. Wade says:


    Thank you so much for this. I just have one question. I would like to insert the individual page title into each page. I was wondering if there was a way to do this sort of like you can by putting in [blog_title]?

    Is there a place holder for the post title?

    I would like to do it so if I had a pages called X; X1; X2 . . .

    I could have the content on the pages say something like

    “Information on X”

    “Information on X1”

    “Information on X2”

    And just have the page title inserted into the content automatically?

    Is there any way to do this?

    Thank you so much!

    Walk Slow


  41. wesg says:

    @Wade: At present, this feature is not included. I will look into it, and try to have an updated version out later today. Thanks for the comment!

  42. matthew says:

    Just to clarify, when using a CSV file, you say to separate tags with commas. I assume that these must also be escaped \, just as commas with content. That should probably be mentioned explicitly in the instructions.

  43. matthew says:

    Fantastic plugin. Great time saver.
    It works with WP 2.9.1

    When importing via .csv …

    It seems like staus, type, ping and comment need to be lowercase, though the instructions above show options listed in uppercase.

    Page parent should be id number without quotes or “none” in quotes … cannot be empty.


  44. wesg says:

    @matthew: thank you for the comments about usage. I will update the plugin and documentation to use both upper and lowercase text.

  45. I am able to successfully import multiple posts via .csv. I see that it is possible to tell it to use a specifice post template when importing. This would be similar to using a Page template.

    I have tried entering the name of my post template in the page template column of the csv but it doesn’t seem to work. I am entering it as template.php. Is your plugin looking for the template file to be in a specific location?

    Thanks in advance for any assistance.

  46. Wesg I was looking for a solution of this style. But I never thought to find “something so perfect”.

    I’m turn around on how to upload a specific image or document attached to each post or page ID (media library)

  47. Kevin McGillivray says:

    Hi, all. I saw a few people mention 404 errors after uploading content via this plugin. I had the same problem and was unable to get any of my uploaded pages to publish without opening and resaving them. The problem was highly reproducible and was a pain considering I had over 100 pages to create. I’m running the latest plugin on WordPress 2.9.2.

    So, I saw the references to cron up above and starting looking at how to solve my problem. In the end, here’s what you can try:

    1) Create the upload file as described above.
    2) Date your records/pages with past dates
    3) Date the LAST record in the upload file with a date in the future. Preferably about 10 minutes in the future so you have long enough to complete the upload but don’t have to wait forever to continue.
    4) Upload the file as described above. You’ll notice the articles appear in WP Admin and that the last post is marked “Scheduled”.
    5) Wait until 10 minutes have passed.
    6) Browse the HOME PAGE of your site. I think this causes WP cron to run.
    7) The pages should show up in the menu (if they weren’t already there) and you should be able to browse them without a 404 error.
    8) If you get a 404 error, check the article that was schedule for future publication. It might say “Missed Schedule” next to it. If so, browse http://www.yourdomain.com/wp-cron.asp then go back to the page that was giving you the 404. The pages should work now.

    In my case, I had it happen both ways. Once I had to browse wp-cron the other time not; but in both cases, the pages would 404 immediately after upload.

    I hope this helps save some other poor sucker the hours I’ve spent chasing this issue down. 🙂

    Have a good one!

    P.S. @wesg This plugin rocks (or at least it should). I started looking at it because inserting pages directly into the database using SQL wasn’t working. I was having the same problem where pages showed in the menu but gave me a 404. There must be something that WordPress is doing to the data when it’s saved that we don’t know about. At least it wasn’t obvious to me. Hope this info helps you with future updates. Thanks!

  48. bosshawk says:

    This is great. I will definitely give it a try. Seems like it has everything but the Thumbnail feature in WordPress 2.9? I have thumbnails uploaded to Media Library. How do I set thumbnail to each post using this plugin? I will definitely donate if you can solve this. Thank you.

  49. wesg says:

    @Kevin McGillavray: Thanks for the valuable information! I’ve heard many comments about this problem, and would like to solve it. Could you provide some more information about how you recreated the error? The more info I can get, the easier it will be to fix. Email anything to w [at] wesg [dot] ca. Thanks!

  50. Kevin McGillivray says:

    @wesg: The problem was very easy to reproduce. I just followed your instructions with your sample data on a vanilla WP 2.9. installation. If you’re not able to reproduce it, let me know and I’ll run through it again.

    The truth is, though, I had to scrap plans to use your plugin in the middle of the night last night. What I found was that it was truncating the content of the posts and roughing up the formatting in some weird ways like stripping escape characters out of carriage return/new line commands. I didn’t have time to diagnose the formatting and it was only loading about 150-200 words, not the entire 500-700 words in the pages. So, I had to drop it. It’s a shame because this looked like exactly what I needed.