How to convert data from csv file to HTML?
Some sites has large amounts of information. For more reader-friendly, this data put to table. But what do you do when the size of the table can be above 100 rows? Making and editing this table in default editor like Gutenberg or some like this is really the elusive problem. Yeah, I saw WordPress plugin but it doesn’t updated few years and I think, that better way is resolve this problem it’s clean code without plugins or etc.
Problem: How to convert data from csv file to HTML in Wordpress without plugin?
Solutions: By default, PHP has function fgetcsv for work with CSV files, so all we have left is add little bit of magic 🙂
<?php
function convert_csv_to_html( $file_url, $link_title, $link_class ) {
$file_url = esc_url( $file_url, [ 'http', 'https' ] );
$file_path = $_SERVER['DOCUMENT_ROOT'] . wp_make_link_relative( $file_url );
if ( ( $handle = fopen( $file_path, 'r' ) ) !== false ) {
$link_class = ( ! empty( $link_class ) && preg_match( '/^[_a-z0-9- ]+$/', $link_class ) ) ? 'class="' . $link_class . '"' : '';
$count_rows = 0;
echo '<table class="table">';
while ( ( $line = fgetcsv( $handle, 1000 ) ) !== false ) { // Set 1000 Lines Limit
echo '<tr>';
foreach ( $line as $cell ) {
if ( $count_rows === 0 ) {
// Added Table Header Row
echo '<th>' . htmlspecialchars( $cell ) . '</th>';
} else {
// Added Other Rows
if ( filter_var( $cell, FILTER_VALIDATE_URL ) === false ) {
echo '<td>' . htmlspecialchars( $cell ) . '</td>';
} else {
echo '<td><a href="' . esc_url( $cell, [ 'http', 'https' ] ) . '" ' . $link_class . '>' . $link_title . '</a></td>';
}
}
}
echo '</tr>';
$count_rows++;
}
fclose( $handle );
echo '</table>';
}
}
As you can see it's simple!