web-dev-qa-db-fra.com

WP Base de données en fichier CSV

Je travaille sur la création d'un script qui prend une table de base de données WordPress personnalisée et l'exporte dans un fichier CSV. Je n'arrive pas à le faire fonctionner. Est-ce que quelqu'un peut m'aider

<?php
$parse_uri = explode( 'wp-admin', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
global $wpdb;
$result = $wpdb->get_results("SELECT * FROM wp_email_table;");
$i = 0;
foreach ($result as $row) {
$csv_output .= $row->Field.
$i++;
}
$csv_output .= "\n";

$values = $wpdb->get_results("SELECT * FROM wp_email_table;");
foreach ($values as $rowr) {    
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;
?> 

OK, donc je l'ai modifié un peu plus et maintenant je reçois l'erreur suivante

Erreur irrécupérable: impossible d'utiliser l'objet de type stdClass en tant que tableau sur la ligne 8

1
Phantom

Vous avez quelques erreurs.

  1. La première est que vous êtes clairement dans le contexte WordPress. Vous devriez utiliser l'API AJAX pour cela plutôt que d'inclure wp-load.php. Ce n'est pratiquement jamais la bonne façon de le faire.
  2. La valeur par défaut de get_results() est un objet. Vous allez donc avoir des erreurs lorsque vous essayez d'utiliser les résultats sous forme de tableau. Ajoutez ARRAY_A à la liste d'arguments pour cette fonction (ou utilisez la syntaxe d'objet)
  3. Ne codez pas en dur le préfixe de table WordPress
  4. $file n'est pas défini
  5. Vous avez deux requêtes quand vous n'en avez besoin que d'une
  6. Votre foreach et for, et le code associé, est beaucoup trop compliqué.

Je n'ai pas votre table à tester mais cela devrait être proche.

function csv_pull_wpse_212972() {
  global $wpdb;
  $file = 'email_csv'; // ?? not defined in original code
  $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}email_table;",ARRAY_A);

  if (empty($results)) {
    return;
  }

  $csv_output = '"'.implode('";"',array_keys($results[0])).'";'."\n";;

  foreach ($results as $row) {
    $csv_output .= '"'.implode('";"',$row).'";'."\n";
  }
  $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;
}
add_action('wp_ajax_csv_pull','csv_pull_wpse_212972');

Pour "déclencher" ceci envoyer une requête à http://sitename.com/wp-admin/admin-ajax.php?action=csv_pull. Dans WordPress, vous pouvez générer cela (et devriez le générer) avec $ajax_url = admin_url('admin-ajax.php?action=csv_pull');

2
s_ha_dum