CSV to html


CSV to html makes it easy to fetch content from file(s) (.csv,.xlsx, .json and .ods) and put content from that file/those files and display the html(table) on a page with a single shortcode that contains a lot of settings. If using more then one file, content from all files are mixed into one single table instead of creating two tables.

The plugin fetches the actual content directly from the file(s) without having to import/export any file(s) manually. So any changes in the file(s) will be updated when you view your table(s). CSV to HTML is able to fetch both local and external files.

Get started with the plugin by moving on to the Installation tab. There’s a 4 step guide how you could start using the plugin. Good luck!


  • Screenshot - file structure with folder nordic in upload-folder
  • Screenshot - [csvtohtml_create path="nordic" source_files="denmark" source_type="guess" debug_mode="no"] OR [csvtohtml_create path="nordic" source_files="denmark.csv" source_type="guess" debug_mode="no"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="*.csv" source_type="guess" debug_mode="no"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="*.csv" source_type="guess" debug_mode="no" filter_data="2010" filter_col="1"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="denmark;iceland" source_type="guess" debug_mode="no"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="denmark;iceland" source_type="guess" debug_mode="no"] with css. CSS .csvtohtml tr.rowset-7 .colset-2 { background: #27b399; color: #fff; font-weight:600; }
  • Screenshot - [csvtohtml_create path="nordic" source_files="denmark;iceland" source_type="guess" title="Nordic growth" debug_mode="no"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="denmark" source_type="guess" debug_mode="no" sort_cols="2" sort_cols_order="asc"] AND [csvtohtml_create path="nordic" source_files="iceland" source_type="guess" debug_mode="no" sort_cols="1,2" sort_cols_order="desc,asc"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year"] original csv (nordic.csv): ,Finland,Iceland,Denmark 2013,"10.2%","7.2%","1.4%" 2014,"11.0%","11.0%","1.9%" 2010,"2.5%","2.3%","2.8%" 2011,"-16.6%","6.6%","-6.6%" 2012,"-14.2%","6.2%","1.2%" 2015,"13.2%","16.2%","2.0%"

  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" exclude_cols="3"]

  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" exclude_cols="2,4"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" include_cols="1,3-4"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" include_cols="1,3-4" fetch_lastheaders="2"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" table_in_cell_cols="2,3,4"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" table_in_cell_cols="2,3,4" include_cols="1" table_in_cell_header="Countries"]
  • Screenshot - [csvtohtml_create path="nordic" source_files="nordic.csv" source_type="guess" debug_mode="no" sort_cols="1" sort_cols_order="asc" title="Year" table_in_cell_cols="2,3,4" include_cols="1" table_in_cell_header="Countries"] CSS .csvtohtml .extra-data::before {content: "Hover here for more info";} .csvtohtml .extra-data table {visibility:hidden;} .csvtohtml .extra-data:hover table {visibility:visible;}

  • Screenshot - Same as 16 but when hovered on a specific row(year)


This section describes how to install the plugin and get it working.

Look at inspirational examples of what you can do with the plugin here: http://wibergsweb.se/plugins/csvtohtml/

But FIRST, go through below steps!

1. Upload the plugin folder csvtohtml to the `/wp-content/plugins/’ directory, or install the plugin through the WordPress plugins screen directly.
2. Activate the plugin through the ‘Plugins’ screen in WordPress

The plugin can either fetch files locally from your server (or from an external resource). The plugin supports csv-files, Excel(xlsx-files only), ods-files (spreadsheet) and json-files. If using a json-file then you should set source type to JSON. In most cases the source type should be set to guess if not using JSON.

Local fetch

  1. Create a folder called csvtohtmlfiles in your wp-content/uploads/ manually (e.g. wp-content/uploads/csvtohtmlfiles should be created)
  2. Upload/copy your file to this created folder (e.g. wp-content/uploads/csvtohtmlfiles/testfile.csv). This cannotbe done from media-upload (Use ftp, ssh or directly on your os to copy files to the webserver).

External fetch

  1. Have an uri to your csv-file available/accessible from your computer (eg. https://[domain]/testfile.csv).

1. Begin to understand what you are able to to do with the plugin. Do this by playing around with the CSV to HTML shortcode generator. This is accessible in the admin dashboard – Tools/CSV to HTML. Do this on a desktop computer for easiest management.
2. Try and click/modify settings and see the preview of the table to the right. This preview only shows how it would look like, but functionality such as search and pagination etc isn’t going to work.
3. If you want to see the current output based on applied settings, then you should click the update/preview – button.
4. Settings are splitted into different sections in the shortcode generator page.
5. The section "Debugging" shows known errors and gives warnings depending on your settings. It turns into red when there are any errors or warnings. This doesn’t necessarily mean it won’t work but can be an indicator of somethings you must adjust.
6. You should see the "General" section as a starting point for your settings. By default all csv files that exists in wp-content/uploads are used to generate a table (*.csv).
7. Change *.csv to the name of the file you prepared in STEP2.

Local fetch

  1. Set Path(local) to csvtohtmlfiles or click on the button with three dots and select csvtohtmlfiles (if you have done previous steps you should see your folder csvtohtmlfiles here). In File(s) combined to this table type the file that you put into wp-content/uploads/csvtohtmlfiles
  2. If an Excel-file is selected for fetch, then it is converted to a csv-file and the Excel-file remains intact (so there are two files that has identical data in the same folder). This may seem redudantant, but this is because the plugin fetches data from the csv-file and not from the Excel-file directly.

External fetch

  1. In File(s) combined to this table put in your url that you prepared in STEP2. If your external file is a google spreadsheet, make sure it’s publicy available for download and that you have the full uri to your googlesheets workbook. Also set "add extension automatically" to no.
  2. If you have more files you want to combine, then just add a semicolon (;) and add filename (local or external)

10. Play around with settings until you’re satisfied. In very few cases you should change character encodings but if you’re having issues with encoding, you could try and change these settings.
11. Copy generated shortcode (above General section) and put the shortcode in a wordpress page or post to display table with the functionality you have set in the shortcode generator page.
12. If you don’t like the default design of the table(s), use your theme’s css to change the layout of your site/table etc.

If having issues that you cannot solve please send a mail to info@wibergsweb.se.
If you like the plugin, please consider donating. Please donate to paypal info@wibergsweb.se. Amount does not matter. I like coffee! 🙂

If you feel comfortable by modifying settings directly in your shortcode: Down below are settings available and what they are intended for. Value within parenthesis show the default value for the setting, so if that setting/attribute is not included in the shortcode, the default value for the setting will be applied.
The shortcode should always start with [csvtohtml_create followed by settings/attributes below. Every setting must have a space between and ] must be set at the end of the shortcode.

Another option is to go into the shortcode generator again and repeat previous steps (from STEP2).


add_ext_auto (yes) – Add fileextension .csv to file (if it’s not specified in the source_files). Set to no if you don’t want a file extension to be added automatically. A common use for this is to set this setting to no , so google documents could be accessed (they don’t have .csv at the end).

api_cdn (yes) – (Applicable when fetching json) Set this to no if you want to use wordpress api (wordpress core api could fail with cloudflare for unknown reason)

editable (no)– yes/no – The default is no. If set to yes file(s), the logged in user may edit values directly in the table (through changing values in input-fields) if logged in. Some attributes are temporarily disabled when editing but when set to no or logged out, these attributes are restored.

convert_encoding_from – When converting character encoding, define what current characterencoding that csv file has. (Not required and use only when having issues with encoding)

convert_encoding_to – When converting character encoding, define what characterencoding that csv should be encoded to. (Not required and use only when having issues with encoding)

css_max_width (760) – media query css rules/breakpoint. This is only applied when responsive is set to yes.

css_min_devicewidth (768) – media query css rules/breakpoint. This is only applied when responsive is set to yes.

css_max_devicewidth (1024) – media query css rules/breakpoint. This is only applied when responsive is set to yes.

csv_delimiter (,) – what delimiter to use in each line of csv (comma, semicolon etc)

debug_mode (no) – If set to yes then header-values and row-values would be output to screen and files like "file not found" will be displayed (otherwise it would be "silent errors")

design_template – What template from builtin templates to use in table. Possible values are: nolines, clean, funky, thick, pyjamas, pyjamascols, thinlines

downloadable (no) – If set to yes, a button is shown that creates a download of a csv

downloadable_filename (export_csvtohtml.csv) – What filename to use when downloading

downloadable_text (Download as csv) – What text to show on downloadable button

eol_detection (cr/lf) – CR = Carriage return, LF = Line feed, CR/LF = Carriage line and line feed, auto = autodetect. Only applied to external files. When using local files, new lines are automatically autodeteced.

exclude_cols – What columns to exclude in final html table (1,2,3,10-15 would exclude columns 1,2,3,10,11,12,13,14 and 15). If you want to remove the last column, then simply type last instead of entering a number.

fetch_interval – Set to daily, hourly or weekly. This is how often the actual fetch from source is done. It’s only done when requesting the page with this shortcode on. This would make sense to use for external files even if it’s possible to use with local files as well. For this to work you must specify a html_id!

fetch_lastheaders (0) – Number of specific headers (e.g. columns) to retrieve (from the end)

filter_data – What data to filter in table (specific string), e.g. FSC

filter_data_ucfirst (no) – If set to yes, first letter will be uppercase (applies only to a-z)

filter_operator (equals) – Tell how to apply the filter
between >= value1 and <= value2
equals (=)
equals_caseinsensitive (equals with case insensitive filter
urlequals equals case insensitive and search both with hypens/spaces and underscores
less <
lequal <=
more >
mequal >=
wildcard any
newdates from specific date or from todays date

filter_removechars – If having more characters than just numbers in the (cell)values, remove that/those characters so comparision will be done for numbers only (e.g. 567 will be used for comparision if $567 is displayed)

filter_col– What column to use filter on (Only ONE column)

fixed_leftcol (no) – Use fixed left column (or not). Use in combination with fixed or sticky header

float_divider (.) – If fetching float values from csv use this character to display another "float-divider chacter" than dot (e.g. 6,3 instead of 6.3, 1,2 instead of 1.2 etc)

header_backgroundcolor – background color of header

header_type – header type. Can be set to sticky (header fixed on scroll) or fixed (requires a table height (table_height attribute))

grabcontent_col_fromlink – Get content from another column to use as a link in specified column with grabcontent_col_tolink

grabcontent_col_tolink – Get content from another column to use as a link in specified column => (<a href link with grabbed content from grabcontent_col_fromlink”>{tolink col’s content}

groupby_col – Group by a column (e.g. If different companies are listed in that column, grouping will be done for companies)

groupby_col_header (yes) – If using groupby_col and this is set to yes, show headers on a row before all rows for this grouped value is shown

headerrows_start – Which row in file that headers will be generated from

html_id – set id of this table

html_class – set class of this table (besides default csvtohtml – class)

hidetable_load (no) – Hide table at pageload if set to yes

hidetable_reset (no) – Hide table when clicking reset button if set to yes (otherwise full table would show even if hidetable_load is set)

htmltags_autoconvert (no) – Set to yes if you want to (auto)convert links to html-links (<a>), images to <img> and mail to "maillinks" (link with mailto:).

htmltags_autoconvert_imagealt (empty string) – Set alt text for all images OR based on a specific columns value (e.g. if set to 2 then grab value from second column for the same row that image is on)

htmltags_autoconvert_newwindow (no) – If ordinary links, open them up in a new window. This attribute only has effect when htmltags_autoconvert is set to yes

include_cols – What columns to include in final html table (1,2,3,10-15 would display column 1,2,3,10,11,12,13,14 and 15). If include_cols is given, then exclude_cols is ignored.

include_rows – What rows to include in final html table (1,2,3,10-15 would display row 1,2,3,10,11,12,13,14 and 15).

json_startlevel – When using json as source_type the plugin would fetch data from first level in json hiearchy

large_files – Set to yes if dealing with large files and need to lower memory usage from server.

notfound_message (no) – What message to show when searchresult not found. (search_functionality must be set to yes for this option to be valid)

pagination (no) – Tells if pagination should be used or not (yes/no). Default is no.

pagination_above_table (no) – Show pagination above table. Pagination must be set to yes for this to work.

pagination_below_table (yes) – Show pagination below table. Pagination must be set to yes for this to work.

pagination_links_max (10) – Show links (1,2,3… up to 10 links as default). Set to 0 if you do not want to show these links at all.

pagination_rows (10) – Nr of rows to show for each pagination.

pagination_start (1) – Row to start pagination with (generally always 1)

pagination_text_last (Last) – Text last for pagination. Set to "" if you do not want to show (if pagination is set to yes).

pagination_text_next (Next) – Text Next for pagination. Set to "" if you do not want to show (if pagination is set to yes).

pagination_text_prev (Prev) – Text Prev (previous) for pagination. Set to "" if you do not want to show (if pagination is set to yes).

pagination_text_start (Start) – Text start for pagination. Set to "" if you do not want to show (if pagination is set to yes).

path – relative path to uploads-folder of the wordpress – installation ( eg. /wp-content/uploads/{path} ). Applies to local files.

resetbutton_text (Reset) – Reset button text (search_functionality must be set to yes for this option to be valid)

responsive (yes) – yes/no – The default is yes, but this could be set to no if you have issues with other css on your site.

return_rows_array (no) – yes/no. Useful if you create own code and want to retrieve data only.

search_exactmatch (no) Use exact match for search (e.g. Great retrieves values such as Great, not Great Britain)

search_caseinsensitive (yes) Use case insensitive (e.g. Great and great returns Great or great on search)

search_cols – What columns to search in when using search functionality. Include and exclude cols are ignored when using this setting/attribute. If no value is given to this attribute/setting – all columns are searched.

search_excludedrows (no) – Search in excluded rows (e.g. if include_rows = “1-10” search in row 11-10000 would be done if those rows exists in table/file)

search_functionality (no) – Make table data searchable (a searchinput field, a searchbutton and a reset-button is displayed).

search_highlight (no) – Show highlighted filtered or search

search_highlightcolor (yellow) –Color to show as highlighted

searchbutton_text (Search) – Search button text (search_functionality must be set to yes for this option to be valid)

searchinput_placeholder (empty string) – Placeholder for searchinput field. Default is empty.

search_requiredchars (0) – How many characters that are required when doing a search. Default 0 tells there are no requirement.

search_requiredchars_message (empty string) – Message to user if not required characters are valid when doing a search. If this is not set, then a standard message will appear.

search_realtime (no) – Set to yes if you want the system to search without hitting any button (after user typed some characters). There’s a delay in about 1 second after user has begun typing

sort_cols – Which column(s) to sort on in format nr,nr och nr-nr (example 1,2,4 or 1-2,4)

sort_cols_order (asc) – Which order to sort columns on (asc/desc). If you have 3 columns, you can define these with different sorting like asc,desc,asc

sort_cols_userclick – sort_cols must be set. if this is set to you, user can click to sort a specific column. This overrides sort_cols_order after first click

sort_cols_userclick_arrows – sort_cols_userclick must be set. Arrows are shown in headercolumns indicated ascending or descending order.

source_files – file(s) to include. If using more than one file – separate them with a semicolon (;). It ‘s possible to include a full url instead of a filename to fetch external csv files. It’s also possible to fetch files from a given path (with for example *.csv).

source_type (visualizer_plugin) – What type to use for identifying content in csv-files (valid types are guess and visualizer_plugin). If you’re unsure what to set, set "guess" here.

table_in_cell_cols – You can choose to have extra data in a table in a cell from specific column(s) given (same format as include_cols). exclude_cols is ignored if this is used. This could be useful if you want to do a hover-effect to show some extra data.

table_in_cell_header (More data) – Column name for added data, if table_in_cell_cols is specified and table_in_cell_header is not the default value is: "More Data"

table_in_cell_wrapperclass – Class for div surrounding table inside cell when using table_in_cell_cols

table_height – Table height in px, em, rem, % or vh. Use together with fixed header

table_offset_header (0) – Offset of header in relation to it’s parent. Primarily used for sticky/fixed headers.

table_width – Table width in px, em, rem, % or vw. Use together with fixed left column

title – Set title that is shown as text in top left corner of html table (If not set – nothing is shown)

total_percentage_above_table (yes) – Show total percentage of a specific value above table. Ignored if total_percentage_chechkvalue and total_percentage_col is not set.

total_percentage_below_table (no) – Show total percentage of a specific value below table. Ignored if total_percentage_chechkvalue and total_percentage_col is not set.

total_percentage_checkvalue – Check percentage of a specific value in a specific column. totals_pecentage_col must be specified.

total_percentage_col – Which column to check in. total_percentage_chechkvalue must be specified for this to work

total_percentage_text – Define what text to say when using total_percentage_checkvalue. If not defined it will only show percentage value followed by %

total_percentage_decimals (0) – Number of decimals to show when showing total percentage

totals_cols_bottom – Add totals with given columns at bottom of table (example 1,2,4 or 1-2,4)

totals_cols_bottom_empty – What string/character to show when there’s no calculation

totals_cols_bottom_title – Set a specific string when added totals (overrides totals value and totals_cols_bottom_empty)

totals_cols_bottom_title_col – Which column to set this specific title at

totals_cols_prefix (empty string) – Add prefix to the total column(s) (e.g. $10)

totals_cols_suffix (empty string) – Add suffix to the total column(s) (e.g. 10$)

usage for filterdata: %urlparts-X where the X indicates pathlevel (e.g if %urlparts-2 path would be site/path1/path2).

usage for path: If %userlogin% is specified somewhere in path, then replace that with the actual username of logged in user (e.g. csvtohtmlfiles/%userlogin% would load different files based on which user that is logged in)

usage for entering file (local files): Wildcards for filesearch with * (e.g. beliver*.csv would include all csv files that began with beliver in it’s filename)

Look at inspirational examples of what you can do with the plugin here: http://wibergsweb.se/plugins/csvtohtml/

If having issues that you cannot solve please send a mail to info@wibergsweb.se.

If you like the plugin, please consider donating. Please donate to paypal info@wibergsweb.se. Amount does not matter. I like coffee! 🙂


Is your tables responsive?

The short answer is yes. From v1.60 the tables are responsive as default. If you want more advanced responsivity you have to modify css yourself.

Why don’t you include any css for the plugin?

From v1.60 there are som basic css to make responsive table. It’s possible to turn this css off if having issue though.
The goal is to make the plugin work as fast as possible as expected. By not supplying a lot of css the developer has full control over the design. If you know css, it’s easy to apply your style on all tables / invidual tables etc. From version 1.6 there are also some templates to use.

Is the plugin totally free?

Yes it is. If you feel bad about using this plugin for free, please write a review and/or give a donation to PayPal info@wibergsweb.se.

Is there a premium/pro version of the plugin available?

No there’s no need. This plugin offers a lot totally free. The plugin’s existence depends on donations only.If you like the plugin, please consider donating. Please donate to paypal info@wibergsweb.se. Amount does not matter. I like coffee! 🙂


29 de octubre, 2023 1 reply
Free plugin that offers sticky and fixed headers only available in premium versions of other plugins. Developer extremely responsive and tolerant of novices, particularly those with very limited CSS and HTML knowledge!
13 de julio, 2023 3 replies
Great tool to use with minimalistic design, easy to use and extremely helpful (and don't forget fast to respond) developer! One critique would be the documentation could be more in depth, but you get the point pretty quickly. Can't recommend enough!
18 de enero, 2023 1 reply
Very good simple extension, powerful and effective. Opens possibilities of dynamic wordpress pages, with simple and effective updates. Bravo !
29 de marzo, 2022 1 reply
Perfect solution in displaying (and fetching) csv files into your wordpress pages and posts. Thanks wibergsweb
Read all 18 reviews

Contributors & Developers

“CSV to html” is open source software. The following people have contributed to this plugin.


“CSV to html” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “CSV to html” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



Sticky top header and left column (at the same time) working on several themes (not just default WordPress themes)


Sticky and fixed headers improved
Table width are now possible to specify
Table height and width as support for all standard units css (%, em, rem, px, vw (width), vh (height))
Fixed left column introduced (fixed_leftcol)
Offset of header introduced (table_offset_header)


Search and filter functionality improved
– Filtering can now be done on one ore unlimit number of columns (e.g. filter_col = “1-2, 5-10, 13 etc)
– Searches with match(es) display rows from all columns and not just one (Before all columns were searched but only one column was filtered out)
– It’s possible to search in the whole file(s) when doing a search (search_excludedrows = “yes”) even if include_rows is set (e.g. search on data in all 20 rows would the attribute ignore include_rows=”1-5″)

New attribute that returns how many visible rows are returned on search programmatically: return_found (yes/no) (advanced programmers)

Bugfix in shortgenerator regarding to search in columns-functionality
Bugfix in shortgenerator regarding to inclusion of columns and html conversions

Some explainatory guidelines added in shortcode generator


Bugfixes regarding to sort_cols_userclick and sort_cols_userclick_arrows


Search highlighting (search_highlight=”yes”) – new feature (yellow default color, can be changed by using search_highlightcolor)


Fixed headers (requires height of table) – new feature
Sticky headers (fixed on scroll) – new feature
Table height (set fixed height) – new feature
It’s now possible to change background-color of header through attributes (looks better with a solid background color when using a header type) – new feature
Fixed some spelling in the shortcode tool area
Some minor related deprecated issues fixed for PHP 8.1.


Specific autodetection (ini_set()) syntax of line-endings removed because this is deprecated from PHP 8.1. PHP should be able to handle this by it’s own.
Other PHP 8.1 related deprecated issues fixed.
Attribute added (large_files) to use less memory when loading csv-file(s).


Now it’s possible to fetch content(link) from a specific column and use this link as a wrapper for another columns content.
Bugfix – get_defaults() generating an error in console when user not logged in


Grouping is now done after sorting, so grouper heading is not included when sorting is applied
Groupheading class is added on the tablerow for each groupheader section


It’s now possible to group by values based on a specific column
The possiblity to add a header or not for each grouping section


Shortcode generator bugfix


Exact match searching is now available
Case insensitive search and filtering is now possible
Possible to search in given columns only


Added possibility to have arrows in header columns.


Bugfix using external files with parameters (such as google documents) for searching/pagination fixed.


Bugfix sortable user click: Now it works if you have setting sort_cols_userclick="yes" on serveral tables on the same page. It also trims text so sorting is more accurate.


Files with .xlsx (Excel) and .ods are now to supported (to load from / source_files) with help from Spout library.
It’s now possible to have autosort for user (user clicks on a column and sort the column ascending or descending)
You can now tell what row in file(s) to start from (where headers should start)
It’s now possible to filter rows that has same date as today or newer (filter_operator = newdates). It’s also possible to filter dates from a specific date.
Shortcode generator (located in Tools/CSV to HTML) is updated with above functionality


Renamed css-rules for shortcut generator to avoid conflicts with users css
Adjusted some template’s css (headers left aligned)


Added settings regarding to totals in the shortcode generator (these attributes was available before but not in the shortcode-generator)
Clarified some settings in descriptions of settings


Bugfix javascript, warning in javascript-console when using inputs not related to this plugin.
Bugfix shortcode generator when selecting source type
No warnings generated from json source type when fetching non-json file


A totally new shortcode generator is now available to be able to create shortcodes and seeing a preview of the result while creating it. Just go into the menu tools/CSV To HTML and play around with it!


When user hits enter in search box it acts same way as it does when you click on search-button


Clarifications in debugging mode and some spell/grammar fixes. Now a given shortcode (shortest possible) is given for testing.


Removed warning issue of editable file (when not using editing)


Bugfix – Also at resetting – show table correctly again


Bugfix – important update for them who uses search functionality! Displaying correctly after search now.


Editable values in local csv-file(s) directly in the browser. This makes it smooth to update csv-file(s) without using any other texteditor.
Faster loading of csv-files


Possible to add percentage value for a specific column and show that both above and below table. Some improvements regarding to debug-functionality.


Characters are now ignored at calculation (e.g. €56 will turn into 56 and 24€ will turn into 24. These numeric values will be used for the actual calculation of the column)


IMPORTANT! Totals not showing correctly before. Now this is fixed!
It’s now possible to add char(s) to the total column(s) – before (e.g. $10) or after (e.g.)


Some added design templates (premium version only)


Preparation before upcoming Premium version of the plugin


Handling of empty data better together with debuginfo. Only "silent" error now when using debug when no data avaialable.


Warning of html_id removed (when checking local tablefiles)


Important update! Bugfix: First two columns should not be duplicated now


Possible to save tables temporarily and update from source once,hourly, daily or weekly (If set to once, it only retrieves data from source once and then always fetches from file on server). It would make most sense to use this together with external files.
New source_type json added (It’s now possible to fetch json content from file(s))
Another way of fetching jsondata is added because of some issues with cloudflare and wp_remote_get()
Added some checks to make debugging even easier


Important update! Bugfix: Pagination will work together will filter_operator equalsurl.


A new operator is added for filter_operator and it is called equalsurl. When fetching data from url, spaces often becomes hyphens(-) or underscores(_) and this setting solves this by seaching for all necessary combinations (with spaces between words, with hyphens and with underscores). Filter is applied in a case insensitive manner. If filter_data_ucfirst is set to yes, the filter_operater overrides this value.


Filter data can now be set by part of url (e.g. domain/part1/part2/part3). The use of %urlparts-X% makes this possible where X indicates level in path hiearchy (1,2 or 3). If X is set to "last" it would be automatically fetch last level (part3).
Filter data’s first letter could be automatically set to upper case (Useful in combination with %urlparts-X%)


It is now possible to export a csv-file when clicking on a button under the table. The download process does not require any temporary file creations.


Possible to use %userlogin% for creating a dynamic path based on loggedin user, e.g. users/%userlogin%.


Ignore error when using Premium version (>0.96) in combination with "Gutenburg".


Ignore error when entering incorrect values for table in cell columns


Bugfixes: Some warnings are ignored when including files when not are avaialable, when using incorrect encoding etc
Compability fix for CSV to HTML Premium (Premium is only in beta stage for now)


Bugfix: Include last row when fetching external files when using source_type guess
Debugging-class improved for translation/internationalisation
More hints what could be going wrong when debugging


It’s now possible to easily add a totals row under the bottom of a table and tell which columns that should be included
You can also add a custom title to show , e.g. TOTAL at specific column


Added possibility to set alt-description based on a specific columns value (or a fixed alt-value for all images)


Bugfix: fixed issue when realtime search active and when typing to fast or searching while plugin already searching
Realtime search attribute now works invidually for different tables (so one table can have realtime search and another not on the same page)
Autoconversion of url’s, images and emails to html-tags are now possible with attribute settings
With autoconversion it’s also possible to set if links should open in a new window or not


Possible to have an empty table when clicking reset button and not only at first pageload.
Show a custom message when search by user did not give any results. This is within a span which makes it easy to style with css.
Set a required length of characters at search
Set a specific message when required length length of characters at search is not valid
New attribute to add placeholder to search inputfield
It’s now possible to search in "realtime", e.g. search starts when user enter characters in search input field directly
debug-attribute alais for debug_mode (because of some people enters debug instead of debug_mode)


Possible to have an empty table at pageload (when doing search it will get filled with appropiate result).


Added a function for converting Windows-1255 characters to UTF-8 (this is not builtin into PHP mb_convert_encoding – function).


Bugfix responsive – relationsship between column and rows works indenpently of source_type given and
managaging several tables on same page with different number of columns now works.


Textdomain has changed from csvtohtml-wp to the expected csv-to-html for correct internationalisation.


filter_operator has a new option: wildcard which filters data from a string within a substring
Search functionality implemented:
An input search field, a search button and a reset button is created
Easy configurable texts for the buttons
The buttons are easily styled because of classes set for each button
Searchresult is shown directly without reloading the page
Bugfix: When excluded columns responsive tables "out of the box" was in some cases not working as expected. Now it is.


Pagination implemented:
It’s possible to show pagination first, previous, next or last and specific links in between.
Easy configurable texts and number of specific links to show.
You can also specify if the pagination should be above or below table or both. If having pagination for several tables
The pagination is separated accordingly and the page is not reloaded when browsing through tabledata.
If javascript is not applicable then pagination could be used but only for one specific table and the page would be reloaded


If having more than one table an automatic html id is generated so responsive css rules can be generated invidually.


Responsive tables "out of the box". It adjusts table view automatically based on different resolutions/devices.
It’s also possible to adjust mediaquery/css breakpoints.


Possible to tell which rows to include (in the same format as include_cols)


Possible to apply filter in different ways such less then, more than , less or equal then, more or equal then or between
Extended debug-functionality separated from core.
Many thanks to g.deepwell for making this update possible! ( https://wordpress.org/support/users/gdeepwell/ )


Apply a new filter on all rows based on a specific string from a specific column.
It’s now possible to include a subset of the whole table in a cell where you specify columns that should be included. This data is added to the end of the table. Combined with css this could be used for hiding/showing data.
Added more useful debug-functionality for getting the plugin running even quicker
Many thanks to g.deepwell for making this update possible! ( https://wordpress.org/support/users/gdeepwell/ )
Plugin tested and verified for use with version 5.6 of WordPress


Better performance when not debugging due to debugging code loaded when neccessary.
A new attribute has been added so float numbers fetched from csv-files could be shown with another character instead of dots (probably comma)


A new attribute has been added so .csv does not have to be added automatically. This could be useful when loading files from Google Drive or similar cloud based services.


A html-tag that (for some reason) has been inserted by mistake. It’s now corrected. Validation of html table should now validate.


Some missing tag in table corrected (/tbody and id-attribute(when used) corrected).


Debug code removed. (update to this version if you tried to install/update to 1.1.40!)


Changed autodetection of EOL to auto(detect) (from cr/lf) when importing CSV-files.


Bugfix: Display order of columns when including, excluding is fixed. (In some circumstances the display order of columns would be inccorect before)


CURL is not used anymore for fetching external files. Instead native WordPress HTTP API is used. Why? It’s faster and handles security (with ssl) much better. As a fallback CURL is used by the HTTP API.


Bugfix admin page. Important to update to this version! (if you have installed 1.1.36)


Help-page introduced in wordpress dashboard
Debugging functionality improved
CURL bugfix when mixing http and https – protocols.
Possible to disable/ignore curl if something goes wrong (even if CURL is installed)
Now it’s possible to use wildcards (to grab all csv-file from a specified path for example)


Bugfix sorting on columns when both asc and desc are used


Sorting of columns are now possible. It’s also possible to define different sortorders depending on which column is sorted.


Now it’s possible to convert(translate) characterencoding from csv to another charset (for display)


Now it’s possible to use "last" instead of entering a specifing column-number when excluding a column.


Now it’s possible to use a custom delimiter for each row in a csv file.


Autodetection of line endings now supported. Works automatically on local files (on server)
Possible to specifiy custom line endings when loading external links (when CURL is enabled)


Now it’s possible to specify an extra class for the table. Example: If used together with the tablesorter plugin (https://wordpress.org/plugins/table-sorter/) you can add a class called tablesorter and combine these two plugins to
create a "tablesorted" html table generated from csv file(s) in realtime.


Now it’s possible to include or exclude columns in format 1,2,3 or 1-3. It’s also possible to combine these two eg. 1,2,3,7-9,13,14,15.


Semantic bugfix. When not defining a path an extra slash was included in the path. Now there are no extra slashes.
Now it’s possible to include a full url to fetch csv-files from external sources. CURL are used to fetch csv files from external sources, but if CURL is not installed, then php’s file() function is used but that requires that the server
has allow url fopen enabled.


Plugin released