Экспорт таблицы WordPress в Excel

26 февр. 2011 г., 05:19:48
Просмотры: 18.1K
Голосов: 3

Я ранее создавал PHP-скрипты для экспорта таблицы базы данных в формате .xls, например такой:

$select = "SELECT * FROM tracking";
$export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( )  );
$fields = mysql_num_fields ( $export );
$file = 'export';
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
    if ( ( !isset( $value ) ) || ( $value == "" ) )
    {
        $value = "\t";
    }
        else
    {
        $value = str_replace( '"' , '""' , $value );
        $value = '"' . $value . '"' . "\t";
    }
        $line .= $value;
 }
 $data .= trim( $line ) . "\n";
 }
 $data = str_replace( "\r" , "" , $data );
 if ( $data == "" )
 {
 $data = "\n(0) Records Found!\n";
 }

$filename = $file."_".date("M-d-Y");

header("Content-type: application/octet-stream");
header( "Content-disposition: filename=".$filename.".xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";

Мне хотелось бы узнать, как "преобразовать" этот код в формат WordPress с использованием класса $wpdb? Я могу написать начальный запрос для выборки данных из нужной таблицы, но теряюсь в некоторых особенностях класса wpdb. Также хотелось бы узнать, куда поместить этот код в WordPress, чтобы при нажатии пользователем на ссылку выполнялся этот запрос и скачивался .xls файл?

Любая помощь будет очень ценной! Этот сайт просто замечательный!

1
Комментарии

После долгих мучений это мне помогло. Смотрите здесь

Fungayi Makoni Fungayi Makoni
24 апр. 2020 г. 09:43:34
Все ответы на вопрос 5
0

Почему бы не использовать синтаксис SELECT INTO OUTFILE:

$wpdb->query("SELECT * INTO OUTFILE '/path/to/file' 
 FIELDS TERMINATED BY '\t' 
 LINES TERMINATED BY '\n' 
 FROM tracking");
26 февр. 2011 г. 18:09:25
0

Создайте этот файл как 'export_data.php'. Затем вызовите этот php по ссылке

<?php
    $host = 'localhost';
    $user = 'mysqlUser';
    $pass = 'myUserPass';
    $db = 'myDatabase';
    $table = 'products_info';
    $file = 'export';

    $link = mysql_connect($host, $user, $pass) or die("Не удается подключиться." . mysql_error());
    mysql_select_db($db) or die("Не удается подключиться к базе данных.");

    $result = mysql_query("SHOW COLUMNS FROM ".$table."");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field']."; ";
            $i++;
        }
    }
    $csv_output .= "\n";

    $values = mysql_query("SELECT * FROM ".$table."");
    while ($rowr = mysql_fetch_row($values)) {
        for ($j=0;$j<$i;$j++) {
            $csv_output .= $rowr[$j]."; ";
        }
        $csv_output .= "\n";
    }

    $filename = $file."_".date("Y-m-d_H-i",time());
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header( "Content-disposition: filename=".$filename.".csv");
    print $csv_output;
    exit;
?>
20 мая 2011 г. 12:04:09
3

Я немного опоздал со своим ответом, надеюсь, что он еще будет полезен :) Но я хочу помочь всем, кому нужна обновленная функция WordPress для экспорта данных из пользовательской таблицы в аккуратный и чистый CSV-файл с построчным отображением.

    function ns_contact_form_csv_pull() {

       global $wpdb;

       $table = 'ns_contact_form'; // название таблицы
       $file = 'ns_contact_form_csv'; // имя CSV-файла
       $results = $wpdb->get_results("SELECT * FROM $wpdb->prefix$table", ARRAY_A);

       if(count($results) > 0){
          foreach($results as $result){
          $result = array_values($result);
          $result = implode(", ", $result);
          $csv_output .= $result."\n";
        }
      }

      $filename = $file."_".date("Y-m-d_H-i",time());
      header("Content-type: application/vnd.ms-excel");
      header("Content-disposition: csv" . date("Y-m-d") . ".csv");
      header( "Content-disposition: filename=".$filename.".csv");
      print $csv_output;
      exit;

    }
   add_action('wp_ajax_csv_pull','ns_contact_form_csv_pull');

Чтобы скачать CSV (необходимо быть авторизованным), просто добавьте этот URL в адресную строку браузера: http://example.com/wp-admin/admin-ajax.php?action=csv_pull ... замените домен на свой :)

Вы можете вызвать эту функцию в любом месте WordPress, используя:

$ajax_url = admin_url('admin-ajax.php?action=csv_pull');
24 февр. 2017 г. 02:21:38
Комментарии

как также получить заголовки столбцов?

Divyanshu Jimmy Divyanshu Jimmy
28 июн. 2017 г. 16:37:29

@Softxide, я не совсем понимаю, что вы имеете в виду

Nuno Sarmento Nuno Sarmento
30 июн. 2017 г. 19:38:58

мне нужны были названия столбцов в выгружаемом csv файле. Я использовал вашу логику и добавил названия столбцов.. +1

Divyanshu Jimmy Divyanshu Jimmy
2 июл. 2017 г. 10:11:21
1

Если у вас есть phpmyadmin, просто перейдите в экспорт и выберите Excel вместо SQL.

26 февр. 2011 г. 07:59:26
Комментарии

Мне нужно выполнить этот код на фронтенде приложения, а не в админке.

Rob Bennet Rob Bennet
26 февр. 2011 г. 08:43:01
0

Что-то вроде этого:

$results = $wpdb->get_results('SELECT * FROM tracking;');

Подробности смотрите в Выборке общих результатов в Кодексе.

Не уверен, как лучше реализовать ссылку на это, возможно, страница с пользовательским шаблоном подойдет.

26 февр. 2011 г. 21:21:36