При работе с WordPress часто возникает необходимость обработки табличных данных. Сегодня мы рассмотрим пример, как импортировать данные из excel на сайт на WordPress. В качестве инструмента будем использовать простую библиотеку SimpleXLSX, а о том, как с ней работать мы разбирали ранее.
Библиотека должна быть подключена следующим образом:
require_once get_template_directory() . '/includes/plugin-additions/simplexlsx.class.php';
Для примера рассмотрим простую таблицу с контактами:
Для ее обработки использует такой код:
// Simple XLSX Parser Template
$fileImport = get_stylesheet_directory() . '/data/example.xlsx';
if ( $xlsx = SimpleXLSX::parse( $fileImport )) {
$sheetData = $xlsx->rows(1);
$array = array();
foreach ( $sheetData as $keyD => $sheetRow ) {
if ( $sheetRow['0'] && $sheetRow['1'] ) {
$array[$sheetRow['0']] = $sheetRow['1'];
}
}
var_dump( $array );
} else {
var_dump( SimpleXLSX::parse_error() );
}
В результате, в переменной $array у нас должен оказаться такой массив:
array(6) {
["address"]=>
string(65) "м. Савёловская, ул. Вятская улица 35с4"
["geo"]=>
string(20) "55.798401, 37.580502"
["working-days"]=>
string(11) "Пн.-Пт."
["working-hours"]=>
string(15) "10:00 — 18:00"
["mail"]=>
string(20) "webdev1992@yandex.ru"
["phone"]=>
string(18) "+7 (800) 600-50-40"
}
Для того, чтобы сохранить в опции сайта используем этот код:
if ( isset( $array ) && !empty( $array ) ) {
update_option( '_test_data', $array, 'yes' );
}
Учитывайте, что последний аргумент влияет на то, будет ли эта опция автоматически подгружаться в память при инициализации WordPress. Если указать значение yes, то функция get_option()
возьмет данные из кеша, а если no, то сделает дополнительный запрос в базу. Т.е. параметр yes/true стоит использовать, если эта опция понадобится на всех страницах.
Т.к. в нашем примере у нас таблица с контактными данными, то, скорее всего, они будут на всех страницах сайта в подвале, поэтому устанавливаем yes.
Получить данные из опции можно следующим образом:
if ( $test_data = get_option( '_test_data', false ) ) {
var_dump( $test_data['address'] );
}